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


14

这是该问题的后续措施。我正在xterm的 GNU 屏幕中的tcsh中工作。

我的.cshrc中包含以下内容:

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

而且效果很好!

但是,当我运行屏幕时,我看到标题没有用当前目录更新。如何使屏幕更新xterm标题?


您找到适合您的解决方案了吗?
Trey Hunner,2010年

不。我尝试了建议的答案,但没有用。这就是为什么我既不接受也不反对他们的原因。
内森·费尔曼

Answers:


4

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

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

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

我的答案是基于


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'

这会将外壳程序设置为在每次命令完成时(而不是在整个外壳程序完成时)追加到历史文件。(这与本示例无关)。

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

这回显转义代码“ \ 033] 0;”。它使用“用户” @“主机”变量(从右至第一个“。”删除最长匹配项)和工作目录(用“〜”代替“ $ HOME”)设置窗口标题。

上面的技巧将与支持动态更改窗口标题的任何终端应用程序一起使用(iTerm,Terminal.app,urxvt,aterm,eTerm。xterm等都可以)。您也可以在bash文档中查看shell变量“ TITLEBAR”,这很相似。


1
在gnuscreen内时这将不起作用。至少它对我不起作用。那就是为什么我在这里:)
gcb


2

这应该在任何shell中都有效,但这是一个肮脏的.screenrc hack。它接管了您的hardstatus线路以工作,这对于某些用户而言可能是不可接受的。但是,即使没有下面的termcapinfo行,它也可以在最新的Ubuntu上的gnome-terminal中运行。在某些情况下,可能需要进行更深的调整(例如,我尚未在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}]'

此链接中找到。


2
setenv TITLE "%{\033]0;%n@%m:%~\007%}"
set prompt = "${TITLE}%n@%m:%~%#"

1
但这会在运行时更新标题screen

1
在屏幕4.00.02 + tcsh 6.12.00上可以正常工作。假设您已经hardstatus适当设置了screen 变量,并且termcap / terminfo支持hs|ts|fs|ds
达伦·霍尔

hardstatus在这里扮演什么角色?
gcb 2014年

2

该页面(已在上面链接)是解决方案,但是您需要确保该条目的终端字符串与终端的ID字符串(即,变量TERM设置为该字符串)对齐,否则不会起作用。

以下是我所做工作的摘要,在多年没有投入足够的时间来弄清楚这一点后,该方法对我有用:

  1. 通过运行以下命令找出终端的ID字符串是什么:

    echo $TERM
    

    它可能会说“ xterm”或“ linux”或“ rxvt”之类的内容。

  2. 现在,将以下行添加到位于homedir(〜/ .screenrc)中的.screenrc文件中(如果不存在,则添加一个):

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

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

例如,我将其作为.screenrc文件,因为在将SShing放入框中时,我同时使用xterm和'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'

希望这会有所帮助,并且完全与外壳无关。请记住,如果您以root身份运行screen,除了像这样自己的〜/ .screenrc文件之外,还需要修改〜root / .screenrc。


1

此处的说明使我可以从bash更新rxvt中的标题-这可能没有任何帮助,但我认为可能值得研究(如果链接未跳至页面右侧,则是信息状态栏)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.