Изменить заголовки окна и вкладки iTerm2 в Zsh

50

Я хочу пометить вкладки окна терминальных сессий. Я использую zshell в iterm2 на OSX. Можно ли динамически изменить метку вкладки окна в терминале?

bneil
источник

Ответы:

48

Вы можете ввести следующее, zshчтобы установить заголовок окна iTerm2:

echo -ne "\e]1;this is the title\a"

Если вы хотите автоматизировать это для вставки, например, текущего времени или рабочего каталога, отредактируйте ваши zshфайлы конфигурации, чтобы установить заголовок в precmd()функции, например $PWD.

echo -ne "\e]1;$PWD\a"

Вы можете прочитать о precmdфункции в man zshmiscразделе SPECIAL FUNCTIONS.

введите описание изображения здесь

Даниэль Бек
источник
3
когда я выполняю команду echo -ne "\ e] 1; это заголовок \ a" заголовок вкладки не изменяется. Есть ли настройка, которую я должен изменить в iterm2?
bneil
15
Догадаться. Я должен отменить выбор всех параметров для заголовков окон и вкладок в разделе iterm-> Preferences-> Appearance. и в .zshrc я должен раскомментировать / добавить экспорт DISABLE_AUTO_TITLE = "true" Спасибо @Daniel Beck
bneil
3
Вы также должны установить Profiles > Terminal > Terminal Emulation > Terminal may set tab/window title.
Вон
1
ЭТО НЕ РАБОТАЕТ (по крайней мере для меня) В ПОСЛЕДНЕЙ ВЕРСИИ iTerm (3.3.0)
iconoclast
И у меня не работает последняя стабильная версия iTerm2(3.2.9)
jalanb
45

Что работает для меня:

echo -e "\033];this is the title\007"

Если вы используете Mac OSX и iTerm, iTerm2 ::

  • iTerm → Настройки → Внешний вид → Заголовки окон и вкладок → снять все

Если вы используете zsh, то вам может потребоваться изменить настройки. Ваши настройки обычно находятся в файле ~/.zshrc. Вы хотите добавить или изменить настройки, чтобы убедиться, что эта строка существует:

DISABLE_AUTO_TITLE="true"
joelparkerhenderson
источник
2
Это все еще работает на 28.02.2008.
Salep
38

Одним из преимуществ использования iTerm является возможность отдельно устанавливать заголовок окна и заголовок вкладки: пример использования вкладки и заголовка окна отдельно

# $1 = type; 0 - both, 1 - tab, 2 - title
# rest = text
setTerminalText () {
    # echo works in bash & zsh
    local mode=$1 ; shift
    echo -ne "\033]$mode;$@\007"
}
stt_both  () { setTerminalText 0 $@; }
stt_tab   () { setTerminalText 1 $@; }
stt_title () { setTerminalText 2 $@; }

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

Orangenhain
источник
2
Я только что заметил, что версия Terminal.app в OS X Lion также поддерживает это.
Orangenhain
глупый вопрос: вы добавляете этот код .bashrc, верно?
qazwsx
Также появляется, что (в iTerm2 Build 1.0.0.20140629), пока вы не измените заголовок окна ... он отслеживает заголовок вкладки, несмотря ни на что. Я уверен, что это настройка. После изменения заголовка окна (2) оно больше не отслеживает заголовок вкладки.
Мэй
Я изменил функцию выше, чтобы включить строку, DISABLE_AUTO_TITLE="true"которая исправила проблему, и таким образом, если я не установил заголовок, я все еще получаю функцию автоматического заголовка
user15681
5

А precmdделает трюк. Тем не менее, некоторые темы oh-my-zsh возятся с заголовком окна. Установите PR_TITLEBARпустую строку, чтобы исправить это.

set-window-title() {
  # /Users/clessg/projects/dotfiles -> ~/p/dotfiles
  window_title="\e]0;${${PWD/#"$HOME"/~}/projects/p}\a"
  echo -ne "$window_title"
}

PR_TITLEBAR=''
set-window-title
add-zsh-hook precmd set-window-title

Я бы также порекомендовал поиграть с настройками вкладок iTerm2 в Настройки -> Внешний вид.

Крис Годро
источник
2

Добавление export PROMPT_COMMAND='echo -ne "\033]0;$PWD\007"'в ~/.bash_profileсработало для меня.

https://apple.stackexchange.com/a/90737/49605

michalzuber
источник
2
На вопрос конкретно говорит зш, а не баш.
blockloop
Хорошо, это работает в Bash!
Л Минчжи
2

Мне кажется, что ни один из ответов не работает, возможно, для версии iterm2 (3.3.3).

Я узнал об этом: https://gist.github.com/phette23/5270658#gistcomment-3020766

По сути, вы можете делать то, что сказано во всех других ответах, но также необходимо установить Preferences > Profiles > General > Title -> Name (Job)

Это сработало для меня.

Нуно Гонсалвеш
источник
Это не на Generalвкладке, это на Profilesвкладке
Фалмарри
Правильно. Я пропустил > Profilesодин. Виноват. Обновлено.
Нуно Гонсалвеш
1

Принятый ответ работал для меня в течение длительного времени, но теперь он не работает в последней версии iTerm2. Обходной путь, который я нашел, состоял в том, чтобы включить Python API и создать скрипт, который устанавливает имя вкладки следующим образом:

#!/usr/bin/env python3.7
import argparse

import iterm2

def get_args():
    parser = argparse.ArgumentParser(description='Set the tab name')
    parser.add_argument('name')
    return parser.parse_args()

ARGS = get_args()

async def main(connection):
    app = await iterm2.async_get_app(connection)
    window = app.current_terminal_window
    if window is not None:
        tab = window.current_tab
        await tab.async_set_title(ARGS.name)
    else:
        # You can view this message in the script console.
        print("No current window")

iterm2.run_until_complete(main)

Сохраняется как "tab_name.py", затем вызывается с помощью:

~/Library/ApplicationSupport/iTerm2/iterm2env/versions/*/bin/python3 ~/Library/ApplicationSupport/iTerm2/Scripts/tab_name.py "new tab name"

Это не так красиво и элегантно, как принятый ответ, но это работает.

Ян Е
источник
-2

iTerm -> Настройки -> Внешний вид -> Заголовки окон и вкладок -> отметьте опцию Показать имя профиля

Джон Сэм
источник
1
Добро пожаловать в Супер пользователя! На этом сайте Q & A мы стараемся дать хорошие ответы на вопросы, которые задают люди. Частью написания хорошего ответа является предоставление контекста для предлагаемого решения. Пожалуйста, отредактируйте свой ответ и объясните, почему ваше решение работает и что конкретно оно делает.
cascer1