我想让我当前的$PS1
提示符(\u@\h:\w$(__git_ps1 "(%s)")\$
加上一些颜色)也用作 的screen
窗口标题(在硬线中)和 xterm 窗口标题。如何才能实现这一目标?
答案1
一个不完整的解决方案是$PS1
在 GNU 屏幕中修改提示符。首先修改 shell 的 RC 文件(即~/.bashrc
)。寻找一个案件评估的语句$TERM
:
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*)
;;
esac
添加以下内容事先的包罗万象(即*)
):
screen)
PS1='\e]0;\u@\h:\w\a\ek\u@\h:\w\e\\\u@\h:\w$(__git_ps1 "(%s)")\$ '
;;
这将修改你的hardstatus:\e]0;...\a
这将修改您的窗口标题: \ek...\e\\
除非您进行了配置,否则硬状态不会显示。例如,您可以将以下内容添加到您的.screenrc
:
hardstatus alwayslastline
复杂的hardstatus string
选项将继续发挥作用。您可以使用以下命令替换当前动态存储的硬状态%h
:
hardstatus string '%{= kw}[ %h ] %=%{w}[ %{r}%l%{w} ]%{w}[%{y} %Y-%m-%d %C %A %{w}]%{w}'
这会将硬状态行设置为屏幕左侧两个括号之间存储的硬状态,并将 CPU 利用率设置为右侧以及日期和时间。
例子:
[ username@host:~ ] [ 0.00 0.01 0.00 ][ 2012-11-27 4:13 PM ]
注意事项
这很可能会破坏 shell 历史记录中的光标偏移。 (点击向上箭头几次,然后尝试编辑该行。您会明白我的意思。)这是因为大多数 shell 使用 的长度
$PS1
,并且这将包括添加到 的不可打印字符$PS1
。这很可能会破坏 xterm 标题栏,将其“冻结”到运行 GNU 屏幕之前设置的最后状态。有趣的是,像 vim 这样更新标题栏的应用程序将继续工作。
C-A A
在命令提示符更新之前,手动设置屏幕标题(即)仍然有效。
答案2
使用 bash,将屏幕标题动态更改为 $YourVariable ( screenrc 标题变量 %t)
export PROMPT_COMMAND="echo -ne '\033k$YourVariable\033\\'"
如果不在“屏幕”内,也可以使用hardstatus(screenrc标题变量%h),将更改窗口(终端模拟器)标题
export PROMPT_COMMAND="echo -ne '\033]0;$YourVariable\007'"