Змініть заголовки вікон та вкладок iTerm2 в zsh


50

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

Відповіді:


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>> izgled. і в .zshrc я повинен розкоментувати / надбудову експорту DISABLE_AUTO_TITLE = «справжнє» Спасибі @Daniel Бек
bneil

3
Вам також потрібно встановити Profiles > Terminal > Terminal Emulation > Terminal may set tab/window title.
воган

1
ЦЕ НЕ ПРАЦЮЄ (для мене, принаймні, для мене) В ОСТАННІЙ ВЕРСІЇ iTerm (3.3.0)
іконоборство

І не працює для мене остання стабільна версія 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"

2
Він все ще працює з 28.02.2018.
салеп

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.


2
Щойно я помітив, що версія Terminal.app в OS X Lion підтримує це.
Orangenhain

нерозумне запитання: ви додаєте цей код .bashrc, правда?
qazwsx

Також з'являється, що (в iTerm2 Build 1.0.0.20140629), поки ви не зміните заголовок вікна ..., він відстежує назву вкладки, незалежно від того. Я впевнений, що це налаштування. Після зміни заголовка вікна (2) він більше не відстежує назву вкладки.
Май

Я змінив функцію вище, щоб включити рядок, DISABLE_AUTO_TITLE="true"який вирішив проблему, і таким чином, якщо я не встановити заголовок, я все одно отримаю функцію автоматичного заголовка
user15681

5

A precmdробить трюк. Однак деякі теми о-мі-зш псуються із заголовком вікна. Встановіть 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

Жодна з відповідей, здається, не працює для мене, ймовірно, для версії iterm2 (3.3.3).

Я дізнався це: https://gist.github.com/phette23/5270658#gistcomment-3020766

По суті, ви можете робити все, що сказано в усіх інших відповідях, але також потрібно встановити Preferences > Profiles > General > Title -> Name (Job)

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


Це не під Generalвкладкою, це під Profilesвкладкою
Falmarri

Правильно. Я пропустив > Profilesодного. Моє ліжко. Оновлено.
Нуно Гонсалвес

1

Прийнята відповідь працювала для мене тривалий час, але зараз вона порушена в останній версії iTerm2. Я знайшов вирішення, щоб увімкнути API Python та створити скрипт, який встановлює назву вкладки так:

#!/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
Ласкаво просимо до Супер Користувача! На цьому веб-сайті з питань питань ми намагаємось дати хороші відповіді на питання, які задають люди. Частина написання гарної відповіді - це надання контексту для запропонованого рішення. Будь ласка, відредагуйте свою відповідь та поясніть, чому працює ваше рішення, і що конкретно воно робить.
cascer1
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.