Cambie los títulos de ventanas y pestañas iTerm2 en zsh

50

Quiero etiquetar las pestañas de las ventanas de las sesiones de terminal. Estoy usando el zshell en iterm2 en OSX. ¿Es posible cambiar la etiqueta de una pestaña de ventana dinámicamente en el terminal?

bneil
fuente

Respuestas:

48

Puede ingresar lo siguiente zshpara configurar el título de la ventana de iTerm2:

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

Si desea automatizar eso para insertar, por ejemplo, la hora actual o el directorio de trabajo, edite sus zsharchivos de configuración para configurar el título en la precmd()función, por ejemplo $PWD.

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

Puede leer sobre la precmdfunción man zshmiscen la sección SPECIAL FUNCTIONS.

ingrese la descripción de la imagen aquí

Daniel Beck
fuente
3
cuando ejecuto el comando echo -ne "\ e] 1; este es el título \ a" el título de la pestaña no cambia. ¿Hay alguna configuración que deba cambiar en iterm2?
bneil
15
Lo averigué. Tengo que anular la selección de todas las opciones para los títulos de ventanas y pestañas en la sección iterm-> preferencias-> apariencia. y en el .zshrc tengo que descomentar / agregar exportación DISABLE_AUTO_TITLE = "true" Gracias @Daniel Beck
bneil
3
También necesitas configurar Profiles > Terminal > Terminal Emulation > Terminal may set tab/window title.
Vaughan
1
ESTO NO FUNCIONA (al menos para mí) EN LA ÚLTIMA VERSIÓN DE iTerm (3.3.0)
iconoclasta
Y no funciona para mí en la última versión estable de iTerm2(3.2.9)
jalanb
45

Lo que funciona para mi:

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

Si usa Mac OSX e iTerm, iTerm2 ::

  • iTerm → Preferencias → Apariencia → Títulos de ventanas y pestañas → desmarque todo

Si usa zsh, es posible que deba editar su configuración. Su configuración suele estar en el archivo ~/.zshrc. Desea agregar o editar su configuración para asegurarse de que esta línea existe:

DISABLE_AUTO_TITLE="true"
joelparkerhenderson
fuente
2
Todavía funciona a partir del 28/02/2018.
salep
38

Una de las comodidades de usar iTerm es la posibilidad de configurar el título de la ventana y el título de la pestaña por separado: ejemplo de uso de título de pestaña y ventana por separado

# $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 esta manera, puede ver de inmediato a qué host está conectado en qué ventana, y el título de la ventana para cada pestaña muestra usuario y CWD.

Orangenhain
fuente
2
Acabo de notar que la versión Terminal.app en OS X Lion también es compatible con esto.
Orangenhain
pregunta tonta: agregas estos códigos a .bashrc, ¿verdad?
qazwsx
También parece que (en iTerm2 Build 1.0.0.20140629) hasta que cambie el título de la ventana ... rastrea el título de la pestaña, pase lo que pase. Estoy seguro de que es un escenario. Una vez que se cambia el título de la ventana (2), ya no sigue el título de la pestaña.
Mei
Modifiqué la función anterior para incluir la línea DISABLE_AUTO_TITLE="true"que solucionó el problema y de esta manera si no configuro el título, todavía obtengo la función de título automático
usuario15681
5

A precmdhace el truco. Sin embargo, algunos temas de oh-my-zsh juegan con el título de la ventana. Establecer PR_TITLEBARen una cadena vacía para arreglarlo.

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

También recomendaría jugar con la configuración de pestañas de iTerm2 en Preferencias -> Apariencia.

Chris Gaudreau
fuente
2

Agregar export PROMPT_COMMAND='echo -ne "\033]0;$PWD\007"'a ~/.bash_profiletrabajado para mí.

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

michalzuber
fuente
2
La pregunta específicamente dice zsh, no bash.
blockloop
Bien, funciona en bash!
Yo mingzhi
2

Ninguna de las respuestas parecía funcionar para mí, probablemente para la versión iterm2 (3.3.3).

Descubrí esto: https://gist.github.com/phette23/5270658#gistcomment-3020766

Esencialmente, puede hacer lo que se diga en todas las demás respuestas, pero también debe establecer Preferences > Profiles > General > Title -> Name (Job)

Esto funcionó para mí.

Nuno Gonçalves
fuente
Esto no está debajo de la Generalpestaña, está debajo de la Profilespestaña
Falmarri
Derecha. Extrañé el > Profilesuno. Culpa mía. Actualizado.
Nuno Gonçalves
1

La respuesta aceptada me ha funcionado durante mucho tiempo, pero ahora está rota en la última versión de iTerm2. Una solución que encontré fue habilitar la API de Python y crear un script que establezca el nombre de la pestaña de esta manera:

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

Guardado como "tab_name.py", luego invocado con:

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

No es tan agradable o elegante como la respuesta aceptada, pero funciona.

Ian E
fuente
-2

iTerm -> Preferencias -> Apariencia -> Títulos de ventanas y pestañas -> marque la opción Mostrar nombre de perfil

John sam
fuente
1
¡Bienvenido a Super User! En este sitio de preguntas y respuestas tratamos de proporcionar buenas respuestas a las preguntas que las personas hacen. Parte de escribir una buena respuesta es proporcionar contexto para la solución propuesta. Edite su respuesta y explique por qué funciona su solución y qué hace específicamente .
cascer1