
shelltitle
tmuxで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.py
python
一人ができることを知っています。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_COMMAND
Bashを返すときにラベルとして使用しているので、BASH
好きなように入れることができます(例>_
:)。または、これを省略しPROMPT_COMMAND
て最後に実行されたコマンドを保持してラベルに表示することもできます。