シェルから現在のtmuxウィンドウ番号を取得するには?

シェルから現在のtmuxウィンドウ番号を取得するには?

表示スペース1行を節約するために、下部のステータスバーを非表示にして、シェルプロンプトに現在のtmuxウィンドウ番号を入れて、現在の場所をより簡単に知ることができるようにしたいと思います。

GNU画面には環境変数があり、WINDOWtmuxにはそのような変数がないようですが、シェルから現在のウィンドウ番号を取得する方法はありますか?

試してみましたが、TMUX_PANEウィンドウ(またはウィンドウ)を閉じて新しいウィンドウを開くときと同じように増え続けます。TMUX_PANEシェルがtmuxウィンドウで実行されているかどうかを検出するために存在するかどうかを確認します。

答え1

tmuxの用語には「ウィンドウ番号」はありません。 「ウィンドウインデックス」と一意の「ウィンドウID」があります。デフォルトのステータス行には各ウィンドウの前の内容が表示されるので、「window_index」を意味すると仮定します。

tmux display-message -p -F '#{window_index}'

ウィンドウインデックスに関する情報はアクティブウィンドウから取得されるため、アクティブウィンドウに上記のコマンドを入力するだけで十分です。通常、すべてのウィンドウで動作し、独自のウィンドウを決定する同様のコマンドが必要な場合があります。

tmux display-message -p -F '#{window_index}' -t "$TMUX_PANE"

display-message録音済みここ#{variables}利用可能な他のコンテンツを表示します。ここ

PS1:

PS1="\$(tmux display-message -p -F '#{window_index}' -t \"\$TMUX_PANE\") \u@\h:\w$ "

メモ:

  • ウィンドウを別のウィンドウに移動すると(たとえばを使用してtmux swap-pane …)、印刷されたプロンプトは更新されず、古いウィンドウのインデックスが表示されるため、誤解を招く可能性があります。印刷のヒント後ろにウィンドウを移動すると、新しいウィンドウのインデックスが表示されます。

    あなたのシェルは現在のプロンプトを更新するメカニズムをサポートするかもしれませんし、サポートしていないかもしれません(例えばzsh)。以前のすべてのプロンプト(画面とウィンドウの履歴にまだ表示されているプロンプト)を更新するのは非常に面倒で、簡単な解決策があるとは思いません。

  • のバックスラッシュは、割り当て中に評価される\$(tmux …)のを防ぎます。プロンプトは印刷されるたびに個別に評価されます。バックスラッシュがない場合は、割り当て中に取得されたウィンドウインデックスが含まれます。その後、ウィンドウを別のウィンドウに移動すると、新しく印刷されたプロンプトにも古いウィンドウのインデックスが表示されます。$(…)PS1PS1

関連情報