tmuxでのGNU画面のシェルタイトルシミュレーション

tmuxでのGNU画面のシェルタイトルシミュレーション

shelltitletmuxでGNU Screenの機能をエミュレートしようとしています。私の中には次のものがあります~/.bashrc

if [[ "$TERM" == screen* ]]; then
    SCREEN_ESC='\[\ek\e\\\]'
else
    SCREEN_ESC=''
fi

PS1="\n\w ${SCREEN_ESC}$ "

そして私の次~/.screenrc

shelltitle        "$ |bash"

設定shelltitleすると、GNU Screenはシェルで改行文字を検索し、$PS1エスケープ文字で始まるすべての文字を削除し、その後に見つかった最初の単語に置き換えます。これは マニュアルページ:

操作方法は次のとおりです。空のヘッダーエスケープシーケンス(<esc> k <esc>)をプロンプトの一部として出力するには、シェルプロンプトを変更する必要があります。プロンプトの最後の部分は、タイトルの検索部分に指定した文字列と同じ文字列でなければなりません。設定されると、画面はtitle-escape-sequenceを使用して前のコマンド名を消去し、次のコマンドを準備します。その後、シェルから改行文字を受け取ると、プロンプトの終わりを検索します。見つかった場合は、一致する文字列の後の最初の単語を取得し、それをコマンド名として使用します。コマンド名が「!」、「%」、または「^」で始まる場合、画面は検索した名前よりも次の行(見つかった場合)の最初の単語を優先します。

set-option -g set-titles onこれはプロセス名だけをキャプチャするtmuxとは異なります。したがって、PythonスクリプトのタイトルはScreen(私が望む方法)にscript.pyなり、タイトルはtmux(私が望んでいない方法)になります。script.pypython

一人ができることを知っています。tmuxウィンドウの名前変更通過:

printf '\033kWINDOW_NAME\033\\'

だから私は新しいコマンドを入力したことをtmuxに知らせる方法があるかどうか疑問に思います。最後のコマンドを入力する方法がある場合は、Bashを使用してPROMPT_COMMAND実行できます。どんなアイデアがありますか?

ベストアンサー1

ああ、数年後、解決策が出ました! tmuxや不足している画面の動作と同じ問題がありました。簡単に言うと:

に追加.bashrc

if [ -v "TMUX" ]; then
    PS0='$(printf "\033k%s\033" "$(HISTTIMEFORMAT= history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//")")'
    PROMPT_COMMAND="printf '\033kBASH\033\\'"

このtmux.conf

set -g allow-rename on

説明を見るには、bashrc以下PS0を見てください。 Bashシェルで実行された各コマンドを変数に渡す

PROMPT_COMMANDBashを返すときにラベルとして使用しているので、BASH好きなように入れることができます(例>_:)。または、これを省略しPROMPT_COMMANDて最後に実行されたコマンドを保持してラベルに表示することもできます。

おすすめ記事