Ändern Sie die iTerm2-Fenster- und Tabulatortitel in zsh

50

Ich möchte die Fensterregisterkarten von Terminalsitzungen beschriften. Ich verwende die zshell in iterm2 unter OSX. Ist es möglich, die Beschriftung einer Fensterregisterkarte im Terminal dynamisch zu ändern?

bneil
quelle

Antworten:

48

Sie können Folgendes eingeben zsh, um den Fenstertitel von iTerm2 festzulegen:

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

Wenn Sie dies automatisieren möchten, um z. B. die aktuelle Uhrzeit oder das aktuelle Arbeitsverzeichnis einzufügen, bearbeiten Sie Ihre zshKonfigurationsdateien, um den Titel in der precmd()Funktion auf z $PWD.

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

Über die precmdFunktion können Sie im man zshmiscAbschnitt nachlesen SPECIAL FUNCTIONS.

Bildbeschreibung hier eingeben

Daniel Beck
quelle
3
Wenn ich den Befehl echo -ne "\ e] 1 ausführe; dies ist der Titel \ a", ändert sich der Tabulatortitel nicht. Gibt es eine Einstellung, die ich in iterm2 ändern muss?
bneil
15
Herausgefunden. Ich muss alle Optionen für Fenster- und Tabulatortitel im Abschnitt iterm-> Einstellungen-> Darstellung deaktivieren. und in der .zshrc muss ich den export auskommentieren / hinzufügen DISABLE_AUTO_TITLE = "true" Danke @Daniel Beck
bneil
3
Sie müssen auch einstellen Profiles > Terminal > Terminal Emulation > Terminal may set tab/window title.
Vaughan
1
Dies funktioniert nicht (zumindest für mich) in der neuesten Version von iTerm (3.3.0)
Iconoclast
Und funktioniert nicht für mich auf der neuesten stabilen Version von iTerm2(3.2.9)
Jalanb
45

Was funktioniert bei mir:

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

Wenn Sie Mac OSX und iTerm verwenden, ist iTerm2 ::

  • iTerm → Einstellungen → Darstellung → Fenster- und Tabulatortitel → Alle deaktivieren

Wenn Sie zsh verwenden, müssen Sie möglicherweise Ihre Einstellungen bearbeiten. Ihre Einstellungen befinden sich normalerweise in der Datei ~/.zshrc. Sie möchten Ihre Einstellungen hinzufügen oder bearbeiten, um sicherzustellen, dass diese Zeile vorhanden ist:

DISABLE_AUTO_TITLE="true"
joelparkerhenderson
quelle
2
Es funktioniert noch ab dem 28.02.2008.
Salep
38

Eine der Vorteile von iTerm ist die Möglichkeit, Fenstertitel und Tabulatortitel separat festzulegen: Beispiel für die separate Verwendung von Tab- und Fenstertiteln

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

Auf diese Weise können Sie sofort sehen, mit welchem ​​Host Sie in welchem ​​Fenster verbunden sind, und der Fenstertitel für jede Registerkarte zeigt Benutzer und CWD an.

Orangenhain
quelle
2
Mir ist gerade aufgefallen, dass die Terminal.app-Version in OS X Lion dies ebenfalls unterstützt.
Orangenhain
dumme frage: du fügst diesen code hinzu .bashrc, oder?
qazwsx
Außerdem wird angezeigt, dass (in iTerm2 Build 1.0.0.20140629), bis Sie den Fenstertitel ändern ... es den Registerkartentitel verfolgt, egal was passiert. Ich bin sicher, das ist eine Einstellung. Sobald der Fenstertitel geändert wurde (2), wird der Titel der Registerkarte nicht mehr verfolgt.
Mei
Ich habe die obige Funktion geändert, um die Zeile DISABLE_AUTO_TITLE="true"
einzuschließen
5

A precmdmacht den Trick. Einige oh-my-zsh-Themen spielen jedoch mit dem Fenstertitel herum. Legen Sie PR_TITLEBAReine leere Zeichenfolge fest, um das Problem zu beheben.

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

Ich würde auch empfehlen, mit den Registerkarteneinstellungen von iTerm2 in den Einstellungen -> Darstellung herumzuspielen.

Chris Gaudreau
quelle
2

Hinzufügen export PROMPT_COMMAND='echo -ne "\033]0;$PWD\007"'in ~/.bash_profilefür mich gearbeitet.

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

michalzuber
quelle
2
Die Frage sagt ausdrücklich zsh, nicht bash.
Blockloop
Gut, es funktioniert in Bash!
Ich mingzhi
2

Keine der Antworten schien für mich zu funktionieren, wahrscheinlich für die iterm2-Version (3.3.3).

Das habe ich herausgefunden: https://gist.github.com/phette23/5270658#gistcomment-3020766

Grundsätzlich können Sie tun, was in allen anderen Antworten gesagt wird, müssen aber auch einstellen Preferences > Profiles > General > Title -> Name (Job)

Das hat bei mir funktioniert.

Nuno Gonçalves
quelle
Dies ist nicht unter der GeneralRegisterkarte, es ist unter der ProfilesRegisterkarte
Falmarri
Richtig. Den habe ich verpasst > Profiles. Mein Fehler. Aktualisiert.
Nuno Gonçalves
1

Die akzeptierte Antwort hat lange für mich funktioniert, ist aber jetzt in der neuesten Version von iTerm2 defekt. Eine Problemumgehung bestand darin, die Python-API zu aktivieren und ein Skript zu erstellen, das den Registerkartennamen folgendermaßen festlegt:

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

Gespeichert als "tab_name.py", dann aufgerufen mit:

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

Es ist nicht annähernd so schön oder elegant wie die akzeptierte Antwort, aber es funktioniert.

Ian E
quelle
-2

iTerm -> Einstellungen -> Darstellung -> Fenster- und Tabulatortitel -> Aktivieren Sie die Option Profilnamen anzeigen

John Sam
quelle
1
Willkommen bei Super User! Auf dieser Q & A-Site versuchen wir, gute Antworten auf Fragen zu geben , die von Menschen gestellt werden. Zum Schreiben einer guten Antwort gehört es, den Kontext für die vorgeschlagene Lösung bereitzustellen. Bitte bearbeiten Sie Ihre Antwort und erklären Sie, warum Ihre Lösung funktioniert und was sie konkret bewirkt.
cascer1