web-dev-qa-db-ja.com

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

これは この質問 へのちょっとしたフォローアップです。私はtcsh内のGNUscreeninxterm

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

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

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

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

14
Nathan Fellman

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

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

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

私の答えは this に基づいていました。

4
Trey Hunner

あなたが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」を調べることもできます。これも同様です。

3
wawawawa

これはどのシェルでも機能するはずですが、汚い.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
quack quixote
setenv TITLE "%{\033]0;%n@%m:%~\007%}"
set Prompt = "${TITLE}%n@%m:%~%#"
2
SirDice

このページ (上記でリンクされています)が解決策ですが、エントリの端末文字列が端末の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文字列であることを確認することです。使用する用語タイプごとに複数の行を実行できます。

たとえば、ボックスにSShingするときに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を変更する必要があることに注意してください。

2
Adam Strohl

指示 ここ 私はbashからrxvtのタイトルを更新することができました-これはおそらく何の助けにもなりませんが、調査する価値があるかもしれないと思いました(リンクがジャンプしない場合のセクション情報ステータスバーページの右側)

1
Barry