Faça o gnome-terminal mostrar o comando executando como título [duplicado]

8

Eu quero o nome do comando em execução, por exemplo, descompactar para ser visível através da barra de título do gnome-terminal, mas parece ser impossível, se o aplicativo em execução não definir um título explicitamente, embora eu escolha 'Substituir título inicial 'opção no diálogo do perfil.

    
por daisy 28.04.2012 / 07:25

2 respostas

9

Esta é uma solução mais completa, na verdade, cuidando do lixo de spam da conclusão do bash.

Para ser claro: eu não fiz nada sozinho aqui, mas pesquisa. Todo o crédito vai para Marius Gedminas .

Isso funciona perfeitamente para mim com o Gnome-Terminal / Terminator (coloque-o no seu .bashrc ou em algum lugar que esteja sendo adquirido)

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

    # 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
            *3]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 "3]0;${USER}@${HOSTNAME}: ${BASH_COMMAND}%pre%7"
                ;;
        esac
    }
    trap show_command_in_title_bar DEBUG
    ;;
*)
    ;;
esac
7"' # 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 *3]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 "3]0;${USER}@${HOSTNAME}: ${BASH_COMMAND}%pre%7" ;; esac } trap show_command_in_title_bar DEBUG ;; *) ;; esac

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

    
por user108612 19.11.2012 / 14:34
7

Isso foi respondido aqui .

  • trap 'command' DEBUG faz o bash executar command antes de cada comando.
  • echo -ne "3]0;Title$BASH_COMMAND7" altera o título para "Título"
  • $PS1 contém o comando que está sendo executado.

Combinando isso, obtemos

trap 'echo -ne "3]0;$BASH_COMMAND
PS1="3]0;\wtrap 'echo -ne "3]0;$BASH_COMMAND
PS1="3]0;\w%pre%7${PS1}"
trap 'echo -ne "3]0;$BASH_COMMAND%pre%7" > /dev/stderr' DEBUG
7" > /dev/stderr' DEBUG
7${PS1}" trap 'echo -ne "3]0;$BASH_COMMAND%pre%7" > /dev/stderr' DEBUG
7" > /dev/stderr' DEBUG

Então, só precisamos redefinir o título depois de concluirmos o comando. Fiz isso configurando ~/.bashrc para alterar o título para o caminho atual.

tl; dr: Adicione estas duas linhas (nessa ordem, senão recebi um aviso truncado) na parte inferior de $PS1

%pre%

Editar: seu %code% já pode alterar o título, caso em que apenas a última linha é necessária.

    
por Angs 06.06.2012 / 14:39