如何更改薄荷窗口的标题?


35

MinTTY是Cygwin的新默认控制台。

什么是更改MinTTY窗口标题的shell命令(可以在.bashrc中放入某些内容,甚至可以在.zshrc中放入某些内容)?

我希望窗口的标题成为当前目录的路径,并在我在控制台内切换目录时对其进行更新。


1
Cygwin的默认提示设置(即$PS1)已经包含将窗口标题设置为user @ machine:working_directory的控制序列。
ak2

最近的MSYS2_packages /文件系统提交6e6310d(文件系统:新的特定变量MSYS2_PS1。,2016-05-01)引入了MSYS2_PS1提示脚本,从而允许不同的Cygwin / MSYS2配置。我提出了一项调整措施,以确保任何现有PS1都具有中等优先级github.com/Alexpux/MSYS2-packages/pull/651。希望这可以帮助。
菲利普·奥克利

@Philip,(自我注释)该调整已证明是有争议的,并且将添加(或删除)进一步的调整以创建涵盖各种用法的最小可行修补程序。
菲利普·奥克利

1
相关的,如果只需要一个静态标题,例如“ Cygwin i686”“ Cygwin x86_64”,则可以-T <title>在Windows快捷方式属性中使用。另请参阅mintty man page
jww

Answers:


50

怎么了

以下命令对我不起作用:

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

希望这可以帮助


1
很好,可以解决大多数用户使用默认cygwin设置会遇到的PS1问题。
Markku K.

3
这应该已被接受的答案,因为它完美的作品不同的是最高的投票答案
塔潘钱德拉

1
我喜欢我可以剪切粘贴的答案。并且也清楚地说明了问题的实质。
Darrel Lee

这些功能对我来说很好!请记住,要使cygwin重新加载.bashrc,您必须重新启动cygwin或进行写入source ~/.bashrc-否则cygwin仍将运行cygwin启动时在磁盘上的旧版本bashrc。-测试Cygwin version 2.8.1 (64 bit)-2017年版本
hanshenrik '17

为什么这个答案从未被接受?
铁匠

26

您可以使用xterm控制序列对此进行更改,如下所示:

echo -ne '\e]0;Title\a'

请参阅:http : //code.google.com/p/mintty/issues/detail?id=241


4
对我没有影响:/也许在最近6个月中这种技巧失效了?
voltrevo

您正在使用bash吗?
詹姆斯·傅

2
从屏幕内发出时,它无效。
ЯрославРахматуллин

10
可能的问题是命令提示符已经配置为更新标题(例如,使用当前路径的标题),因此命令可以使用,但是提示符突然覆盖了该命令。
Andrea Polci 2014年

2
要测试它“ echo -ne'\ e] 0;标题\ a'&& cat”。此方法可防止提示立即将其重置。(如果可行,您可以按照其他答案中的说明更改个人资料中的PS1)
Curtis Yallop

3

将其放在.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。


也可以在WSL中使用(当然,要减去cygpath的东西): settitle "$(pwd)@$HOST"
zzxyz

2

在bash中,可以将变量PROMPT_COMMAND设置为容纳多个命令,并用分号分隔。您可以使用它来进行与讨论zsh的其他响应中所述相同的标题设置。


2
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 \ $'
科幻

1

我使用了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(){}


1

我只是想分享我的解决方案,因为我使用薄荷来执行脚本。

我的薄荷快捷方式设置为:

C:\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico /usr/bin/bash.exe -l -c /scripts/connect.sh

在上面的快捷方式中调用的我编写的connect.sh脚本将提示我要连接的服务器,执行脚本中定义的settitle函数。

连接.sh

#!/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如果不使用功能,为什么要定义它?
pabouk

0

尝试将其添加到.bash_profile

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

这个对我有用。


2
问题是关于更改窗口标题,而不是命令提示符。
kenorb

1
请将其添加到.bash_profile中,可以更改标题,谢谢!
netawater
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.