使用螢幕時設置xterm(PuTTY)視窗標題?
我正在嘗試
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