Как изменить заголовок мятного окна?

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

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

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

8 ответов

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

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

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

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

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

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

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

Поместите это в.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.

Я использовал ответ Леонеля, но обнаружил, что заголовок будет мерцать только при этом, что означает, что по крайней мере команда 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(){},

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

1) эхо $PS1 и скопируйте эту строку в буфер обмена или текстовый редактор, как в
   echo $PS1
2) отредактируйте ~/.bash_profile и добавьте код оболочки ниже, при необходимости заменив $PS1, но оставьте переменную ${TERMINAL_TITLE} в "ложном" состоянии.
3) Сохраните файл и установите переменную окружения TERMINAL_TILE, как в
   export TERMINAL_TITLE="Мой пользовательский заголовок"
4) Источник вашего профиля Bash, как в, ~ /.Bash_profile
наслаждаться

if [ -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 \ $ '
фи

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

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

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

Просто хотел поделиться своим решением, так как я использую 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

Несколько пользователей указали, что escape-коды не работали - поэтому попробуйте добавить задержку после команды - (чтобы заметить, что escape-коды обрабатываются), и тогда станет очевидно, что приглашение bash может сбрасывать заголовок окна

echo -ne "\e]0;MYTITLE\a" ; sleep 2
Другие вопросы по тегам