Gnu-Screen

使用螢幕時設置xterm(PuTTY)視窗標題?

  • June 25, 2015

我正在嘗試screen設置我的xterm標題。我在 之外有這個工作screen,但screen在我開始時保留任何標題。這是我的.bashrc

函式 bash_prompt_command() {
# $PWD 應該保留多少個字元
本地 pwdmaxlen=25
# 表示已經被dir截斷
本地 trunc_symbol=".."
本地目錄 = $ {PWD ## * /}
pwdmaxlen = $ (((pwdmaxlen <$ {# dir})? $ {# dir}: pwdmaxlen))
NEW_PWD=${PWD/#$HOME/\~}
本地 pwdoffset=$((${#NEW_PWD} - pwdmaxlen ))
如果 [ ${pwdoffset} -gt "0" ]
然後
NEW_PWD=${NEW_PWD:$pwdoffset:$pwdmaxlen}
NEW_PWD=${trunc_symbol}/${NEW_PWD#*/}
是

導出 NEW_PWD
}

PROMPT_COMMAND=bash_prompt_command
# 顏色圖表@http://wiki.archlinux.org/index.php/Color_Bash_Prompt
案例“${TERM}”在
“xterm”)
標題欄='\[\033]0;\u@\h>${NEW_PWD}\007\]'
PS1 = "${TITLEBAR}\[\e[1;32m\]\\e[0;36m\]\u\e[1;32m\]@\e[1;33m\]\h\e[ 1;32m\]]\e[0;37m\]\${NEW_PWD}/\e[1;32m\]\$\[\e[0m”
;;
“螢幕”)
標題欄='\[\033]0;\u@\h>${NEW_PWD}\007\]'
ESC = '[\ ek \ e \\\]'
PS1 = "${TITLEBAR}\[\e[1;32m\][\e[0;36m\]\u\e[1;32m\]]\e[0;37m\]\${NEW_PWD} /\e[1;32m\]\$${ESC}\[\e[0m”
;;
*)
PS1 = "\[\e[1;32m\][\e[0;36m\]\u\e[1;32m\]@\e[1;33m\]\h\e[1;32m\ " ]]\e[0;37m\]\${NEW_PWD}/\e[1;32m\]\$\[\e[0m"
;;
經社理事會

這是我的.screenrc

hardstatus alwayslastline
hardstatus 字元串 '%{= kg}[%{Y}%H%{g}][%= %{= kw}%?%-Lw%?%{=b kR}(%{W}%n-% t%?(%u)%?%{=b kR})%{= kw}%?%+Lw%?%?%= %{g}][%{Y}%l%{g}]% {g}[%{B}%m.%d.%Y %{G}%c%{g}]'

termcapinfo xterm|xterms|xs|rxvt ti@:te@
termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

altscreen 開啟
shelltitle '$ |bash'

我做錯了什麼?

更新(2010 年 8 月 19 日): 問題是當您設置alwayslastline. 所以我的解決方案是放棄並為我的螢幕會話選擇一個預定的、有用的標題。.bashrc我的更新.screenrc可以在http://bitbucket.org/jsumners/rcfiles/src找到。

轉義碼在螢幕內是不同的

這在螢幕之外:

PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'

相當於這個內屏:

PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME}: ${PWD}\033\\"'

將您的案例 ${TERM}=“screen” 標題欄更改為

TITLEBAR='\[\033_\u@\h > ${NEW_PWD}\033\\\]'

將解決您的問題。

實際上,有一種方法可以通過 screen 將轉義序列直接發送到 xterm。它不容易找到,但從螢幕程式碼 (src/ansi.c) 來看,我認為它自 2005 年以來就已存在。我在 xterm、Gnome 終端和 putty 中使用它。我在 mintty source 中發現了一條註釋,表明它在那裡不起作用,僅僅是因為它們不處理 DCS(除非它最近已修復)。

從下面的螢幕文件(在http://www.gnu.org/software/screen/manual/html_node/Control-Sequences.html

ESC P (A) Device Control String
         Outputs a string directly to the host terminal without interpretation.

ANSI DCS(設備控製字元串)是一種轉義碼,用於直接發送到終端(我認為這是多年前它的最初目的)。這樣的字元串以 ST 轉義碼(字元串終止符)終止。

包裝字元串以在 DCS..ST 塊內設置終端的視窗標題,它會通過螢幕並正確更新,即使使用 hardstatus alwayslastline 也是如此。

DCS = \033P,ST = \033\

範例 - 要使用目前工作目錄更新視窗標題,請使用

NEW_TITLE="\033]0;${PWD/$HOME/~}\007"
echo -ne "\033P${NEW_TITLE}\033\\"

遲到總比不到好!希望這可以幫助某人。

以防萬一我對螢幕源更改有誤:我正在執行來自螢幕會話 git 的最新版本,而後者又使用來自螢幕 git 的幾乎最新版本(有一些特定於螢幕會話的更改)。但是日誌消息的日期來自 2005 螢幕(如果您複製螢幕 git repo 並使用以下命令,您可以看到對該送出所做的有關 DCS 處理的更改)。

git clone git://git.savannah.gnu.org/screen.git
git difftool e6618a14^! src/ansi.c

引用自:https://serverfault.com/questions/35085