Alterar os títulos das janelas e guias do iTerm2 no zsh


50

Quero rotular as guias da janela das sessões do terminal. Estou usando o zshell no iterm2 no OSX. É possível alterar dinamicamente o rótulo de uma guia da janela no terminal?

Respostas:


48

Você pode inserir o seguinte em zshpara definir o título da janela do iTerm2:

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

Se você deseja automatizar isso para inserir, por exemplo, a hora atual ou o diretório de trabalho, edite seus zsharquivos de configuração para definir o título na precmd()função como, por exemplo $PWD.

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

Você pode ler sobre a precmdfunção em man zshmiscna seção SPECIAL FUNCTIONS.

insira a descrição da imagem aqui


3
quando executo o comando echo -ne "\ e] 1; este é o título \ a", o título da guia não muda. Existe uma configuração que eu precise alterar no iterm2?
bneil

15
Descobri isso. Eu tenho que desmarcar todas as opções para títulos de janela e guia na seção iterm-> preferências-> aparência. e na .zshrc eu tenho que descomente / add DISABLE_AUTO_TITLE exportação = "true" Graças @ Daniel Beck
bneil

3
Você também precisa definir Profiles > Terminal > Terminal Emulation > Terminal may set tab/window title.
Vaughan

11
ISSO NÃO FUNCIONA (pelo menos para mim) NA VERSÃO MAIS RECENTE DO iTerm (3.3.0)
iconoclast

E não funciona para mim na versão estável mais recente do iTerm2(3.2.9)
jalanb

45

O que funciona para mim:

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

Se você usa o Mac OSX e o iTerm, o iTerm2:

  • iTerm → Preferências → Aparência → Títulos de janelas e guias → desmarque todas

Se você usa o zsh, pode ser necessário editar suas configurações. Suas configurações normalmente estão no arquivo ~/.zshrc. Você deseja adicionar ou editar suas configurações para garantir que essa linha exista:

DISABLE_AUTO_TITLE="true"

2
Ainda funciona a partir de 28/02/2018.
salep 28/02

38

Uma das comodidades do uso do iTerm é a possibilidade de definir o título da janela e o título da guia separadamente: exemplo de uso do título da guia e da janela separadamente

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

Dessa forma, você pode ver imediatamente a qual host está conectado, em qual janela e o título da janela para cada guia mostra usuário e CWD.


2
Acabei de notar que a versão Terminal.app no ​​OS X Lion também suporta isso.
Orangenhain

pergunta boba: você adiciona esse código .bashrc, certo?
Qazwsx

Também parece que (no iTerm2 Build 1.0.0.20140629) até você alterar o título da janela ... ele rastreia o título da guia, não importa o quê. Tenho certeza que é uma configuração. Depois que o título da janela é alterado (2), ele não rastreia mais o título da guia.
Mei

Eu modifiquei a função acima para incluir a linha DISABLE_AUTO_TITLE="true"que corrigiu o problema e dessa maneira se eu não definir o título, eu ainda obter o recurso título automática
user15681

5

A precmdfaz o truque. No entanto, alguns temas oh-my-zsh mexem com o título da janela. Defina PR_TITLEBARcomo uma sequência vazia para corrigi-lo.

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

Eu também recomendaria brincar com as configurações da guia do iTerm2 em Preferências -> Aparência.



2

Nenhuma das respostas pareceu funcionar para mim, provavelmente para a versão iterm2 (3.3.3).

Eu descobri isso: https://gist.github.com/phette23/5270658#gistcomment-3020766

Essencialmente, você pode fazer o que é dito em todas as outras respostas, mas também precisa definir Preferences > Profiles > General > Title -> Name (Job)

Isso funcionou para mim.


Isso não está na Generalguia, está na Profilesguia
Falmarri 13/09

Direito. Eu senti falta do > Profilesprimeiro. Minha culpa. Atualizada.
Nuno Gonçalves

1

A resposta aceita funcionou para mim por um longo tempo, mas agora está quebrada na versão mais recente do iTerm2. Uma solução alternativa encontrada foi ativar a API Python e criar um script que define o nome da guia da seguinte maneira:

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

Salvo como "tab_name.py" e chamado com:

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

Não é tão bom ou elegante quanto a resposta aceita, mas funciona.


-2

iTerm -> Preferências -> Aparência -> Títulos de janelas e guias -> marque a opção Mostrar nome do perfil


11
Bem-vindo ao Super Usuário! Neste site de perguntas e respostas, tentamos fornecer boas respostas para as perguntas das pessoas. Parte da redação de uma boa resposta é fornecer contexto para a solução proposta. Edite sua resposta e explique por que sua solução funciona e o que, especificamente , ela funciona.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.