web-dev-qa-db-ja.com

ターミナルウィンドウのタイトルをtmuxウィンドウと同期させる方法

「タイミング」というプログラムを使用して時間を追跡しています。タイミングは、分類のためにiTermの現在のウィンドウの名前を使用します。

現在アクティブなtmuxウィンドウの名前と一致するようにiTermの現在のタイトルを設定したいと思います。

~/.config/fish/functions/fish_title.fishに次のファイルを設定しました:

function fish_title
  tmux display-message -p '#W'
end

これにより、新しいターミナルウィンドウを開くたびに、現在のTmuxウィンドウのタイトルがターミナルウィンドウに正常に出力されます。ただし、tmuxウィンドウの名前を変更したり、新しいウィンドウに切り替えたりすると、端末が更新されません。

fish_titlepwdのようなものを使用すると更新されます。

function fish_title
  pwd
end

fish_titleにtmuxウィンドウ名を動的に取得させる方法に関するアイデアはありますか?

8
thekevinscott

最初に指摘することは、シェルから完全に独立してtmuxを介してこれを実行できることです。 〜/ .tmux.confに以下を追加します。例えば:

set-option -g set-titles on
set-option -g set-titles-string "#S / #W"

また、プログラムがエスケープシーケンスを介してタイトルを設定できるようにiTerm2が構成されていることを確認する必要があります。 https://www.iterm2.com/documentation-one-page.html の「ターミナルがタブ/ウィンドウのタイトルを設定する可能性がある」セクションを参照してください。

しかし、実際の問題は、fish_title関数によって送信されたエスケープシーケンスがtmuxによって渡されないことです。 Tmuxは代わりに値を使用してペインのタイトルを設定します。これは、明確ではありませんが、man tmuxの「名前とタイトル」セクションで説明されています。 #Tset-titles-stringに追加して、実際にfish_title関数を介してウィンドウ名と同じ値に設定されていることを確認します。

19
Kurtis Rader