gnu screen 不改变我的窗口标题

gnu screen 不改变我的窗口标题

我为在 gnu screen 中创建的新窗口设置了有意义的名称,但当我“cd”或打开 vim 时,该名称会更改为“pwd”。有没有办法阻止 screen 更改标题?我知道 tmux 中有类似的设置,但出于某种原因,在有多个垂直分割的 tmux 中,vim 滚动速度非常慢,所以我不得不放弃它(tmux)。欢迎提出好主意!

答案1

gnu screen 似乎没有办法关闭该功能(无论如何你都会有选择地应用它)。修复它的方法是修改 shell 和 vim 行为:

答案2

在 Centos 中,这个问题可以通过创建 /etc/sysconfig/bash-prompt-screen 来修复,它由默认的 /etc/bashrc 执行。如果你

touch /etc/sysconfig/bash-prompt-screen
chmod +x /etc/sysconfig/bash-prompt-screen
exec bash

然后它将执行,但它不执行任何操作(因为它是空的),并且从那时起就保留你的窗口标题。(请注意,执行 bash 以重新启动 bash 以在你当前的 shell 中触发此操作。)

hardstatus alwaysignore 对我来说没用

答案3

您说的“窗口”是什么?

Screen 以及 shell 和 vim 可能会向终端发送这些内容的术语转义代码。一些终端仿真器不太擅长捕捉所有这些代码,并且基本上会出错。但我已经很久没见过这种情况了。

使用 screen,您可以设置窗口的标题title <title>并以编程方式设置它(通过绑定到键或特殊的 ESC 序列),无论您想要什么。最终,这些程序会向您的终端发出一个序列。您可以使用PROMPT_COMMAND环境变量来动态更改它,例如,根据您的 cwd。这是我的,它显然是由我的系统的 /etc/bashrc 设置的

printf "\033]0;%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"

为了使标题完全消失,你必须(至少)做三件事:

  1. 关闭除 1 个屏幕之外的所有屏幕,并在命令提示符下以及~/.profile之后/etc/bashrc加载时取消设置 PROMPT_COMMAND。
  2. 使用屏幕的title命令。点击Ctrl-A然后:然后。您也title ""<CR>可以设置它。.screenrc
  3. 从 shell 发送一个空序列:

    printf "\033]0;\033\\"
    

如果有其他东西(如vim)设置它,我们需要做进一步的研究。

在屏幕手册页中,有一节关于标题的部分,其中对此进行了详细讨论。

答案4

相关的是,我发现在设置我的窗口标题后(并确保 PROMPT_COMMAND 未设置并且我的 PS1 中没有任何异常),在某些系统上启动屏幕会导致我的窗口标题发生变化。经过大量的实验和挫折之后,我终于发现,通过从没有此问题的系统中获取屏幕包的安装文件 /etc/screenrc 并使用它来替换有问题的系统上的相同文件,它解决了我的问题。screen 现在不再改变我的窗口标题。现在确切的说,/etc/screenrc 中的哪一行或哪几行在起作用我不知道。两个 screenrc 之间的差异很大,所以我甚至懒得去侦查它。

相关内容