我正在尝试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="${标题栏}\[\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="${标题栏}\[\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找到。
实际上,有一种方法可以通过 screen 将转义序列直接发送到 xterm。它不容易找到,但从屏幕代码 (src/ansi.c) 来看,我认为它自 2005 年以来就已存在。我在 xterm、Gnome 终端和 putty 中使用它。我在 mintty source 中发现了一条注释,表明它在那里不起作用,仅仅是因为它们不处理 DCS(除非它最近已修复)。
从下面的屏幕文档(在http://www.gnu.org/software/screen/manual/html_node/Control-Sequences.html)
ANSI DCS(设备控制字符串)是一种转义码,用于直接发送到终端(我认为这是多年前它的最初目的)。这样的字符串以 ST 转义码(字符串终止符)终止。
包装字符串以在 DCS..ST 块内设置终端的窗口标题,它会通过屏幕并正确更新,即使使用 hardstatus alwayslastline 也是如此。
DCS = \033P,ST = \033\
示例 - 要使用当前工作目录更新窗口标题,请使用
迟到总比不到好!希望这可以帮助某人。
以防我对屏幕源更改有误:我正在运行来自屏幕会话 git 的最新版本,而后者又使用来自屏幕 git 的几乎最新版本(有一些特定于屏幕会话的更改)。但是日志消息的日期来自 2005 屏幕(如果您克隆屏幕 git repo 并使用下面的命令,您可以看到对该提交所做的关于 DCS 处理的更改)。
转义码在屏幕内是不同的。
这在屏幕之外:
相当于这个内屏:
将您的案例 ${TERM}="screen" 标题栏更改为
将解决您的问题。
crb 是对的,但是
a) 他使用的转义码对我不起作用。它应该
\033k
代替\033_
. 见下。screen (1)
_"TITLES (naming windows)"
所以应该是:b) 这种转义只用于设置屏幕窗口的标题。一个屏幕实例可以有多个窗口,每个窗口都有一个名称,即在转义序列中显示
hardstatus
的内容。caption
t
c)如果您在以下位置为 xterm 设置了正确的 terminfo,则正常的 bash 转义有效
.screenrc
:(这也
works on my machine
适用于腻子)因此,为了为屏幕窗口和 putty/xterm 标题设置正确的标题,我使用类似:
供参考: http ://tldp.org/HOWTO/Bash-Prompt-HOWTO/x395.html
我不会完全回答这个问题,但让我提出解决问题的方法。许多窗口管理器支持EWMH规范。还有一个命令行工具
wmctrl
可以与它们交互。使用此工具,可以使用以下命令轻松更改活动窗口的标题:也可以更改窗口图标、布局和其他属性。该工具可能不适用于 PuTTY,因为 Windows 不支持 EWMH,但大多数 Linux 系统应该接受它。
使用这种方法,您是否使用都没有关系
screen
。过去两周,我搜索了很多论坛,但没有找到问题的答案:
如何将所有命令输出到 Putty 标题?
其他程序需要它来了解服务器上的某些作业何时完成以及它是对还是错。Plink stdout 和 stdin 不起作用,我使用了许多带有等待延迟的调整,以及一些对其他人不起作用的命令。XSEL 和 XCLIP 无法安装在该服务器上。
所以这里是解决方案:
在 putty 客户端和 suse 服务器上,它看起来像这样:
希望有人能够使用它。当然,它不适用于所有服务器类型和 putty 客户端设置,但这个想法应该很好用。