Cambia i titoli delle finestre e delle schede iTerm2 in zsh


50

Voglio etichettare le schede della finestra delle sessioni terminali. Sto usando lo zshell in iterm2 su OSX. È possibile cambiare l'etichetta di una scheda della finestra in modo dinamico nel terminale?

Risposte:


48

È possibile inserire quanto segue zshper impostare il titolo della finestra di iTerm2:

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

Se si desidera automatizzare ciò per inserire ad esempio l'ora corrente o la directory di lavoro, modificare i zshfile di configurazione per impostare il titolo nella precmd()funzione su ad es $PWD.

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

Puoi leggere la precmdfunzione nella man zshmiscsezione SPECIAL FUNCTIONS.

inserisci qui la descrizione dell'immagine


3
quando eseguo il comando echo -ne "\ e] 1; questo è il titolo \ a" il titolo della scheda non cambia. C'è un'impostazione che devo modificare in iterm2?
bneil

15
Capito. Devo deselezionare tutte le opzioni per i titoli delle finestre e delle schede nella sezione aspetto -> preferenze-> aspetto. e nel .zshrc devo decommentare / aggiungere export DISABLE_AUTO_TITLE = "true" Grazie @Daniel Beck
bneil

3
Devi anche impostare Profiles > Terminal > Terminal Emulation > Terminal may set tab/window title.
vaughan,

1
QUESTO NON FUNZIONA (almeno per me) NELLA ULTIMA VERSIONE DI iTerm (3.3.0)
iconoclast

E non funziona per me sull'ultima versione stabile di iTerm2(3.2.9)
jalanb

45

Cosa funziona per me:

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

Se usi Mac OSX e iTerm, iTerm2 ::

  • iTerm → Preferenze → Aspetto → Titoli di finestre e schede → deseleziona tutto

Se si utilizza zsh, potrebbe essere necessario modificare le impostazioni. Le tue impostazioni sono in genere nel file ~/.zshrc. Vuoi aggiungere o modificare le tue impostazioni per assicurarti che questa riga esista:

DISABLE_AUTO_TITLE="true"

2
Funziona ancora dal 28/02/2018.
salep

38

Uno dei vantaggi dell'utilizzo di iTerm è la possibilità di impostare separatamente il titolo della finestra e il titolo della scheda: esempio di utilizzo separato del titolo della scheda e della finestra

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

In questo modo puoi immediatamente vedere a quale host sei connesso in quale finestra e il titolo della finestra per ogni scheda mostra user & CWD.


2
Ho appena notato che la versione Terminal.app in OS X Lion supporta anche questo.
Orangenhain,

domanda stupida: aggiungi questo codice a .bashrc, giusto?
qazwsx,

Sembra anche che (in iTerm2 Build 1.0.0.20140629) fino a quando non cambi il titolo della finestra ... tiene traccia del titolo della scheda, non importa quale. Sono sicuro che sia un'ambientazione. Una volta modificato il titolo della finestra (2), non tiene più traccia del titolo della scheda.
Mei,

Ho modificato la funzione sopra per includere la riga DISABLE_AUTO_TITLE="true"che ha risolto il problema e in questo modo se non imposto il titolo, ottengo ancora la funzione automatica del titolo
user15681

5

A precmdfa il trucco. Tuttavia, alcuni temi oh-my-zsh si scherzano con il titolo della finestra. Impostare PR_TITLEBARsu una stringa vuota per risolverlo.

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

Consiglierei anche di giocare con le impostazioni della scheda di iTerm2 in Preferenze -> Aspetto.



2

Nessuna delle risposte sembrava funzionare per me, probabilmente per la versione iterm2 (3.3.3).

L'ho scoperto: https://gist.github.com/phette23/5270658#gistcomment-3020766

In sostanza, puoi fare tutto ciò che viene detto in tutte le altre risposte, ma devi anche impostare Preferences > Profiles > General > Title -> Name (Job)

Questo ha funzionato per me.


Questo non è sotto la Generalscheda, è sotto la Profilesscheda
Falmarri,

Giusto. Mi mancava > Profilesquello. Colpa mia. Aggiornato.
Nuno Gonçalves,

1

La risposta accettata ha funzionato per me per molto tempo ma ora è interrotta nell'ultima versione di iTerm2. Una soluzione alternativa che ho trovato è stata quella di abilitare l'API Python e creare uno script che imposta il nome della scheda in questo modo:

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

Salvato come "tab_name.py", quindi invocato con:

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

Non è bello o elegante come la risposta accettata, ma funziona.


-2

iTerm -> Preferenze -> Aspetto -> Titoli di finestre e schede -> seleziona Mostra l'opzione nome profilo


1
Benvenuto in Super User! Su questo sito di domande e risposte cerchiamo di fornire buone risposte alle domande poste dalle persone. Parte della stesura di una buona risposta è fornire il contesto per la soluzione proposta. Modifica la tua risposta e spiega perché la soluzione funziona e cosa, nello specifico , funziona.
cascer1
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.