この問題についてWeb上に多くの質問がありますが、次の2つの共通点の1つを見つけました。
- 彼らは現在実行中のプログラムだけを(引数なしで)印刷する手動ソリューションを提供しました。
- zsh preexec機能を使用してください(画面とどのようにやり取りするのかわかりませんが)。 Bashソリューションを探しています。
画面タイトルに完全なコマンド実行が表示されるようにするにはどうすればよいですか?たとえば、長期実行の3つのPythonスクリプトを実行している場合、タイトルにスクリプト名も表示できますか?ボーナスポイントのために最後のコマンドの実行を表示し続けることができれば幸いです。
私の現在の設定:
- 出口
PROMPT_COMMAND='/bin/echo -ne "\033k\033\0134"'
PS1
によって。 。終わる>
shelltitle ">|bash"
私は試した:
\033k
と\033
- の間に何かを追加する${BASH_COMMAND}
- 画面がないXTERMの場合は解決策がわかっているので、トラップデバッグを使用して外部追加ヘッダーを設定してください。これはに関連しています
PS1
。
そして上記の変形。画面を通過するソリューションが必要なので、ウィンドウタイトルと画面ウィンドウリストの両方にコマンド全体が表示されます。
ボーナスとして、ScreenがVimとスムーズにやり取りしてバッファを変更したり、新しいファイルを開いたりなどをすることができれば本当にいいと思います。画面タイトルが動的に更新されます。
ベストアンサー1
1年後、ここにトラップを使ったソリューションがあります。これにより、ホスト名、現在の情報、およびPWD
コマンド(および画面にある場合は画面の内容)が表示されます。以下から簡単にカスタマイズできますset_screen_window
。すべてはあなたの.bashrc
。
まず、いくつかのヘルパー関数を使用して、私が開いていることを確認してくださいscreen
。
export PROMPT_COMMAND=''
if [[ "$TERM" == "screen"* ]]; then
screen_title_slicer() { echo "${1:0:40}"; } # Arbitrary cut off. use echo $1 for full.
screen_title_format='\ek%s\e\\'
else
screen_title_slicer() { echo "${1//[^[:print:]]/}"; }
screen_title_format='\033]0;%s\007'
fi
ビルドコマンドの中心は有用に依存しますBASH_COMMAND
。私はいくつかのカスタムタスクfg
(たとえば、元のコマンドを表示)とcd
(実際のディレクトリをインポートする)を実行しました。
ready="Ready!"
set_screen_window() {
title_string=$1
[ -z "$title_string" ] && title_string=$(screen_title_slicer "$BASH_COMMAND")
[ "$title_string" = "fg" ] && read -ra job < <( jobs %% 2> /dev/null )
[ "$title_string" = "fg " ] && read -ra job < <(jobs "${title_string:3} 2> /dev/null")
if [ ${#job[@]} -gt 0 ]; then
title_string=$(screen_title_slicer "${job[2]}")
fi
cwd=$PWD
if [ "${title_string::3}" = "cd " ]; then
cwd=$( eval cd "$(awk '{print $2}' <<< "$BASH_COMMAND")" &> /dev/null && pwd)
[ -z "$cwd" ] && cwd=$PWD
title_string="$ready"
fi
[ "$title_string" = "cd" ] && title_string=$ready && cwd=$HOME
printf "$screen_title_format" "$HOSTNAME -- ${cwd//$HOME/\~}> $title_string" > "$(tty)"
unset job
unset title_string
}
今私の文字列でターミナルヘッダーを初期化し、エラーをキャッチしてデバッグready
してターミナルウィンドウを更新します。
set_screen_window "$ready"
trap "set_screen_window $ready" ERR
trap set_screen_window DEBUG
最後に具体的な内容は.vimrc
次のとおりですvim
。
function! Filename()
if @% == ""
return "noname"
endif
let is_tracked=system("git ls-files " . expand("%"))
if is_tracked == ""
return expand("%:t")
endif
return gitbranch#name() . "/" . expand("%:t")
endfunction
let &titlestring = hostname() . " -- vim " . Filename()
if &term[:5] == "screen"
set t_ts=^[k
set t_fs=^[\
set title
endif
autocmd TabEnter,WinEnter,BufReadPost,FileReadPost,BufNewFile * silent execute '!printf "\033]0;'.hostname().' -- vim '.Filename().'\007"'
autocmd TabEnter,WinEnter,BufReadPost,FileReadPost,BufNewFile * let &titlestring = hostname() . ' -- vim ' . Filename()
ここでは、Filename
独自のタイトルスタイルを得るためにカスタマイズできます。autocmd
バッファ、ウィンドウなどの間を移動するときにコンテンツがリロードされることを確認してください。私の例には、リポジトリでファイルを編集するとき(予想どおり)ブランチ名を生成するためにgitbranch
使用できるプラグインがあります。git