Changer les titres de la fenêtre et des onglets iTerm2 dans zsh

50

Je veux étiqueter les onglets de fenêtre des sessions de terminal. J'utilise le zshell dans iterm2 sur OSX. Est-il possible de changer le libellé d'un onglet de fenêtre de manière dynamique dans le terminal?

bneil
la source

Réponses:

48

Vous pouvez entrer ce qui suit zshpour définir le titre de la fenêtre de iTerm2:

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

Si vous voulez automatiser cela pour insérer, par exemple, l'heure actuelle ou le répertoire de travail, éditez vos zshfichiers de configuration pour définir le titre de la precmd()fonction sur, par exemple $PWD.

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

Vous pouvez lire sur la precmdfonction man zshmiscdans la section SPECIAL FUNCTIONS.

entrez la description de l'image ici

Daniel Beck
la source
3
quand j'exécute la commande echo -ne "\ e] 1; c'est le titre \ a" le titre de l'onglet ne change pas. Dois-je modifier un paramètre dans iterm2?
Bneil
15
Deviner. Je dois désélectionner toutes les options pour les titres de fenêtre et d’onglet dans la section iterm-> préférences-> apparence. et dans le .zshrc, je dois dégager le commentaire / ajouter l’exportation DISABLE_AUTO_TITLE = "true" Merci @Daniel Beck
bneil le
3
Vous devez également définir Profiles > Terminal > Terminal Emulation > Terminal may set tab/window title.
Vaughan
1
CECI NE FONCTIONNE PAS (du moins pour moi) DANS LA DERNIÈRE VERSION DE iTerm (3.3.0)
iconoclaste
Et ne fonctionne pas pour moi sur la dernière version stable de iTerm2(3.2.9)
jalanb
45

Ce qui fonctionne pour moi:

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

Si vous utilisez Mac OSX et iTerm, iTerm2 ::

  • iTerm → Préférences → Apparence → Titres de fenêtre et d'onglet → Tout désélectionner

Si vous utilisez zsh, vous devrez peut-être modifier vos paramètres. Vos paramètres sont généralement dans le fichier ~/.zshrc. Vous souhaitez ajouter ou modifier vos paramètres pour vous assurer que cette ligne existe:

DISABLE_AUTO_TITLE="true"
joelparkerhenderson
la source
2
Il fonctionne toujours à partir du 28/02/2018.
Salep
38

ITerm offre l’un des avantages de la possibilité de définir séparément le titre de la fenêtre et le titre de l’onglet: exemple d'utilisation du titre de l'onglet et de la fenêtre séparément

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

De cette façon, vous pouvez voir immédiatement à quel hôte vous êtes connecté dans quelle fenêtre, et le titre de la fenêtre pour chaque onglet indique l'utilisateur et CWD.

Orangenhain
la source
2
Je viens de remarquer que la version Terminal.app sous OS X Lion prend également en charge cette fonctionnalité.
Orangenhain
question idiote: vous ajoutez ce code à .bashrc, non?
Qazwsx
Il apparaît également que (dans iTerm2 Build 1.0.0.20140629) jusqu’à ce que vous changiez le titre de la fenêtre ... il suit le titre de l’onglet, quoi qu’il en soit. Je suis sûr que c'est un paramètre. Une fois le titre de la fenêtre modifié (2), le titre de l'onglet ne sera plus suivi.
Mei
J'ai modifié la fonction ci-dessus pour inclure la ligne DISABLE_AUTO_TITLE="true"qui corrigeait le problème. Ainsi, si je ne définis pas le titre, la fonctionnalité de titre automatique
persiste
5

A precmdfait le tour. Cependant, certains thèmes oh-my-zsh dérangent le titre de la fenêtre. Définissez PR_TITLEBARune chaîne vide pour résoudre le problème.

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

Je recommanderais également de jouer avec les paramètres d'onglet de iTerm2 dans Préférences -> Apparence.

Chris Gaudreau
la source
2

Aucune des réponses ne semblait fonctionner pour moi, probablement pour la version iterm2 (3.3.3).

J'ai découvert ceci: https://gist.github.com/phette23/5270658#gistcomment-3020766

Essentiellement, vous pouvez faire tout ce qui est dit dans toutes les autres réponses, mais vous devez aussi définir Preferences > Profiles > General > Title -> Name (Job)

Cela a fonctionné pour moi.

Nuno Gonçalves
la source
Ce n'est pas sous l' Generalonglet, c'est sous l' Profilesonglet
Falmarri
Droite. J'ai raté celui- > Profileslà. Ma faute. Mis à jour.
Nuno Gonçalves
1

La réponse acceptée a fonctionné pour moi pendant longtemps, mais est maintenant cassée dans la dernière version d'iTerm2. Une solution de contournement que j'ai trouvée consistait à activer l'API Python et à créer un script qui définit le nom de l'onglet comme suit:

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

Enregistré sous "nom_table.py", puis appelé avec:

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

Ce n'est pas aussi beau ni aussi élégant que la réponse acceptée, mais ça marche.

Ian E
la source
-2

iTerm -> Préférences -> Apparence -> Titres de fenêtre et d'onglet -> Cochez l'option Afficher le nom du profil

john sam
la source
1
Bienvenue sur Super User! Sur ce site de questions- réponses, nous essayons de fournir de bonnes réponses aux questions des gens. Une bonne réponse consiste en partie à fournir un contexte à la solution proposée. S'il vous plaît modifier votre réponse et expliquer pourquoi votre solution fonctionne, et ce, en particulier , il le fait.
cascer1