tmux の「最後のウィンドウマーカー」をカスタマイズするにはどうすればいいですか?

tmux の「最後のウィンドウマーカー」をカスタマイズするにはどうすればいいですか?

デフォルトでは、Tmux は-ウィンドウタイトルの後に最後にアクセスしたウィンドウを表示します。このマーカーをカスタマイズしてカスタムシンボルに設定する方法はありますか? よろしくお願いします。

答え1

man 1 tmux言う:

デフォルトでは、ウィンドウ リストには、現在のセッションに存在するウィンドウのインデックス、名前、および (存在する場合) フラグが昇順で表示されます。これは、およびwindow-status-formatオプションを使用してカスタマイズできますwindow-status-current-format。フラグは、ウィンドウ名に追加される次の記号のいずれかです。

Symbol    Meaning
*         Denotes the current window.
-         Marks the last window (previously selected).
#         Window is monitored and activity has been detected.
!         A bell has occurred in the window.
~         The window has been silent for the monitor-silence interval.
M         The window contains the marked pane.
Z         The window's active pane is zoomed.

についてset-window-option window-status-format

window-status-format string
ステータス ラインのウィンドウ リストにウィンドウを表示する形式を設定します。[…] デフォルトは です#I:#W#F

次に、以下は「ウィンドウ フラグ」の意味をFORMATS学習します#F。フラグに関連付けられたシンボルを直接変更する機能の痕跡は見つかりませんでした。それでも、これを使用できます。

さらに、シェルコマンドの出力の最初の行は を使用して挿入することもできます#()

これは、trまたはを使用して他のものにsed変更できることを意味します-。これには驚くかもしれません:

フォーマットを構築する場合、コマンドが完了するのtmuxを待たず#()、代わりに同じコマンドを実行した前回の結果が使用されます。コマンドが以前に実行されていない場合はプレースホルダーが使用されます。

私のテストでは、trまたはによる単純な置き換えsedはすぐに機能するようです。したがって、心配することはおそらく何もありません。 内からtmuxこれを実行します:

tmux set-window-option -g window-status-format "#I:#W#(printf '%%s\n' '#F' | tr '-' '<')"

またはこれ:

tmux set-window-option -g window-status-format "#I:#W#(printf '%%s\n' '#F' | sed 's/-/</')"

trよりシンプルで小さいので、こちらの方がパフォーマンスが良いはずです(重要であれば)。ただし、複数文字の*文字列にsed置き換えたい場合は、がツールになります。例:-sed

tmux set-window-option -g window-status-format "#I:#W#(printf '%%s\n' '#F' | sed 's/-/<--/')"

ノート:

  • %%の代わりになる理由はパーサー%によるものですtmux
  • tmux set-window-option window-status-format …( なし-g) は、単一のウィンドウのフォーマットを指定します。これは、この特定のウィンドウのグローバル フォーマットよりも優先されます。
  • window-status-current-formatウィンドウが現在のウィンドウであるときに使用する形式を指定するもあります。「最後のウィンドウ」フラグは明らかに現在のウィンドウには適用されませんが、適用される可能性のあるフラグをカスタマイズする場合は、これwindow-status-current-formatも変更する必要があります。
  • /etc/tmux.confまたはに追加する行は~/.tmux.conf次のようになります。

    set-window-option -g window-status-format "#I:#W#(printf '%%s\n' '#F' | tr '-' '<')"
    

*というかマルチバイト。比較これ

答え2

いつ追加されたのかは分かりませんが、tmux 形式で正規表現の置換を実行すると、より簡単にこれを実現できます。man ページから:

A prefix of the form ‘s/foo/bar/:’ will substitute ‘foo’ with ‘bar’ throughout.
The first argument may be an extended regular expression and a final argument may be ‘i’ to ignore case, for example:
 ‘s/a(.)/\1x/i:’ would change ‘abABab’ into ‘bxBxbx’.

したがって、ユースケースでは、window_flags次のように変数のコンテンツの置換を実行できます。

set-window-option -g window-status-format "  #{s/-/>>/:window_flags} #I #W"

関連情報