Як змінити назву м'ятного вікна?


35

MinTTY - це нова консоль Cygwin за замовчуванням.

Що таке команда оболонки (що я можу вставити у .bashrc, а ще краще, у .zshrc), щоб змінити назву вікна MinTTY?

Я хотів би, щоб заголовок цього вікна був шлях до поточного каталогу та оновлення його, коли я перемикаю каталоги всередині консолі.


1
Параметр підказки Cygwin за замовчуванням (тобто $PS1) вже містить контрольну послідовність, яка встановлює назву вікна на користувачеві @ 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

Відповіді:


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) задає назву вікна щоразу, коли з'являється запит.

Рішення

Додайте ці рядки до своїх, .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
Чудова робота, вирішення проблеми PS1, з якою стикається більшість користувачів із налаштуваннями cygwin за замовчуванням.
Марку К.

3
Це слід було б прийняти як відповідь, оскільки воно прекрасно працює на відміну від найвищої відповіді
Тапан Чандра

1
Я люблю відповідь, яку я можу просто вирізати та приклеїти. А також чітко пояснює, у чому полягає насправді проблема.
Даррел Лі

ці функції для мене добре працюють! пам'ятайте, що для того, щоб cygwin перезавантажив ваш .bashrc, вам доведеться перезапустити cygwin, АБО пишіть source ~/.bashrc- інакше cygwin все ще буде працювати з старою версією bashrc, яка була на диску при запуску cygwin. - перевірено Cygwin version 2.8.1 (64 bit)- версія 2017 року
hanshenrik

Чому цю відповідь так і не прийняли?
асміт

26

Ви можете змінити це за допомогою послідовності керування xterm для цього, наприклад:

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

Перейдіть за посиланням: http://code.google.com/p/mintty/isissue/detail?id=241


4
Не впливає на мене: / Може, ця хитрість порушилася за останні 6 місяців?
voltrevo

Ви використовуєте bash?
Джеймс Фу

2
Це не має ефекту при видачі зсередини екрана.
Ярослав Рахматуллін

10
Можливо, проблема полягає в тому, що командний рядок вже налаштований для оновлення заголовка (для exmaple з поточним контуром), тому команда працює, але її раптом перекриває запит.
Андреа Полчі

2
Щоб перевірити це "echo -ne" \ e] 0; Назва \ a "&& cat". Цей спосіб запобігає негайному скиненню підказки. (Якщо це працює, ви можете змінити PS1 у своєму профілі, як описано в інших відповідях)
Кертіс Яллоп,

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 (звичайно, за винятком речей цигарки): 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
Насолоджуйтесь

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 \ $ '
фі

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(){}.


1

Просто хотів поділитися своїм рішенням з цим, оскільки я використовую м'ятний для виконання сценарію.

Мій ярликовий м'ятик налаштований так:

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

Сценарій connect.sh, про який я писав, який викликається в ярлику вище, запропонує мені сервер, до якого я хочу підключитися, і виконати функцію settitle, визначену в сценарії.

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

Чому ви визначаєте функцію, titleякщо не використовуєте її?
pabouk

0

спробуйте додати це у .bash_profile

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

Це працює для мене.


2
Питання полягає у зміні заголовка вікна, а не в командному рядку.
kenorb

1
будь ласка, додайте це у .bash_profile, все гаразд для зміни назви, дякую!
netawater
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.