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


14

Este é um pouco de acompanhamento para esta pergunta . Estou trabalhando no tcsh na 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 faço para atualizar a tela com o título xterm?


Você já encontrou uma solução que funcionou para você?
Trey Hunner

Não. Tentei as respostas sugeridas, mas elas não funcionaram. Por isso eu não os aceitei nem os votei melhor.
Nathan Fellman

Respostas:


4

Você pode definir o título da janela do xterm adicionando-o ao seu .tcshrcou .cshrc(substitua o seu precmdalias atual ):

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

Certifique-se de que este seja o único alias precmd nos arquivos .cshrce .tcshrcao usá-lo. Este método exibe o diretório atual como o título da janela para mim no xterm em um terminal gnome, independentemente de uma sessão da tela GNU estar aberta.

Minha resposta foi baseada nisso .


3

Eu entendo que você está usando o tcsh, então isso provavelmente não funcionará ... Caso alguém esteja procurando a maneira básica 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 "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007'

Explicação:

'history -a'

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

'echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'

Isso ecoa o código de escape "\ 033] 0;" que define o título da janela com variáveis ​​"usuário" @ "host" (removendo a correspondência mais longa da direita para a primeira ".") e, em seguida, 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 (que iTerm, Terminal.app, urxvt, aterm, eTerm. Xterm etc.). Você também pode procurar na variável de shell "TITLEBAR" na documentação do bash, é semelhante.


1
isso não funcionará quando estiver dentro do gnuscreen. pelo menos não está funcionando para mim. é por isso que estou aqui :)
gcb 16/09


2

Isso deve funcionar em qualquer shell, mas é um hack .screenrc sujo. Ele assume o controle da linha de status mais difícil, o que pode ser inaceitável para alguns usuários. Mas ele funciona no gnome-terminal no Ubuntu mais recente, mesmo sem a linha termcapinfo abaixo. Algumas situações podem exigir ajustes mais profundos (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=\007:ds=\E]2;screen\007'

# 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 neste link .


2
setenv TITLE "%{\033]0;%n@%m:%~\007%}"
set prompt = "${TITLE}%n@%m:%~%#"

1
Mas isso atualizará o título durante a execução #screen
Nathan Fellman

1
Isso funciona bem com a tela 4.00.02 + tcsh 6.12.00. Isso pressupõe que você tenha a hardstatusvariável de tela definida adequadamente e o termcap / terminfo suporta hs|ts|fs|ds.
Darren Salão

o que o hardstatus toca aqui?
gcb 16/09/14

2

Esta página (que foi vinculada acima) é a solução, no entanto, você precisa garantir que a sequência de terminais da entrada esteja alinhada com a sequência de identificação do seu terminal (ou seja, com o que a variável TERM está configurada), caso contrário não terá nenhum efeito.

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

  1. Descubra qual é a cadeia de caracteres de identificação do seu terminal executando:

    echo $TERM
    

    Provavelmente dirá algo como 'xterm' ou 'linux' ou 'rxvt'.

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

    termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
    

    A chave é garantir que 'xterm' seja a string de ID do seu TERM que você obteve acima. Você pode criar várias linhas para cada tipo de termo diferente usado.

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

termcapinfo linux 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

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


1

As instruções aqui me permitiram atualizar o título no rxvt do bash para mim - o que provavelmente não ajuda em nada, mas achei que poderia valer a pena investigar (seção Barra de status informativa se o link não pular para a parte direita da página)

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.