Como posso atualizar automaticamente o título em uma tela de execução do xterm?

14

Este é um acompanhamento para esta questão . Estou trabalhando em tcsh dentro da tela GNU em um xterm .

Eu tenho o seguinte no meu .cshrc:

alias res_t 'xtset -t %h:%d "(%u:%g)" %e'       # reset titlebar
res_t                                           # reset title right now
alias precmd res_t

E isso funciona bem!

No entanto, quando executo a tela, vejo que o título não é atualizado com o diretório atual. Como posso fazer a atualização de tela do título do xterm?

    
por Nathan Fellman 13.04.2010 / 11:15

6 respostas

4

Você pode definir o título da janela xterm adicionando isso ao seu .tcshrc ou .cshrc (substitua seu atual precmd alias):

alias precmd 'echo -n "3]0;${PWD}\a"'

Verifique se esse é o único alias precmd nos arquivos .cshrc e .tcshrc ao usar isso. Este método exibe o diretório atual como o título da janela para mim no xterm a gnome-terminal, independentemente de uma sessão de tela GNU estar aberta.

Minha resposta foi baseada em este .

    
por 12.05.2010 / 11:28
3

Eu entendo que você está usando o tcsh, então isso provavelmente não funcionará ... Apenas no caso de alguém estar procurando a melhor maneira de fazer isso.

Se seus sistemas (local / remoto) estiverem executando o bash, você poderá usar a variável de ambiente "PROMPT_COMMAND" para definir o título da janela. PROMPT_COMMAND é avaliado antes que um prompt seja exibido.

(no seu .bashrc):

export PROMPT_COMMAND='history -a && echo -ne "3]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}

'history -a'

7'

Explicação:

'echo -ne "3]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}%bl0ck_qu0te%7"'

Isso define o shell para anexar ao arquivo de histórico sempre que um comando é concluído, em vez de quando o shell inteiro é concluído. (Isso não está relacionado a este exemplo).

%bl0ck_qu0te%

Isto ecoa o código de escape "\ 033] 0;" que define o título da janela com variáveis "user" @ "host" (removendo a correspondência mais longa da direita para a primeira ".") e depois o diretório de trabalho (substituindo '~' por '$ HOME').

O truque acima funcionará com qualquer aplicativo de terminal que suporte a alteração dinâmica do título da janela (o qual iTerm, Terminal.app, urxvt, aterm, eTerm. xterm etc todos fazem). Você também pode olhar para a variável shell "TITLEBAR" na documentação bash, é semelhante.

    
por 26.05.2010 / 17:34
2

Isso deve funcionar em qualquer shell, mas é um hack .screenrc sujo. Ele assume a linha hardstatus para funcionar, o que pode ser inaceitável para alguns usuários. Mas funciona em gnome-terminal no Ubuntu mais recente, mesmo sem a linha termcapinfo abaixo. Algumas situações podem exigir ajustes mais profundos (eu não testei no PuTTY, por exemplo).

# enable xterm title setting; may not be necessary on some platforms
termcapinfo xterm*|rxvt* 'hs:ts=\E]2;:fs=
# enable xterm title setting; may not be necessary on some platforms
termcapinfo xterm*|rxvt* 'hs:ts=\E]2;:fs=%pre%7:ds=\E]2;screen%pre%7'

# dirty hack: put xterm title escapes in the hardstatus
# this example will yield "user@host || screen Win#:(windowtitle)
defhstatus "$USER@^EH || screen ^E:(^Et)"
# now turn it off so it doesn't print in the hardstatus line
hardstatus off

# and finally, use caption as a replacement hardstatus
caption always '%{= kG}[%{G}%H%{G}][%= %{= kw}%?%-Lw%?%{R}(%{W}%n*%f%t%?(%u)%?%{R})%{w}%?%+Lw%?%?%= %{G}][%{B}%C%a %M.%d%{G}]'
7:ds=\E]2;screen%pre%7' # dirty hack: put xterm title escapes in the hardstatus # this example will yield "user@host || screen Win#:(windowtitle) defhstatus "$USER@^EH || screen ^E:(^Et)" # now turn it off so it doesn't print in the hardstatus line hardstatus off # and finally, use caption as a replacement hardstatus caption always '%{= kG}[%{G}%H%{G}][%= %{= kw}%?%-Lw%?%{R}(%{W}%n*%f%t%?(%u)%?%{R})%{w}%?%+Lw%?%?%= %{G}][%{B}%C%a %M.%d%{G}]'

Encontrado em este link .

    
por 18.06.2010 / 18:54
2
setenv TITLE "%{3]0;%n@%m:%~
setenv TITLE "%{3]0;%n@%m:%~%pre%7%}"
set prompt = "${TITLE}%n@%m:%~%#"
7%}" set prompt = "${TITLE}%n@%m:%~%#"
    
por 19.10.2011 / 14:53
2

Esta página (que foi vinculada acima) é a solução, porém você precisa ter certeza de que a string do terminal da entrada esteja alinhada com a string id do seu terminal (ou seja, a variável TERM está definida), caso contrário, ela não terá nenhum efeito.

Aqui, um resumo do que eu fiz, que funcionou para mim depois de anos sem investir tempo suficiente para descobrir isso:

  1. Descubra qual é a string de ID do seu terminal executando:

    echo $TERM
    

    Ele provavelmente dirá algo como 'xterm' ou 'linux' ou 'rxvt'.

  2. Agora adicione a seguinte linha ao seu arquivo .screenrc (ou faça um, se ele não existir) localizado em seu homedir (~ / .screenrc):

    termcapinfo xterm 'hs:ts=\E]2;:fs=
    termcapinfo linux 'hs:ts=\E]2;:fs=
    echo $TERM
    
    7:ds=\E]2;screen
    termcapinfo xterm 'hs:ts=\E]2;:fs=
    termcapinfo linux 'hs:ts=\E]2;:fs=%pre%7:ds=\E]2;screen%pre%7'
    termcapinfo xterm 'hs:ts=\E]2;:fs=%pre%7:ds=\E]2;screen%pre%7'
    
    7:ds=\E]2;screen%pre%7'
    7' termcapinfo xterm 'hs:ts=\E]2;:fs=%pre%7:ds=\E]2;screen%pre%7'
    7:ds=\E]2;screen%pre%7'

    A chave é ter certeza de que 'xterm' é a string de ID do seu TERM que você obteve acima. Você pode fazer várias linhas para cada tipo de termo diferente que você usa.

Por exemplo, eu tenho isso como meu arquivo .screenrc porque eu uso xterms e o tipo de termo 'linux' quando SShing em uma caixa:

%pre%

Espero que isso ajude e seja totalmente agnóstico. Lembre-se, se você executar a tela como root, precisará modificar ~ root / .screenrc além de seu próprio arquivo ~ / .screenrc como este.

    
por 26.12.2011 / 14:53
1

As instruções aqui permitiram que eu atualizasse o título em rxvt do bash para mim - o que talvez seja não de qualquer ajuda, mas achei que valeria a pena investigar (seção Barra de Status Informativa se o link não pular para a parte direita da página)

    
por 25.11.2011 / 15:49