如何在 xterm 运行屏幕中自动更新标题?

如何在 xterm 运行屏幕中自动更新标题?

这是对这个问题.我正在tcsh在 GNU 中屏幕在一个终端

我的.cshrc 中有以下内容:

alias res_t 'xtset -t %h:%d "(%u:%g)" %e'       # reset titlebar
res_t                                           # reset title right now
alias precmd res_t

并且效果很好!

但是,当我运行 screen 时,我发现标题没有随当前目录更新。我怎样才能让 screen 更新 xterm 标题?

答案1

.tcshrc您可以通过将其添加到您的或.cshrc(替换您当前的别名)来设置 xterm 窗口标题precmd

alias precmd 'echo -n "\033]0;${PWD}\a"'

使用此方法时,请确保这是.cshrc.tcshrc文件中唯一的 precmd 别名。无论 GNU screen 会话是否打开,此方法都会在 xterm 和 gnome-terminal 中将当前目录显示为窗口标题。

我的回答基于

答案2

这应该可以在任何 shell 中工作,但这是一个肮脏的 .screenrc 黑客。它接管了你的 hardstatus 行来工作,这对某些用户来说可能是不可接受的。但它在gnome 终端在最新的 Ubuntu 上,即使没有术语表下面的行。某些情况可能需要更深入的调整(例如,我还没有在 PuTTY 上测试过)。

# enable xterm title setting; may not be necessary on some platforms
termcapinfo xterm*|rxvt* 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

# dirty hack: put xterm title escapes in the hardstatus
# this example will yield "user@host || screen Win#:(windowtitle)
defhstatus "$USER@^EH || screen ^E:(^Et)"
# now turn it off so it doesn't print in the hardstatus line
hardstatus off

# and finally, use caption as a replacement hardstatus
caption always '%{= kG}[%{G}%H%{G}][%= %{= kw}%?%-Lw%?%{R}(%{W}%n*%f%t%?(%u)%?%{R})%{w}%?%+Lw%?%?%= %{G}][%{B}%C%a %M.%d%{G}]'

发现于此链接

答案3

我知道您正在使用 tcsh,所以这可能不起作用...以防有人正在寻找 bash 方法来执行此操作。

如果您的系统(本地/远程)正在运行 bash,那么您可以使用“PROMPT_COMMAND”环境变量来设置窗口标题。在显示提示之前,会先对 PROMPT_COMMAND 进行求值。

(在你的.bashrc中):

export PROMPT_COMMAND='history -a && echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'

解释:

'history -a'

这会将 shell 设置为每次命令完成时附加到历史文件,而不是整个 shell 完成时附加到历史文件。(这与本例无关)。

'echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'

这呼应了转义代码“\033]0;”,该代码使用“用户”@“主机”变量(从右边到第一个“。”删除最长的匹配项)设置窗口标题,然后设置工作目录(用“~”替换“$HOME”)。

上述技巧适用于任何支持动态更改窗口标题的终端应用程序(iTerm、Terminal.app、urxvt、aterm、eTerm.xterm 等都支持)。您还可以在 bash 文档中查看 shell 变量“TITLEBAR”,它是类似的。

答案4

这一页(上面有链接)是解决方案,但是您需要确保条目的终端字符串与您的终端的 ID 字符串对齐(即变量 TERM 设置为何值)否则它不会产生任何效果。

以下是我所做工作的总结,在我多年没有投入足够时间来解决这个问题之后,这些工作对我很有用:

  1. 运行以下命令找出你的终端的 ID 字符串:

    echo $TERM
    

    它可能会说类似“xterm”或“linux”或“rxvt”之类的东西。

  2. 现在将以下行添加到位于主目录 (~/.screenrc) 中的 .screenrc 文件中(如果不存在,则创建一个):

    termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
    

    关键是要确保“xterm”是您上面获得的 TERM 的 ID 字符串。您可以为您使用的每种不同术语类型创建多行。

例如,我将这个作为我的 .screenrc 文件,因为我在 SSh 进入一个框时同时使用了 xterms 和“linux”术语类型:

termcapinfo linux 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

希望这能有所帮助,并且完全与 shell 无关。请记住,如果您以 root 身份运行 screen,则除了您自己的 ~/.screenrc 文件外,您还需要修改 ~root/.screenrc,如下所示。

相关内容