Как изменить заголовок мятного окна?
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'
Поместите это в.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