xterm 実行画面のタイトルを自動的に更新するにはどうすればよいですか?

xterm 実行画面のタイトルを自動的に更新するにはどうすればよいですか?

これは、この質問私は働いていますtcshGNU内画面xterm

私の .cshrc には次の内容があります:

alias res_t 'xtset -t %h:%d "(%u:%g)" %e'       # reset titlebar
res_t                                           # reset title right now
alias precmd res_t

そしてこれはうまく動作します!

しかし、screen を実行すると、タイトルが現在のディレクトリで更新されないことがわかります。screen で xterm のタイトルを更新するにはどうすればよいでしょうか?

答え1

.tcshrcこれをまたは.cshrc(現在のprecmdエイリアスを置き換えます)に追加することで、xterm ウィンドウのタイトルを設定できます。

alias precmd 'echo -n "\033]0;${PWD}\a"'

.cshrcこれを使用する場合は、これがおよびファイル内の唯一の precmd エイリアスであることを確認してください.tcshrc。この方法では、GNU screen セッションが開いているかどうかに関係なく、xterm と gnome-terminal の両方で現在のディレクトリがウィンドウ タイトルとして表示されます。

私の答えはこれ

答え2

これはどのシェルでも動作するはずですが、これは汚い.screenrcハックです。動作するためにハードステータス行を乗っ取るため、一部のユーザーには受け入れられないかもしれません。しかし、gnomeターミナル最新のUbuntuでは、タームキャップ情報下の行を参照してください。状況によっては、より細かい調整が必要になる場合があります (たとえば、PuTTY ではテストしていません)。

# enable xterm title setting; may not be necessary on some platforms
termcapinfo xterm*|rxvt* 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

# dirty hack: put xterm title escapes in the hardstatus
# this example will yield "user@host || screen Win#:(windowtitle)
defhstatus "$USER@^EH || screen ^E:(^Et)"
# now turn it off so it doesn't print in the hardstatus line
hardstatus off

# and finally, use caption as a replacement hardstatus
caption always '%{= kG}[%{G}%H%{G}][%= %{= kw}%?%-Lw%?%{R}(%{W}%n*%f%t%?(%u)%?%{R})%{w}%?%+Lw%?%?%= %{G}][%{B}%C%a %M.%d%{G}]'

見つかった場所このリンク

答え3

tcsh を使用しているため、おそらくこれは機能しないと思います... 念のため、これを実行するための bash の方法を探している人がいる場合に備えて。

システム (ローカル / リモート) が bash を実行している場合は、"PROMPT_COMMAND" 環境変数を使用してウィンドウ タイトルを設定できます。PROMPT_COMMAND はプロンプトが表示される前に評価されます。

(.bashrc 内):

export PROMPT_COMMAND='history -a && echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'

説明:

'history -a'

これにより、シェル全体が完了したときではなく、コマンドが完了するたびに履歴ファイルに追加するようにシェルが設定されます (これはこの例とは関係ありません)。

'echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'

これはエスケープ コード "\033]0;" をエコーし​​、ウィンドウ タイトルを "user" @ "host" 変数 (右から最初の "." までの最長一致を削除) に設定し、次に作業ディレクトリ ('$HOME' を '~' に置き換えます) を設定します。

上記のトリックは、ウィンドウ タイトルの動的な変更をサポートするすべてのターミナル アプリケーション (iTerm、Terminal.app、urxvt、aterm、eTerm、xterm など) で機能します。また、bash ドキュメントのシェル変数 "TITLEBAR" を調べることもできます。これは同様です。

答え4

このページ(上にリンクされている)が解決策ですが、エントリのターミナル文字列がターミナルのID文字列と一致していることを確認する必要があります(つまり、変数 TERM が何に設定されているか) そうでない場合は効果がありません。

何年も時間をかけて理解できなかった後に、私が実行した方法の概要を以下に示します。

  1. 次のコマンドを実行して、ターミナルの ID 文字列を確認します。

    echo $TERM
    

    おそらく「xterm」や「linux」や「rxvt」のような名前が表示されます。

  2. 次に、ホームディレクトリ (~/.screenrc) にある .screenrc ファイル (存在しない場合は作成します) に次の行を追加します。

    termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
    

    重要なのは、「xterm」が上記で取得した TERM の ID 文字列であることを確認することです。使用する異なる用語タイプごとに複数の行を作成できます。

たとえば、ボックスに SSH で接続するときに xterm と「linux」ターム タイプの両方を使用するので、.screenrc ファイルに次の内容を含めます。

termcapinfo linux 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

これが役に立つことを願います。シェルにはまったく依存しません。screen を root として実行する場合は、次のように自分の ~/.screenrc ファイルに加えて ~root/.screenrc も変更する必要があることに注意してください。

関連情報