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?

bneil
fonte

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

Daniel Beck
fonte
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"
joelparkerhenderson
fonte
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.

Orangenhain
fonte
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.

Chris Gaudreau
fonte
2

Adicionando export PROMPT_COMMAND='echo -ne "\033]0;$PWD\007"'em ~/.bash_profilefuncionou para mim.

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

michalzuber
fonte
2
A pergunta diz especificamente zsh, não bash.
blockloop
Bom, funciona no bash!
l mingzhi
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.

Nuno Gonçalves
fonte
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.

Ian E
fonte
-2

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

john sam
fonte
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