これは、BASHでコマンドを実行するたびにtmuxペインのタイトルを更新する1つの方法です。以下のようなコードを入れてください~/.bashrc
:
case ${TERM} in
screen*)
# user command to change default pane title on demand
function title { TMUX_PANE_TITLE="$*"; }
# function that performs the title update (invoked as PROMPT_COMMAND)
function update_title { printf "\033]2;%s\033\\" "${1:-$TMUX_PANE_TITLE}"; }
# default pane title is the name of the current process (i.e. 'bash')
TMUX_PANE_TITLE=$(ps -o comm $$ | tail -1)
# Reset title to the default before displaying the command prompt
PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'update_title'
# Update title before executing a command: set it to the command
trap 'update_title "$BASH_COMMAND"' DEBUG
;;
... other cases for different terminals ...
esac
}
この関数update_title
は、tmuxペインのタイトルを変更するエスケープシーケンスを出力します。ペインのタイトルをデフォルト(の値$TMUX_PANE_TITLE
)または引数として指定されたものに設定します。
この関数title
はエンドユーザーの便宜のためのものです。デフォルトのタイトルの値を変更します$TMUX_PANE_TITLE
。エンドユーザーは、次のようにして、いつでもタイトルを好きなように変更できます。
$ title my new pane title
最初のタイトルは、実行中のシェルの名前(つまり、「bash」)に設定されます。
Bashは$PROMPT_COMMAND
、プロンプトを表示する前に何かを実行します。これはupdate_title
、プロンプトをデフォルトのタイトルに設定するために、すべてのプロンプトの前に関数が実行されるように設定されています。
トラップにより$BASH_COMMAND
、コマンドを実行する前にBashが実行されます。すべてのコマンドの前にupdate_title
関数が実行され、プロンプトがそのコマンドのテキストに設定されるように設定されています。
その他の注意事項
set -o functrace
これを解決しているときに、またはset -T
(質問にリンクされている人が説明しているように)RVMが壊れることを発見しました。提案された理由は、サブシェルでプロンプトを変更できるようにするためでしたが、これがないことは私にとって問題ではありませんでした。
最初のタイトルを取得するために、より簡潔なものを使用したかったのですps -ho comm $$
が、これは上記を使用したtmux内では機能しないようでした。なぜそんなにうまくいったものを選んだのかわかりません。