28

MinTTY - новая консоль по умолчанию для Cygwin.

Какая команда оболочки (что-то, что я могу поместить в .bashrc, или даже лучше, в .zshrc), чтобы изменить заголовок окна MinTTY?

Мне бы хотелось, чтобы заголовок окна был путем к текущему каталогу, и чтобы он обновлялся при переключении каталогов внутри консоли.

8 ответов8

38

Что случилось

Следующая команда не работает для меня:

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) устанавливает заголовок окна каждый раз, когда появляется приглашение.

Решение

Добавьте эти строки в ваш .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

Надеюсь это поможет

23

Для этого вы можете изменить его с помощью управляющей последовательности xterm, например так:

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

См. Http://code.google.com/p/mintty/issues/detail?id=241.

3

Поместите это в .zshrc:

# Change title of MinTTY to current dir
function settitle() {
    echo -ne "\033]2;"$1"\007"
}
function chpwd() {
    settitle $(cygpath -m `pwd`)
}

Последовательность специальных символов в функции урегулирования заставляет MinTTY изменять заголовок окна.

В zsh, если вы определите функцию со специальным именем chpwd, она будет вызываться после каждого chdir.

Работает на WinXP, с Cygwin 1.7 и MinTTY под управлением zsh.

2

В bash переменная PROMPT_COMMAND может содержать несколько команд, разделенных точкой с запятой. Вы можете использовать это, чтобы сделать ту же настройку заголовка, как описано в другом ответе, который говорит о zsh.

2
1) echo $PS1 and copy that string to your clipboard or text editor, as in
   echo $PS1
2) edit ~/.bash_profile and add shell code below, replacing $PS1 as necessary but keep the ${TERMINAL_TITLE} variable in the "false" condition.
3) Save the file and set the TERMINAL_TILE environment variable, as in
   export TERMINAL_TITLE="My Custom Title"
4) Source your bash profile, as in
   . ~/.bash_profile
Enjoy

if [ -z "${TERMINAL_TITLE}" ]
then
  PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$ '
else
  PS1='\[\e]0;${TERMINAL_TITLE}\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$ '
fi
1

Просто хотел поделиться своим решением, так как я использую mintty для выполнения скрипта.

Мой мятный ярлык настроен как:

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

Сценарий connect.sh, который я написал и который вызывается в ярлыке выше, запросит у меня сервер, к которому я хочу подключиться, и запустит функцию разрешений, определенную в сценарии.

connect.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
1

Я использовал ответ Леонеля, но обнаружил, что заголовок будет мерцать только при этом, что означает, что по крайней мере команда echo работает так, как задумано. Я запустил zsh в интерактивном режиме с включенным режимом отладки, используя

zsh -xv

Изменение каталога, очевидно, вызывает другую функцию под названием title() после precmd() и chpwd() , эффективно переопределяя их. Поэтому я подключил это к моему .zshrc, и это сработало.

function settitle() {
    echo -ne "\033]2;"$1"\007"
}
function title() {
    settitle $(cygpath -m `pwd`)
}

Если вы предпочитаете использовать chpwd() или precmd() , просто отключите функцию title : title(){} .

0

попробуйте добавить это в .bash_profile

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

Меня устраивает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .