MinTTY是Cygwin的新默认控制台。
什么是更改MinTTY窗口标题的shell命令(可以在.bashrc中放入某些内容,甚至可以在.zshrc中放入某些内容)?
我希望窗口的标题成为当前目录的路径,并在我在控制台内切换目录时对其进行更新。
-T <title>
在Windows快捷方式属性中使用。另请参阅mintty man page
。
MinTTY是Cygwin的新默认控制台。
什么是更改MinTTY窗口标题的shell命令(可以在.bashrc中放入某些内容,甚至可以在.zshrc中放入某些内容)?
我希望窗口的标题成为当前目录的路径,并在我在控制台内切换目录时对其进行更新。
-T <title>
在Windows快捷方式属性中使用。另请参阅mintty man page
。
Answers:
怎么了
以下命令对我不起作用:
echo -ne "\e]0;MYTITLE\a"
事实证明,我的默认Cygwin安装在.bashrc中包含以下提示定义:
PS1=\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n$
请注意,\e]0;\w\a
每次出现提示时,提示的第一部分()都会设置Windows标题。
解决方案
将这些行添加.bashrc
到定义2个函数的行中:
function settitle() {
export PS1="\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n$ "
echo -ne "\e]0;$1\a"
}
function settitlepath() {
export PS1="\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n$ "
}
然后,您可以使用以下命令设置自定义标题:
settitle "MYWonderfullTest here"
或者您可以使用以下命令恢复为cygwin的默认设置(当前路径):
settitlepath
希望这可以帮助
source ~/.bashrc
-否则cygwin仍将运行cygwin启动时在磁盘上的旧版本bashrc。-测试Cygwin version 2.8.1 (64 bit)
-2017年版本
您可以使用xterm控制序列对此进行更改,如下所示:
echo -ne '\e]0;Title\a'
将其放在.zshrc中:
# Change title of MinTTY to current dir
function settitle() {
echo -ne "\033]2;"$1"\007"
}
function chpwd() {
settitle $(cygpath -m `pwd`)
}
函数settitle中特殊字符的顺序使MinTTY可以更改窗口的标题。
在zsh中,如果使用特殊名称chpwd定义函数,则将在每个chdir之后调用该函数。
在WinXP上运行,并且Cygwin 1.7和MinTTY运行zsh。
settitle "$(pwd)@$HOST"
1)回显$ PS1并将该字符串复制到剪贴板或文本编辑器中,如下所示: 回声$ PS1 2)编辑〜/ .bash_profile并在下面添加外壳代码,必要时替换$ PS1,但将$ {TERMINAL_TITLE}变量保持为“ false”状态。 3)保存文件并设置TERMINAL_TILE环境变量,如下所示 export TERMINAL_TITLE =“我的自定义标题” 4)获取您的bash个人资料,如 。〜/ .bash_profile 请享用 如果[-z“ $ {TERMINAL_TITLE}”] 然后 PS1 ='\ [\ e] 0; \ w \ a \] \ n \ [\ e [32m \] \ u @ \ h \ [\ e [33m \] \ w \ [\ e [0m \] \ n \ $' 其他 PS1 ='\ [\ e] 0; $ {TERMINAL_TITLE} \ a \] \ n \ [\ e [32m \] \ u @ \ h \ [\ e [33m \] \ w \ [\ e [0m \ ] \ n \ $' 科幻
我使用了Leonel的答案,但发现这样做时标题只会闪烁,这意味着至少echo命令可以按预期工作。我使用启用了调试模式的交互式方式运行zsh
zsh -xv
更改目录显然会调用title()
after precmd()
和之后调用的另一个函数chpwd()
,从而有效地覆盖了它们。所以我将其插入到我的.zshrc中,并且它可以正常工作。
function settitle() {
echo -ne "\033]2;"$1"\007"
}
function title() {
settitle $(cygpath -m `pwd`)
}
如果您想使用chpwd()
或precmd()
代替,只需禁用标题功能:title(){}
。
我只是想分享我的解决方案,因为我使用薄荷来执行脚本。
我的薄荷快捷方式设置为:
C:\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico /usr/bin/bash.exe -l -c /scripts/connect.sh
在上面的快捷方式中调用的我编写的connect.sh脚本将提示我要连接的服务器,并执行脚本中定义的settitle函数。
#!/bin/bash
echo "Enter servername when prompted"
echo -n "servername: "
read servername
function settitle() {
echo -ne "\033]2;"$servername"\007"
}
function title() {
settitle $(cygpath -m `pwd`)
}
settitle
ssh my_username@$servername
title
如果不使用功能,为什么要定义它?
$PS1
)已经包含将窗口标题设置为user @ machine:working_directory的控制序列。