tmux のステータス ラインで現在の作業ディレクトリと現在のプロセスの両方を取得するにはどうすればよいですか?

tmux のステータス ラインで現在の作業ディレクトリと現在のプロセスの両方を取得するにはどうすればよいですか?

2 つのステータス ラインを用意し、最初のステータス ラインでウィンドウがどのディレクトリにあるかを表示し、2 番目のステータス ラインでウィンドウで実行されているプロセスを表示したいと考えています。これは可能ですか? 私は bash を使用していますが、この構成がより簡単であれば、別のシェルに切り替えることも考えています。

tmux ではこれが不可能であるか、設定が非常に難しい場合、この情報を提供できる他のツールはありますか? (基本的に、ターミナルで複数のタブ/ウィンドウを開き、ディレクトリとプロセス情報を表示したいのです。)

答え1

本当に良い質問です。私の意見では、これを「動作」させることはできますが、「使用可能」になるほどで​​はありません。十分に動作すれば、良い形式になるだろうという点には同意します。私が見つけた情報をここで提供します。あなた (または、一緒にやって来る他の誰か) がパズルの残りの部分を埋めてくれることを願っています。

2019年のtmux 2.9以降では、 を使って2行目のステータス行を簡単に追加できますsetw -g status 2。最初の行の形式は(非常に基本的なバージョン):

setw -g status-format[0] '#{W:#{pane_current_path} }' # or ...
setw -g status-format[0] '#{W:#(pwd) }'

2行目は次のようになります。

setw -g status-format[1] '#{W:#{pane_current_command} }' # or possibly
setw -g status-format[1] '#{W:#W } # if there's no other function changing the window title'

問題は、これらがまったく互いに整列されないことですが、tmux 構成ディレクティブを使用して整列させる方法をまだ見つけていません。少なくとも上部と下部の両方の結果を一定の幅にパディング/強制して整列させる方法はあるかもしれませんが、まだそこまでには至っていません。

また、デフォルトでは、tmux は 15 秒ごとにしか更新されないことにも注意してください。 などを使用してこの間隔を更新できますsetw -g status-interval 1

また、コマンドを先頭に追加するだけで、どのコマンドもシェル内で対話的に使用できることにも注意してくださいtmux

関連情報