如何自動更新 xterm 運行畫面中的標題?

如何自動更新 xterm 運行畫面中的標題?

這是一個後續這個問題。我工作於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

這很好用!

但是,當我運行 screen 時,我發現標題沒有隨當前目錄更新。如何讓畫面更新 xterm 標題?

答案1

.tcshrc您可以透過將其新增至您的或來設定 xterm 視窗標題.cshrc(取代您目前的precmd別名):

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

使用此命令時,請確保這是您的.cshrc和檔案中唯一的 precmd 別名。.tcshrc無論 GNU 螢幕會話是否打開,此方法都會在 xterm 和 gnome 終端機中將目前目錄顯示為視窗標題。

我的回答是基於

答案2

這應該可以在任何 shell 中工作,但這是一個骯髒的 .screenrc hack。它會接管你的hardstatus線來工作,這對某些用戶來說可能是不可接受的。但它適用於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'

這會將 shell 設定為在每次命令完成時(而不是整個 shell 完成時)追加到歷史檔案。 (這與本例無關)。

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

這與轉義碼“\033]0;”相呼應。它使用“user”@“host”變數設定視窗標題(刪除從右到第一個“.”的最長匹配),然後設定工作目錄(用“~”取代“$HOME”)。

上述技巧適用於任何支援動態變更視窗標題的終端應用程式(iTerm、Terminal.app、urxvt、aterm、eTerm.xterm 等都這樣做)。您也可以查看 bash 文件中的 shell 變數“TITLEBAR”,它是類似的。

答案4

這一頁(上面已連結)是解決方案,但是您需要確保條目的終端字串與終端的 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 文件,因為當 SSing 到一個盒子中時,我使用 xterms 和 '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'

希望這有幫助,完全與 shell 無關。請記住,如果您以 root 身分執行 screen,除了您自己的 ~/.screenrc 檔案之外,您還需要修改 ~root/.screenrc ,如下所示。

相關內容