Answers:
取决于事物的设置方式,但是默认情况下,类似的事情应该起作用。
settitle() {
printf "\033k$1\033\\"
}
然后运行:
settitle NEWTITLE
。
有关更多详细信息,请参见屏幕标题文档和GNU屏幕常见问题解答。
给定Ctrl+ A A只会更改它,直到下一条命令为止,它可能是由$PS1
(所有shell)或$PROMPT_COMMAND
/ DEBUG trap
(仅bash)或precmd
/ preexec
(仅zsh)设置的。
你应该找任何地方,\e
或\033
显示带有k
或者\\
之后,基本上就像我settitle
上面的例子。
更新
你说你有习俗preexec
。
为什么不将其更改为此:
if [[ "$TERM" == "screen" ]]; then
local CMD=${1[(wr)^(*=*|sudo|-*)]}
echo -n "\ek${TITLE:-$CMD}\e\\"
fi
然后,您可以通过运行以下命令来设置自定义标题:
TITLE="my title"
并通过运行取消设置标题
TITLE=
不要忘记进行更改precmd
,$PS1
必要时也要进行更改。
在旁边
你甚至可以此扩大到所有终端(例如xterm
,gnome-terminal
通过不硬编码等)\ek
和\e\\
。
这是我的方法:
terminit()
{
# determine the window title escape sequences
case "$TERM" in
aixterm|dtterm|putty|rxvt|xterm*)
titlestart='\033]0;'
titlefinish='\007'
;;
cygwin)
titlestart='\033];'
titlefinish='\007'
;;
konsole)
titlestart='\033]30;'
titlefinish='\007'
;;
screen*)
# status line
#titlestart='\033_'
#titlefinish='\033\'
# window title
titlestart='\033k'
titlefinish='\033\'
;;
*)
if type tput >/dev/null 2>&1
then
if tput longname >/dev/null 2>&1
then
titlestart="$(tput tsl)"
titlefinish="$(tput fsl)"
fi
else
titlestart=''
titlefinish=''
fi
;;
esac
}
# or put it inside a case $- in *i* guard
if test -t 0; then
terminit
fi
# set the xterm/screen/etc. title
settitle()
{
test -z "${titlestart}" && return 0
printf "${titlestart}$*${titlefinish}"
}
然后,您可以将其更改preexec
为:
if [[ "$TERM" == "screen" ]]; then
local CMD=${1[(wr)^(*=*|sudo|-*)]}
settitle "${TITLE:-$CMD}"
fi
\e
或\033
。
如果您的窗口标题反映了当前正在窗口中运行的应用程序,那是因为您的外壳正在这样做。如果这样做,是因为您的发行版,系统管理员或您对其进行了配置。
如果命令在运行时显示为窗口标题,则由preexec
函数(在zsh中)或其在bash下的仿真来完成。
如果在每个命令完成时标题都更改了,则可以通过precmd
zsh中的PROMPT_COMMAND
函数,bash中的参数或PS1
在任何shell中作为提示(参数)的一部分来完成。(更改标题的命令是任何应用程序发出的转义序列,作为终端输出流的一部分,因此可以将其嵌入提示中。)
看起来像一个转义序列\e]0;new title\a
,\e]2;new title\a
或\eknew title\e\\
在你的shell初始化文件(~/.bashrc
,~/.zshrc
,...)。如果有什么相关的设置可以在系统文件(例如/etc/bash.bashrc
,/etc/zsh/zshrc
); 然后在您自己的初始化文件中覆盖该参数或函数。
有关中的可覆盖标题设置,请参见Mikel的答案preexec
。
preexec
在.zshrc中找到了定义的函数。关键是,这就是我大部分时间想要的行为。我希望能够在一个特定的屏幕上即时禁用它。preexec
手动设置标题时,可能会有一个变量可以进入该函数,或者类似的东西?
preexec
函数,我或其他人可能会建议一个简单的更改。
preexec
,但是格雷格没有说他在用zsh
。那会教我的。;-)
preexec
设计比我的要好。
Ctrl-A A
。关于提示,您的意思是$PS1
每当我不想更改标题时就必须进行修改?