このLDP Howtoは、xtermのタイトルを変更する方法を示しています。
これはxtitle
コマンドを使用しても可能であることを知っています。
長時間実行アクションを呼び出す前に、私のスクリプトはそのような手法を使用してxtermウィンドウのタイトルを変更します。
xtermウィンドウの名前を変更する前に抽出して、長期実行アクションが完了したらタイトルを以前の値に戻すことができるようにしたいと思います。
それは一種のxtitleの逆です...これは可能ですか?
このLDP Howtoは、xtermのタイトルを変更する方法を示しています。
これはxtitle
コマンドを使用しても可能であることを知っています。
長時間実行アクションを呼び出す前に、私のスクリプトはそのような手法を使用してxtermウィンドウのタイトルを変更します。
xtermウィンドウの名前を変更する前に抽出して、長期実行アクションが完了したらタイトルを以前の値に戻すことができるようにしたいと思います。
それは一種のxtitleの逆です...これは可能ですか?
回答:
xtitle
スクリプトを使用します。
インターネットには多くの亜種がありますが、私は依存するものを使用する傾向があります xprop
xtitle
は、ローカルセッションでのみ機能することに注意してください。
現在のタイトルを照会するための制御シーケンスがありますが、通常はセキュリティ上の理由から無効になっています。それは、悪意のあるプログラムまたは単にテキスト化されたテキストファイルでも、最初にタイトルを設定してから報告するように要求することにより、キーボードで入力した場合と同じように任意の文字シーケンスを挿入できるためです。したがって、代わりにタイトルスタックが導入されました。
次のコマンドは、現在のウィンドウとアイコンのタイトルをスタックに保存します。
echo -ne '\e[22t'
これにより、タイトルがmy title
次のように設定されます。
echo -ne '\e]0;my title\007'
そして、これは以前のウィンドウとアイコンのタイトルを復元します:
echo -ne '\e[23t'
簡単な(そしておそらく最も一般的なケース)で、現在のxtermのプロンプトを問い合わせたい場合は、単にを使用しますxprop -id $WINDOWID WM_NAME
。シェルスクリプトで操作するための値を抽出する場合は、次のように少し高価なものを実行できます。
curtitle=`xprop -id $WINDOWID WM_NAME|awk '{print $3}'|xargs echo`
bashを単独で使用する(awkおよびxargsの呼び出しを回避するため):
curtitle=`xprop -id $WINDOWID WM_NAME`
curtitle=`eval echo ${x##*=}`
最初の例のxargsエコーと2番目の例のevalは、xpropが値を囲む引用符を取り除くためのものです。
タイトルバーの文字列ではなくアイコン名を取得する場合は、WM_NAMEをWM_ICONに置き換えます。
私があなたの質問を正しく理解していれば、$PROMPT_COMMAND
変数を調べることで現在のxtermタイトルを取得できるはずです。例:
$ echo $PROMPT_COMMAND
printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"
そして、あなたはそれを次のように設定できます(読みやすさのために改行):
PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033]\
0;%s@%s%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
PROMPT_COMMAND
それは常にセットされていないので、タイトルを取得するための最も権威の方法ではありません、あなたが実行するすべてのコマンドプロンプトの間にタイトルを変更することができます。最も正確に言うと、ターミナルエミュレータ固有の制御シーケンスがおそらく最適です。
$PROMPT_COMMAND
ウィンドウタイトルではありません。それらは無関係です。
xterm
使い方がわかればウィンドウタイトルのスタックがあるようです。