tmux 2.6以降、tmuxはウィンドウのタイトルを受け入れます。で有効にできますtmux set -g pane-border-status top
。これは、1ウィンドウあたり10個以上のウィンドウを実行するときに非常に便利です。また、名前を変更できるように、ヘッダーの形式を次のように指定しました。
set -g pane-border-format "#{pane_index} #{pane_title}"
# rename prompt
bind . command-prompt -p "(rename-pane)" -I "#T" "select-pane -T '%%'"
私が嫌いな唯一のことは、コンピュータのホスト名がデフォルト値に設定される代替デフォルト値です。私は以下を好みます:
pane_title
ユーザーが設定した場合(#{pane_title}
)を使用します。- それ以外の場合は、現在の作業ディレクトリ(
#{pane_current_path}
)を使用してください。
どちらかはそれ自体簡単です。
tmux set -g pane-border-format "#{pane_index} #{pane_title}"
tmux set -g pane-border-format "#{pane_index} #{pane_current_path}"
tmuxの形式化部分(https://github.com/tmux/tmux/wiki/Formatspane_index
)は、私が望む代替タイプを達成するために三項条件付きチェックを使用できることを示唆していますが、設定しないと、ウィンドウ内のすべてのコマンドがデフォルト値に設定されているhostname
ように見えるため、すべての場合に機能させることはできません.作成されました。これが私が現在持っているものです:
tmux set -g pane-border-format "#{pane_index} #{?#{!=:#{pane_title},$(hostname)},#{pane_title},#{pane_current_path}}"
これは、ユーザーが明示的に名前を変更したPodと同じホスト名で作成されたPodに適用されます。残念ながら、私の作業コンピュータのホスト名はIPに応じて変更されるため、上記のコマンドは脆弱に見えます。さらに悪いことは、何らかの理由でtmux設定に入れず(もちろんtmuxプレフィックスなしで)ウィンドウで直接実行する場合にのみ機能することです。 Pane_titleが設定されていないことを確認するより良い方法はありますか?
答え1
フックを使用して、新しいウィンドウのウィンドウタイトルをよりわかりやすいものに設定できます。たとえば、次のようになります。
set-hook -g after-split-window 'selectp -T ""'
set-hook -g after-new-window 'selectp -T ""'
set-hook -g after-new-session 'selectp -T ""'
次に、ホスト名の代わりに空のヘッダーを見つけます。
#{?pane_title,#{pane_title},#{pane_current_command}}
答え2
すべての質問に回答できるかどうかはわかりませんが、いくつかの質問に答えることができます。
私の構成には、次のようなモンスターがあります。
setw -g pane-border-format ' #{=/-20/…:pane_title} [#{=/-20/…:pane_current_command}] #(pgrep -P "#{pane_pid}" | tr "\n" " ")#{pane_current_path} #{?alternate_on,<Alt Mode> ,}'
(これらのいくつかはtmux〜3.1の機能によって異なります)
setw -g
代わりにset -g
config.xmlで動作させるには、ofを使用してください。
ご覧のとおり、私のアプローチは、私が知りたいことをすべてそこに押し込むことです。なぜなら、空間を使用しないか、空間に窮屈に掘ると、国境の残りの空間を無駄にするからです。それでも。端末のサイズが60列未満の場合はほとんどないため、境界線の内容線を細かく保つためには価値がありません。ややきれいな外観を維持するには、境界線にコントラストの低い色を使用することが重要です。これにより、フィールドに表示されるコンテンツを制御しようとする厄介さが解決されます。表示されるコンテンツと同時に表示されるコンテンツを制御しようとしないことを検討してください。
ウィンドウのタイトルに関するもう1つのことは、シェルおよび/またはシェルが実行されているプログラムによって「設定する必要がある」ことです。問題を解決したことが分かったにもかかわらず、去る10月にこれにより大きな頭痛が生じました。現在のところ、私の脳やgitログのどれも、あなたがしなければならない正しいことがPane_titleの設定方法を制御することであると判断するのに十分な情報を提供しません。 /zsh これを行うように構成します。これはおそらく、cwdやアクティブなコマンドラインなどのより便利なものではなく、ホスト名に割り当てるのに役立ちます。
:XT
正しく機能するには、端末オーバーレイに文字列を追加する必要があると思います。バラよりhttps://unix.stackexchange.com/a/75382/12497
これを行うには長い時間がかかりました。これは、これまでPane_titleがウィンドウで実際に実行されているプログラムを確認する唯一の信頼できる直接的な方法であるため、重要です。私の状況に合ったtmuxキーバインディング(pane_titleの値によって決まります)は、作業を開始して以来完全に機能しました。 zsh が有効な場合、Pane_title は zsh によって最後のコマンド実行に設定され、vim が起動すると次にウィンドウのタイトルがオーバーライドされます。 vimrcなどに設定した特定の文字列これにより、状況に応じたキーバインディングを効果的に制御できます。以前私が経験した深刻な問題の1つは、「myscript」スクリプトがVimを実行するとPane_titleが「myscript」に変わり、キーバインディングシステムがVimをウィンドウで実行していることを知ることができなくなることでした。 Vimは端末のタイトルを更新し、tmuxウィンドウでそれを正しく設定し、ウィンドウでvimが実行されていることを確認するロジックを大幅に簡素化しました。
ウィンドウ内で実行されている項目を検出するもう1つの方法は、PIDにアクセスできるため、オペレーティングシステムに問い合わせてプロセスが何であるかを確認することです。しかし、これまで私は「標準」機能を好むパイプにあまりにも熱狂することを避けてきました。 Pane_titleがついに私に勝つと、関連するウィンドウで実行した内容を印刷するC ++プログラムを書くことになると確信しています。頑張ってください。