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


14

これはこの質問へのちょっとしたフォローアップです。私はで働いているtcshの GNUの中に画面xtermの

.cshrcに次のものがあります。

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

そして、これはうまくいきます!

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


あなたに合ったソリューションを見つけましたか?
トレイハナー

いいえ。提案された回答を試しましたが、うまくいきませんでした。だから、私は彼らを受け入れも支持もしませんでした。
ネイサンフェルマン

回答:


4

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

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

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

私の答えはこれに基づいていました


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」を調べることもできますが、これは似ています。


1
これは、gnuscreen内では機能しません。少なくともそれは私のために働いていません。それがなぜここにいるのか:)
gcb 14


2

これはどのシェルでも動作するはずですが、それは汚い.screenrcハックです。hardstatus行が機能するようになりますが、これは一部のユーザーには受け入れられない場合があります。ただし、以下のtermcapinfo行がなくても、最新のUbuntuのgnome-terminalで動作します。状況によっては、さらに微調整が必​​要になる場合があります(たとえば、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}]'

このリンクで見つかりました。


2
setenv TITLE "%{\033]0;%n@%m:%~\007%}"
set prompt = "${TITLE}%n@%m:%~%#"

1
しかし、これにより実行時にタイトルが更新されますscreen
ネイサンフェルマン

1
これは、画面4.00.02 + tcsh 6.12.00で正常に機能します。これは、スクリーンhardstatus変数が適切に設定されており、termcap / terminfoがサポートしていることを前提としていますhs|ts|fs|ds
ダレンホール

ここでhardstatusは何をしますか?
gcb 14

2

このページ(上記にリンクされています)は解決策ですが、エントリの端末文字列が端末のID文字列(つまり、変数TERMが設定されているもの)と一致するようにする必要があります。そうしないと、効果がありません。

ここに私がやったことの要約がありますが、これを理解するのに十分な時間を費やさなかった私にとってはうまくいきました:

  1. 以下を実行して、端末のID文字列を確認します。

    echo $TERM
    

    おそらく「xterm」、「linux」、「rxvt」などのように表示されます。

  2. 次に、homedir(〜/ .screenrc)にある.screenrcファイルに次の行を追加します(または、存在しない場合は作成します)。

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

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

たとえば、これを.screenrcファイルとして使用しています。これは、ボックスにSShingするときにxtermと 'linux'用語タイプの両方を使用するためです。

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を変更する必要があることを忘れないでください。


1

ここの手順により、rxvtのタイトルをbashから更新できました-これはおそらく助けにはなりませんが、調査する価値があると思いました(リンクがページの右側にジャンプしない場合は情報ステータスバーを参照してください)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.