使用屏幕时设置xterm(PuTTY)窗口标题吗?


12

我试图screen设定自己的xterm头衔。我在之外进行此工作screen,但是screen在启动时将其标题保持在原位。这是我的.bashrc

函数bash_prompt_command(){
    #$ PWD应保留多少个字符
    本地pwdmaxlen = 25
    #表示已被截断
    本地trunc_symbol =“ ..”
    本地目录= $ {PWD ## * /}
    pwdmaxlen = $((((pwdmaxlen <$ {#dir})?$ {#dir}:pwdmaxlen))
    NEW_PWD = $ {PWD /#$ HOME / \〜}
    本地pwdoffset = $((($ {#NEW_PWD}-pwdmaxlen))
    如果[$ {pwdoffset} -gt“ 0”]
    然后
        NEW_PWD = $ {NEW_PWD:$ pwdoffset:$ pwdmaxlen}
        NEW_PWD = $ {trunc_symbol} / $ {NEW_PWD#* /}
    科幻

    汇出NEW_PWD
}

PROMPT_COMMAND = bash_prompt_command
#颜色图表@ http://wiki.archlinux.org/index.php/Color_Bash_Prompt
情况为“ $ {TERM}”
    “ xterm”)
        TITLEBAR ='\ [\ 033] 0; \ u @ \ h> $ {NEW_PWD} \ 007 \]'
        PS1 =“ $ {TITLEBAR} \ [\ e [1; 32m \] [\ e [0; 36m \] \ u \ e [1; 32m \] @ \ e [1; 33m \] \ h \ e [ 1; 32m \]] \ e [0; 37m \] \ $ {NEW_PWD} / \ e [1; 32m \] \ $ \ [\ e [0m“
        ;;
    “屏幕”)
        TITLEBAR ='\ [\ 033] 0; \ u @ \ h> $ {NEW_PWD} \ 007 \]'
        ESC ='\ [\ ek \ e \\\\]'
        PS1 =“ $ {TITLEBAR} \ [\ e [1; 32m \] [\ e [0; 36m \] \ u \ e [1; 32m \]] \ e [0; 37m \] \ $ {NEW_PWD} / \ e [1; 32m \] \ $ $ {ESC} \ [\ e [0m“
        ;;
    *)
        PS1 =“ \ [\ e [1; 32m \] [\ e [0; 36m \] \ u \ e [1; 32m \] @ \ e [1; 33m \] \ h \ e [1; 32m \ ]] \ e [0; 37m \] \ $ {NEW_PWD} / \ e [1; 32m \] \ $ \ [\ e [0m“
    ;;
埃萨克

这是我的.screenrc

hardstatus alwayslastline
hardstatus字符串'%{= kg} [%{Y}%H%{g}] [%=%{= kw}%?%-Lw%?%{= b kR}(%{W}%n-% t%?(%u)%?%{= b kR})%{= kw}%?%+ Lw%?%?%=%{g}] [%{Y}%l%{g}]% {g} [%{B}%m。%d。%Y%{G}%c%{g}]'

termcapinfo xterm | xterms | xs | rxvt ti @:te @
termcapinfo xterm'hs:ts = \ E] 2;:fs = \ 007:ds = \ E] 2; screen \ 007'

altscreen打开
shelltitle'$ | bash'

我做错了什么?

更新(2010年8月19日): 问题在于,设置时,您无法从屏幕内更新终端的标题alwayslastline。因此,我的解决方案是放弃并为屏幕会议准备一个预定的,有用的标题。我已更新.bashrc.screenrc可以在http://bitbucket.org/jsumners/rcfiles/src中找到。

Answers:


4

屏幕内部的转义码不同

屏幕外:

PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'

等效于此内部屏幕:

PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME}: ${PWD}\033\\"'

将案例$ {TERM} =“ screen”标题栏更改为

TITLEBAR='\[\033_\u@\h > ${NEW_PWD}\033\\\]'

将解决您的问题。


这是行不通的。我不明白为什么。
James Sumners 09年

我已经确定要hardstatus alwayslastline像我那样进行设置以screen防止screen设置xterm标题。现在,如果我能弄清楚如何同时做这两项。
James Sumners 09年

是因为您的hardstatus中有%t(标题)吗?
crb

不。只是删除它并获得相同的结果。我相信我将不得不为此设置screen窗口标题设置别名,然后启动程序。然后在使用时放弃动态终端标题screen。:(
詹姆斯·萨姆纳


7

实际上,有一种方法可以通过屏幕直接将转义序列发送到xterm。很难找到它,但是从屏幕代码(src / ansi.c)中,我认为它是从2005年开始出现的。我在xterm,Gnome Terminal和腻子中使用它。我在薄荷源中发现了一条便条,表明它不能在那里工作,仅仅是因为他们不处理DCS(除非最近已修复)。

从下面的屏幕文档(位于http://www.gnu.org/software/screen/manual/html_node/Control-Sequences.html

ESC P (A) Device Control String
          Outputs a string directly to the host terminal without interpretation.

ANSI DCS(设备控制字符串)是一个转义代码,用于直接发送到终端(我认为这是很多年前的原始目的)。这样的字符串以ST换码(String Terminator)终止。

将字符串包装起来以在DCS..ST块内设置终端的窗口标题,即使在hardstatus alwayslastline的情况下,它也可以通过屏幕并正确更新。

DCS = \ 033P,ST = \ 033 \

示例-使用当前工作目录更新窗口标题,请使用

NEW_TITLE="\033]0;${PWD/$HOME/~}\007"
echo -ne "\033P${NEW_TITLE}\033\\"

迟到总比不到好!希望这对某人有帮助。

以防万一我对屏幕源的更改是错误的:我正在运行来自screen-session git的最新消息,而后者又使用了来自screen git的最新消息(某些特定于screen-session的更改)。但是日志消息的日期是从2005屏幕开始的(如果您克隆屏幕git repo并使用下面的命令,则可以看到对该提交所做的有关DCS处理的更改)。

git clone git://git.savannah.gnu.org/screen.git
git difftool e6618a14^! src/ansi.c

1

crb是对的,但是

a)他使用的转义码对我不起作用。应该\033k改为\033_。见screen (1)"TITLES (naming windows)"。因此应该是:

PROMPT_COMMAND='echo -ne "\033k${USER}@${HOSTNAME}: ${PWD}\033\\"'

b)这种转义仅用于设置屏幕窗口的标题。屏幕的一个实例可以有多个窗口,每个人都有一个名字,那就是显示在hardstatuscaptiont转义序列。

c)如果在xterm中为xterm设置了正确的terminfo,则正常的bash转义有效.screenrc

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

(这也works on my machine用于腻子)

因此,为了同时为屏幕窗口和腻子/ xterm标题设置正确的标题,我使用如下方式:

XTERM_TITLE="${USER}@${HOSTNAME}: ${PWD}"
SCREEN_TITLE="${PWD}"
PROMPT_COMMAND='echo -ne "\033]0;$XTERM_TITLE\007\033k$SCREEN_TITLE\033\\"'

供参考:http : //tldp.org/HOWTO/Bash-Prompt-HOWTO/x395.html


1

我不会完全回答这个问题,但让我提出解决问题的方法。许多窗口管理器支持EWMH规范。还有一个命令行工具wmctrl可以与他们进行交互。使用此工具,可以使用以下命令轻松更改活动窗口的标题:

  wmctrl -r :ACTIVE: -T "FooTitle"

也可以更改窗口图标,布局和其他属性。该工具可能不适用于PuTTY,因为Windows不支持EWMH,但是大多数Linux系统都应该接受。

使用此方法,无论是否使用都screen无所谓。


0

最近2周,我搜索了很多论坛,但没有找到以下问题的答案:

如何获得所有命令输出到Putty title?

其他程序需要它知道服务器上的某些作业何时完成以及它是对还是错。Plink stdout和stdin无法正常工作,我使用了许多带有等待延迟的调整,而某些命令却对其他命令无效。无法在该服务器上安装XSEL和XCLIP。

所以这是解决方案:

  1. 获取文件中的命令输出。
  2. 将文件回显为标题。

在腻子客户端和suse服务器上,它看起来像这样:

ls /home | grep domagaja > logutoit.txt 
echo -e "\033]0\\;$(cat logutoit.txt)\\007\\c"

希望有人能够使用它。当然,它不适用于所有服务器类型和腻子客户端设置,但是这个想法应该很好用。

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.