Gnu 屏幕,如何动态更新窗口的标题?

Fab*_*bio 8 gnu-screen

我正在尝试使用 screenrc 文件改进 GNU Screen 的方面,我调整了颜色、状态行、标题和加载的窗口列表。

我唯一无法实现的是使用当前执行的命令获取标题,如下图所示,注意右侧窗格中的 vim 标题:

在此处输入图片说明

我目前拥有的是this,我想获得的是使用|0 less| 1 man而不是当前的|0 bash| 1 bash.

我怎样才能做到这一点?

更新:到目前为止,我找到的唯一可行的解决方案是在这篇文章中,但它没有打印出我需要的...

然而,这是迄今为止我发现的唯一有效的动态标题。

PROMPT_COMMAND='echo -ne "\033k\033\134\033k${HOSTNAME}[`basename ${PWD}`]\033\134"'`
Run Code Online (Sandbox Code Playgroud)

在 .bashrc 和shelltitle '] |bash'.screenrc 中。标题更新了主机名和工作目录的基名,但是提示完全错误(也有前导空格):

134134fabio@host10:~$
Run Code Online (Sandbox Code Playgroud)

Tor*_*ian 8

在您的.bashrc文件中设置PROMPT_COMMAND如下:

更新

case "$TERM" in
    screen*) PROMPT_COMMAND='echo -ne "\033k\033\0134"'
esac
Run Code Online (Sandbox Code Playgroud)

更新:似乎是 bash 内置回声的错误。解决方案应该是使用/bin/echo\0134。尝试:

$ echo -e "\134 = \0134"
\134 = \
$ /bin/echo -e "\134 = \0134"
\ = \
Run Code Online (Sandbox Code Playgroud)

这是 screen 需要识别正在运行的命令的转义序列,并替换当前窗口的标题。

然后,在您的.screenrc文件中,确保存在以下几行:

shelltitle '> |something:'
hardstatus alwayslastline
Run Code Online (Sandbox Code Playgroud)

该模式search|name告诉 screen 给searchend-of-prompt一些字符串(在本例中为'> ')。名称部分指定窗口的默认外壳名称。所以,当你只有 shell 运行时,你会看到类似的东西:

$ something:
Run Code Online (Sandbox Code Playgroud)

但是当你运行 top 时:

$ something:top
Run Code Online (Sandbox Code Playgroud)