我正在尝试screen设置我的xterm标题。我在 之外工作screen,但screen在我开始时保留任何标题。这是我的.bashrc:
函数 bash_prompt_command() {
# $PWD 应该保留多少个字符
本地 pwdmaxlen=25
# 表示有dir truncation
本地 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"
;;
esac
这是我的.screenrc:
硬状态总是最后一行
硬状态字符串 '%{= 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'
替代屏幕
shelltitle '$ |bash'
我做错了什么?
更新(2010 年 8 月 19 日):
问题是当您设置alwayslastline. 所以我的解决方案是放弃并为我的屏幕会话选择一个预定的、有用的标题。我的更新.bashrc和.screenrc可以在这里找到http://bitbucket.org/jsumners/rcfiles/src。
小智 7
实际上,有一种方法可以通过屏幕将转义序列直接发送到 xterm。它不容易找到,但从屏幕代码 (src/ansi.c) 中我认为它自 2005 年以来就存在。我在 xterm、Gnome 终端和腻子中使用它。我在 mintty 来源中发现了一个注释,表明它在那里不起作用,因为它们不处理 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.
Run Code Online (Sandbox Code Playgroud)
ANSI DCS(设备控制字符串)是一个转义码,用于直接发送到终端(我认为这是它多年前的最初目的)。这样的字符串以 ST 转义码(字符串终止符)终止。
包装字符串以在 DCS..ST 块内设置终端的窗口标题,它会通过屏幕并正确更新,即使在 hardstatus alwayslastline 的情况下也是如此。
DCS = \033P,ST = \033\
示例 - 要使用当前工作目录更新窗口标题,请使用
NEW_TITLE="\033]0;${PWD/$HOME/~}\007"
echo -ne "\033P${NEW_TITLE}\033\\"
Run Code Online (Sandbox Code Playgroud)
迟到总比不到好!希望这可以帮助某人。
以防万一我对屏幕源更改有误:我正在运行来自 screen-session git 的最新版本,而后者几乎使用了来自 screen-session 的最新版本(有一些特定于 screen-session 的更改)。但是日志消息的日期是 2005 年的屏幕(如果您克隆屏幕 git repo 并使用下面的命令,您可以看到对该提交所做的关于 DCS 处理的更改)。
git clone git://git.savannah.gnu.org/screen.git
git difftool e6618a14^! src/ansi.c
Run Code Online (Sandbox Code Playgroud)
屏幕外的这个:
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
Run Code Online (Sandbox Code Playgroud)
相当于这个内部屏幕:
PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME}: ${PWD}\033\\"'
Run Code Online (Sandbox Code Playgroud)
将您的案例 ${TERM}="screen" 标题栏更改为
TITLEBAR='\[\033_\u@\h > ${NEW_PWD}\033\\\]'
Run Code Online (Sandbox Code Playgroud)
会解决你的问题。
| 归档时间: |
|
| 查看次数: |
17689 次 |
| 最近记录: |