# マウス操作を有効化(タッチでスクロール・範囲選択) set -g mouse on # スクロール履歴を増やす set -g history-limit 50000 # コピーモードを vi キー操作に setw -g mode-keys vi bind -T copy-mode-vi v send -X begin-selection bind -T copy-mode-vi V send -X select-line bind -T copy-mode-vi C-v send -X rectangle-toggle # set-clipboard external(下記)によりOSC52経由でローカル端末のクリップボードへ転送される # (OS依存の外部クリップボードコマンドには一切依存しない) bind -T copy-mode-vi y send -X copy-selection-and-cancel bind -T copy-mode-vi Enter send -X copy-selection-and-cancel bind -T copy-mode-vi Escape send -X cancel # コピーモードの選択ハイライト色 setw -g mode-style 'fg=#111827,bg=#34d399,bold' # コピー内容をOSC52経由でローカル端末のクリップボードへ送る。 # `on`ではなく`external`を使う: `on`はtmux自身のコピー操作(上記y/Enterのような # 明示的なユーザー操作)だけでなく、ペイン内で動作する任意のプログラムが自発的に # 出力するOSC52エスケープシーケンスも無条件に実端末へ転送してしまう。この # ターミナル中継(terminal-session.ts)はpty→WebSocket間でANSI/OSCのサニタイズを # 行っていないため、悪意あるファイル内容やコマンド出力にOSC52書き込みシーケンスが # 埋め込まれていた場合、利用者の操作なしにホストOSのクリップボードが静かに書き # 換えられてしまう(コードレビューでHIGH指摘、発見)。`external`はtmux自身の # コピー操作のみを転送し、ペイン内任意プログラムの自発的なOSC52送出はブロックする。 set -g set-clipboard external # prefix + m でマウスモードを ON/OFF 切替 bind m set -g mouse \; display "mouse: #{?mouse,on,off}" # Shift+Enter などの修飾キー付きキーを Claude Code へ通す set -s extended-keys on set -as terminal-features 'xterm*:extkeys' # Powerline風ステータスバー set -g status on set -g status-position bottom set -g status-interval 10 set -g status-justify left set -g status-style 'bg=#111827,fg=#cbd5e1' set -g status-left-length 50 set -g status-right-length 80 # 左側:tmuxセッション名(コンテナのホスト名はランダムなIDで無意味なため使わない) set -g status-left '#[fg=#0d1117,bg=#a3e635,bold] 󰆍 #S #[fg=#a3e635,bg=#111827,nobold] ' # 中央:ウィンドウ番号と実行中コマンド setw -g window-status-separator '' setw -g window-status-format '#[fg=#94a3b8,bg=#1e293b] #I 󰆍 #W #[fg=#1e293b,bg=#111827]' setw -g window-status-current-format '#[fg=#ffffff,bg=#6366f1,bold] #I 󰆍 #W #[fg=#6366f1,bg=#111827,nobold]' setw -g window-status-activity-style 'fg=#facc15,bg=#1e293b,bold' # 右側:操作状態を必要なときだけ表示し、日付と時刻は常時表示 # #{?cond,...} 条件式にネストした #[...] スタイルタグの属性区切りは、 # カンマのバックスラッシュエスケープではなくスペースを使う。 # Debianパッケージのtmux 3.3a(このDockerイメージが実際にインストールする # バージョン)はエスケープされたカンマ区切りを正しくパースできず、生の # 設定文字列がそのままステータスバーに表示されてしまう(新しいtmux(3.6b等) # では問題なくパースできるため、開発環境によっては気づけない)。スペース # 区切りならエスケープ不要でtmux 3.3a/3.6b両方で正しく描画されることを # 確認済み。 set -g status-right '#{?pane_in_mode,#[fg=#111827 bg=#34d399 bold] #{s/-mode//:pane_mode} #[fg=#34d399 bg=#111827 nobold] ,}#{?client_prefix,#[fg=#111827 bg=#facc15 bold] PREFIX #[fg=#facc15 bg=#111827 nobold] ,}#{?window_zoomed_flag,#[fg=#ffffff bg=#6366f1 bold] ZOOM #[fg=#6366f1 bg=#111827 nobold] ,}#{?pane_synchronized,#[fg=#ffffff bg=#ef4444 bold] SYNC #[fg=#ef4444 bg=#111827 nobold] ,}#[fg=#3b82f6,bg=#111827]#[fg=#ffffff,bg=#3b82f6,bold] 󰃭 %Y-%m-%d 󰥔 %H:%M '