タイトルバーにxtermのサイズを印刷するには?

タイトルバーにxtermのサイズを印刷するには?

タイトルバーにxtermのサイズを印刷できますか?WxH端末のサイズを変更するたびに更新されるような単純なものが必要です。

答え1

環境変数$COLUMNS$LINES。その後、文書化されたエスケープコードを使用してヘッダーを設定できます。BashプロンプトHOWTOから。以下は、タイトルを設定するワンタイムコマンドです。

# The title text is the stuff between ; and \a
printf "\e]0;${COLUMNS}x${LINES}\a"

ウィンドウのサイズを変更するときにタイトルを更新する方法があるかどうかわかりません。その後、端末サイズが変更されたときにxtermが送信するSIGWINCH信号をキャプチャできます。 Bashを使用している場合は、次のように入力してください~/.bashrc

function update_title {
    printf "\e]0;${COLUMNS}x${LINES}\a"
}

trap -- update_title SIGWINCH

警告する:この解決策が奇妙な相互作用を引き起こす可能性があると感じます。ウィンドウのサイズを変更する際に端末アプリケーションの一部が奇妙に動作することがわかった場合は、上記のトラップを無効にして問題が解決しないことを確認してください。

答え2

これはxtermに組み込まれた機能ではありません。

その端末でインタラクティブシェルを実行している場合は、プロンプトが表示されるたびにウィンドウのタイトルを更新することができます。広く使用されているすべてのシェルの場合、変数とCOLUMNSLINES端末の現在のサイズを反映するように更新されます。プロンプトの一部として、ウィンドウのタイトルにエスケープシーケンスを設定できます(エスケープシーケンスの幅がゼロであることをシェルに知らせる必要があります。そうしないと、シェルはカーソルの位置に対して混同されます)。プロンプトが表示される前に印刷する文字列。 Bashでウィンドウのタイトルを現在のディレクトリに設定し、その後にウィンドウのサイズを設定するには、次のようなものを使用できます。

set_term_title () {
  printf '\[\033]2;%s %dx%d\007\]' "$PWD" "$LINES" "$COLUMNS"
}
PROMPT_COMMAND="$PROMPT_COMMAND
set_term_title"

zshから:

set_term_title () {
  printf '\[\033]2;%s %dx%d\007\]' $PWD $LINES $COLUMNS
}
precmd+=set_term_title

シェルがプロンプトを表示している間にウィンドウのサイズを変更すると、シェルは以下を受け取ります。シグナルウインチ信号。この信号のハンドラを追加します。

trap set_term_title SIGWINCH

コマンドの実行中にウィンドウのサイズが変更されると、次にシェルがプロンプトしたときにのみタイトルが更新されます。この場合、フォアグラウンドプロセスのみがシグナルを受信するため、シェルはこれを検出できず、コマンドが完了または中断され、シェルが実行を再開したときにのみ更新された情報を照会できます。

端末で実行されているものとは無関係にタイトルを更新するには、いくつかの外部コンポーネントを含める必要があります。クールなウィンドウマネージャであれば、これを行うことができるはずですが、ほとんどはそうではありません。 Sawfishでは調整可能rewrite-window-title正規表現ベースの変換を適用する代わりに、ウィンドウサイズを追加します。

あなたはそれを使用することができますxdotool情報のインポートとタイトルの変更:

(
  title="$(xdotool getwindowname "$windowid")"
  eval "$(xdotool getwindowgeometry --shell)"
  title="${title% *} ${WIDTH}x${HEIGHT}"
  xdotool set_window --name "$title" "$windowid"
)

xdotool getwindowgeometry返されるサイズは、文字ではなくピクセル単位です。何をすべきかわからない反応ウィンドウマネージャの協力なしでウィンドウのサイズを変更します。

関連情報