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

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

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

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

在此处输入图片描述

我现在拥有的是,我想要获得的是有标题(如果可能的话还有硬状态行),而|0 less| 1 man不是当前的|0 bash| 1 bash

我怎样才能做到这一点?

更新:到目前为止,我发现的唯一可行的解​​决方案是这个帖子但它没有打印我需要的内容......

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

PROMPT_COMMAND='echo -ne "\033k\033\134\033k${HOSTNAME}[`basename ${PWD}`]\033\134"'`

在 .bashrc 和shelltitle '] |bash'.screenrc 中。标题使用主机名和工作目录的基本名称进行更新,但提示完全错误(它还带有前导空格):

134134fabio@host10:~$

答案1

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

更新

case "$TERM" in
    screen*) PROMPT_COMMAND='echo -ne "\033k\033\0134"'
esac

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

$ echo -e "\134 = \0134"
\134 = \
$ /bin/echo -e "\134 = \0134"
\ = \

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

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

shelltitle '> |something:'
hardstatus alwayslastline

模式search|name告诉屏幕searchend-of-prompt输入一些字符串(在本例中为'> ')。名称部分指定窗口的默认 shell 名称。因此,当您只运行 shell 时,您会看到类似以下内容:

$ something:

但是当你运行 top 时:

$ something:top

答案2

另外,您也可以使用tmux而不是screenTmux将自动设置当前窗口的标题。

相关内容