Zmień tytuł okna i karty iTerm2 w Zsh


50

Chcę opisać zakładki okna sesji terminalowych. Używam zshell w iterm2 na OSX. Czy w terminalu można dynamicznie zmieniać etykietę karty okna?

Odpowiedzi:


48

Możesz wprowadzić następujące dane, zshaby ustawić tytuł okna iTerm2:

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

Jeśli chcesz zautomatyzować wstawianie np. Aktualnego czasu lub katalogu roboczego, edytuj zshpliki konfiguracyjne, aby ustawić tytuł w precmd()funkcji np $PWD.

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

Możesz przeczytać o precmdfunkcji w man zshmiscsekcji SPECIAL FUNCTIONS.

wprowadź opis zdjęcia tutaj


3
kiedy wykonuję polecenie echo -ne "\ e] 1; to jest tytuł \ a" tytuł karty nie zmienia się. Czy istnieje ustawienie, które muszę zmienić w iterm2?
bneil

15
Domyśliłam się. Muszę odznaczyć wszystkie opcje tytułów okien i kart w sekcji iterm-> preferencje-> wygląd. i w .zshrc muszę odkomentować / dodać eksport DISABLE_AUTO_TITLE = "true" Dzięki @Daniel Beck
bneil

3
Musisz także ustawić Profiles > Terminal > Terminal Emulation > Terminal may set tab/window title.
vaughan

1
TO NIE DZIAŁA (przynajmniej dla mnie) W NAJNOWSZEJ WERSJI iTerm (3.3.0)
iconoclast

I nie działa dla mnie na najnowszej stabilnej wersji iTerm2(3.2.9)
jalanb

45

Co dla mnie działa:

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

Jeśli używasz Mac OSX i iTerm, iTerm2 ::

  • iTerm → Preferencje → Wygląd → Okno i tytuły kart → odznacz wszystko

Jeśli korzystasz z zsh, może być konieczna edycja ustawień. Twoje ustawienia są zwykle w pliku ~/.zshrc. Chcesz dodać lub edytować ustawienia, aby upewnić się, że ten wiersz istnieje:

DISABLE_AUTO_TITLE="true"

2
Nadal działa od 28.02.2018.
salep

38

Jedną z udogodnień korzystania z iTerm jest możliwość osobnego ustawienia tytułu okna i tytułu karty: przykład użycia tytułu karty i okna osobno

# $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 $@; }

W ten sposób możesz od razu zobaczyć, z którym hostem jesteś połączony w jakim oknie, a tytuł okna dla każdej karty pokazuje użytkownika i CWD.


2
Właśnie zauważyłem, że wersja Terminal.app w OS X Lion również to obsługuje.
Orangenhain

głupie pytanie: dodajesz ten kod .bashrc, prawda?
qazwsx

Wydaje się również, że (w iTerm2 Build 1.0.0.20140629), dopóki nie zmienisz tytułu okna ... śledzi tytuł karty, bez względu na wszystko. Jestem pewien, że to ustawienie. Po zmianie tytułu okna (2) nie śledzi on już tytułu karty.
Mei

Zmodyfikowałem powyższą funkcję, tak aby zawierała wiersz, DISABLE_AUTO_TITLE="true"który rozwiązał problem. W ten sposób, jeśli nie
ustawię

5

A precmdzałatwia sprawę. Jednak niektóre motywy oh-my-zsh mieszają się z tytułem okna. Ustaw PR_TITLEBARpusty ciąg, aby go naprawić.

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

Poleciłbym również zabawę z ustawieniami zakładki iTerm2 w Preferencjach -> Wygląd.



2

Żadna z odpowiedzi nie działała dla mnie, prawdopodobnie dla wersji iterm2 (3.3.3).

Znalazłem to: https://gist.github.com/phette23/5270658#gistcomment-3020766

Zasadniczo możesz zrobić wszystko, co powiedziano we wszystkich innych odpowiedziach, ale musisz także ustawić Preferences > Profiles > General > Title -> Name (Job)

To zadziałało dla mnie.


To nie jest pod Generalzakładką, jest pod Profileszakładką
Falmarri

Dobrze. Brakowało mi tego > Profiles. Mój błąd. Zaktualizowano
Nuno Gonçalves

1

Przyjęta odpowiedź działała dla mnie od dłuższego czasu, ale jest teraz zepsuta w najnowszej wersji iTerm2. Obejściem, które znalazłem, było włączenie API Pythona i utworzenie skryptu, który ustawia nazwę karty tak:

#!/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)

Zapisano jako „tab_name.py”, a następnie wywołano za pomocą:

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

Nie jest tak ładny ani elegancki jak zaakceptowana odpowiedź, ale działa.


-2

iTerm -> Preferencje -> Wygląd -> Tytuły okien i kart -> zaznacz opcję Pokaż nazwę profilu


1
Witamy w Super User! Na tej stronie pytań i odpowiedzi staramy się udzielać dobrych odpowiedzi na pytania, które zadają ludzie. Częścią napisania dobrej odpowiedzi jest zapewnienie kontekstu dla proponowanego rozwiązania. Edytuj swoją odpowiedź i wyjaśnij, dlaczego Twoje rozwiązanie działa, a co konkretnie działa.
cascer1
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.