Terminal GNOME - nome do processo no título da guia

9

Como posso colocar o nome do processo em execução no título da guia Terminal GNOME (ou na barra de título quando há apenas uma guia)?

- ATUALIZAÇÃO -

Para esclarecer, quero que o título da guia seja atualizado quando executar um processo, por exemplo:

# title is currently "bash"
$ find / -name foo # while searching for foo, title is "find"
$ # title is once again "bash"
$ less /proc/cpuinfo # title changes to "less"
$ man ls # title changes to man
$ # title returns to "bash"
adureza
fonte

Respostas:

8

Encontrei. Este site fornece uma boa explicação para uma solução.
No seu bashrc, seria semelhante a:

case "$TERM" in
xterm*|rxvt*)
    set -o functrace
    trap 'echo -ne "\e]0;$BASH_COMMAND\007"' DEBUG
    PS1="\e]0;\s\007$PS1"
    ;;
*)
    ;;
esac

Pessoalmente, acho que não o adicionaria ao meu bashrc, porque o DEBUG combinado com o rastreamento lança um monte de lixo quando todo o shell é iniciado. Se você pode conviver com isso, na verdade funciona. Ele exibe o comando inteiro, no entanto, não apenas a primeira palavra.

DaveParillo
fonte
2
Obrigado por fazer uma boa pergunta. Parecia uma pergunta simples a princípio ... Após os primeiros 10 minutos, estava começando a me deixar louco! Foi por isso que pensei que era uma boa pergunta - parece simples, mas me forçou a aprender algo mais profundo sobre a interação entre o shell, o terminal e os sinais.
DaveParillo
por que a PS1atribuição? resulta em palavrões para mim, e realmente não parece necessário aqui ...?
phil294
Apenas erros para mim.
Kzqai
4

Bem, já que todo mundo já parece conhecer a solução de David Pashley, estou surpreso que demorei tanto para encontrar essa porque é quase tão antiga.

Essa solução, na verdade, cuida do lixo de spam de conclusão do bash.

Para ser claro: não fiz nada sozinho aqui, a não ser pesquisar. Todo o crédito é para Marius Gedminas .

Isso funciona perfeitamente para mim com o Gnome-Terminal / Terminator

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'

    # Show the currently running command in the terminal title:
    # http://www.davidpashley.com/articles/xterm-titles-with-bash.html
    show_command_in_title_bar()
    {
        case "$BASH_COMMAND" in
            *\033]0*)
                # The command is trying to set the title bar as well;
                # this is most likely the execution of $PROMPT_COMMAND.
                # In any case nested escapes confuse the terminal, so don't
                # output them.
                ;;
            *)
                echo -ne "\033]0;${USER}@${HOSTNAME}: ${BASH_COMMAND}\007"
                ;;
        esac
    }
    trap show_command_in_title_bar DEBUG
    ;;
*)
    ;;
esac

Além disso, este é um post cruzado, porque acabei de descobrir sobre isso e queria compartilhar e acho que é útil aqui também.

Comunidade
fonte
2

O abaixo deve funcionar. Eu tenho a função em um .bash_functionsarquivo e a fonte no .bashrcarquivo antes da configuração $PROMPT_COMMAND.

function term_title
{
        history 1 | awk '{print $2}';
}

PROMPT_COMMAND='echo -ne "\033]0;"$(term_title)"\007"'

fonte
11
Você está perto, mas eu não tenho muito melhor. Isso lhe dará o último comando executado , mas não é exatamente o que é adurity. Eu pensei em mudar term_title para: `if [jobs]; então história 1 | awk '{print $ 2}'; caso contrário, echo -ne 'bash em' fi 'funcionaria, mas é inconsistente em capturar processos com vida útil curta e ainda não retorna quando o processo é concluído. Eu não sei sobre o funcionamento interno do xterm para saber como mexer com esses gatilhos / eventos.
DaveParillo 18/09/09
O bash executa $ PROMPT_COMMAND imediatamente antes de exibir o prompt, portanto é o melhor que posso fazer com essa abordagem. Pode haver outros gatilhos que podem ser executados logo após você pressionar Enter, mas eu não os conheço.
2

no zsh, você apenas define sua função 'precmd'. veja aqui .

akira
fonte