使用 zsh 的屏幕窗口标题

使用 zsh 的屏幕窗口标题

我想让 vim 屏幕标签名称更有用。我已经打开了屏幕插件,并尝试了几种方法。我最喜欢的一个是使用另一个加载屏幕文件来固定屏幕名称,即:

screen -S sectionName -c .screenTest

screenTest 文件会有类似内容:

source $HOME/.screenrc
chdir $HOME/place
# Screen 0
screen
stuff "something^M"
# Screen 1
screen
stuff "something^M"
stuff "cd place^M"                                                                                                 
stuff "vim -p `find -type f -not -path \"*/\.*\" -not -path \"*x86*\" \( -name \"*.py\" -o -name \"*.cxx\" -o -name \"*.h\" \)`^M"
title "Screen1"

问题是在 stuff 命令运行之前会读取 title 命令。如果有人知道如何让 title 命令在 stuff 命令完成后运行,那就太完美了。我试过了:

内容“^A:title TitleValue ^M”

但它不会在屏幕上写入命令插入,而是写入终端(在 vim 中使用 写入 ^A 和 ^M ^V^A)。

然后我尝试编辑 screen.plugin.zsh 文件。

我尝试在输入命令必须显示位置时更改 prexec 和 precmd zsh 方法vim。但我做不到。

我很抱歉在这里发布它,但如果有人可以帮助我做到这一点,这听起来很简单,但我坚持即使我改变$cmd,它也不会改变TAB语法,也就是说,如果我这样做:

if [[ "$cmd" == "vim*" ]]; then
  # How do I check if variable $cmd has string "vim" in it using zsh?
  echo "changing for vim!"
  cmd=''
fi

它会更改终端标题,但不会更改屏幕窗口标题。有什么想法吗?这个问题也是这里,但我认为这个问题在这里更合适,因为它不完全是一个 oh-my-zsh 问题。

另一件有帮助的事情是,如果我可以设置一些窗口不自动改变其标题,而其他窗口则会改变。

答案1

屏幕使用手册状态:

要在创建窗口后更改名称,可以使用标题字符串转义序列 ( <ESC> k name <ESC> \) (...)

因此(无需深入研究 oh-my-zsh 的模块、插件等)你可以使用

print -n "\033kTITLE\033\134"

命令行将当前屏幕窗口的名称更改为标题

\033代表逃脱八进制字符(ESC = 27(十进制)= 0x1b(十六进制)= 033(八进制))\134反斜杠特点。

根据您的命令,以下命令在屏幕配置文件中起作用:

stuff "print -n "\\033kTITLE\\033\\134\" "

答案2

根据console_codes(4),设置标题的可移植方法是使用 VT100 序列OSC 0 ; title STOSC(操作系统命令)在 ECMA-48 中定义为\x9dESC ]ST(字符串终止符)在 ECMA-48 中定义为\x9cESC \; VT100 & xterm 也允许BEL使用。 综上所述:

printf '\x1b]0;%s\x07' "$your_title"

或者如果你因为某种原因喜欢劣等八进制:

printf '\033]0;%s\007' "$your_title"

相关内容