xtermウィンドウの現在の名前を取得することはできますか?


9

このLDP Howtoは、xtermのタイトルを変更する方法を示しています。

これはxtitleコマンドを使用しても可能であることを知っています。

長時間実行アクションを呼び出す前に、私のスクリプトはそのような手法を使用してxtermウィンドウのタイトルを変更します。

xtermウィンドウの名前を変更する前に抽出して、長期実行アクションが完了したらタイトルを以前の値に戻すことができるようにしたいと思います。

それは一種のxtitleの逆です...これは可能ですか?


関連するスタックオーバーフローの質問xterm使い方がわかればウィンドウタイトルのスタックがあるようです。
jw013、2012年

回答:


4

xtitleスクリプトを使用します。

インターネットには多くの亜種がありますが、私は依存するものを使用する傾向があります xprop

http://www.shelldorado.com/scripts/cmds/xtitle


優秀な!これはまさに私が望んでいたことです...そしてそれはxtermだけでなく(他のソリューションとは異なり)gnome-terminalでも機能します。ありがとうございました!
TheGeeko61、2012年

ただし、Xプロトコルを介してタイトルを取得することxtitleは、ローカルセッションでのみ機能することに注意してください。
ak2 2012年

9

現在のタイトルを照会するための制御シーケンスがありますが、通常はセキュリティ上の理由から無効になっています。それは、悪意のあるプログラムまたは単にテキスト化されたテキストファイルでも、最初にタイトルを設定してから報告するように要求することにより、キーボードで入力した場合と同じように任意の文字シーケンスを挿入できるためです。したがって、代わりにタイトルスタックが導入されました。

次のコマンドは、現在のウィンドウとアイコンのタイトルをスタックに保存します。

echo -ne '\e[22t'

これにより、タイトルがmy title次のように設定されます。

echo -ne '\e]0;my title\007'

そして、これは以前のウィンドウとアイコンのタイトルを復元します:

echo -ne '\e[23t'

2

簡単な(そしておそらく最も一般的なケース)で、現在の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に置き換えます。


-1

私があなたの質問を正しく理解していれば、$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それは常にセットされていないので、タイトルを取得するための最も権威の方法ではありません、あなたが実行するすべてのコマンドプロンプトの間にタイトルを変更することができます。最も正確に言うと、ターミナルエミュレータ固有の制御シーケンスがおそらく最適です。
jw013 2012年

これは、他のアプリがタイトルを設定している場合には機能しません。
TheGeeko61、2012年

$PROMPT_COMMANDウィンドウタイトルではありません。それらは無関係です。
JamesThomasMoon1979
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.