É possível obter o nome atual da janela do xterm?

9

Este LDP Howto demonstra como alterar o título de um xterm.

Eu sei que isso também é possível usando o xtitlecomando

Antes de invocar uma ação de longa execução, meu script usa essas técnicas para alterar o título de sua janela xterm.

Gostaria de extrair o nome da janela xterm antes de alterá-la, para que, depois que a ação de longa execução seja concluída, eu possa restaurar o título para o valor anterior.

Seria meio inverso ao xtitle ... Isso é possível?

TheGeeko61
fonte
Pergunta relacionada ao stackoverflow . Parece que xtermtem uma pilha para o título da janela, se você descobrir como usá-lo.
Jw013

Respostas:

4

Use xtitlescript.

Existem muitas variantes na internet, no entanto, eu costumo usar uma que depende de xprop

http://www.shelldorado.com/scripts/cmds/xtitle

Nikhil Mulley
fonte
Excelente! Isto é EXATAMENTE o que eu esperava ... e não funciona apenas para o xterm, mas (ao contrário de outras soluções) também funciona para o gnome-terminal. Obrigado!
precisa saber é o seguinte
Observe, porém, que a obtenção do título pelo protocolo X, que é o que xtitlefunciona, funciona apenas para sessões locais.
ak2 7/01/12
9

Há uma sequência de controle para consultar o título atual, mas geralmente é desativado por motivos de segurança. Isso porque permite que um programa mal-intencionado ou mesmo apenas um arquivo de texto digitado insira seqüências arbitrárias de caracteres como se digitasse no teclado, primeiro definindo o título e depois solicitando que ele seja relatado novamente. Portanto, a pilha de títulos foi introduzida.

O comando a seguir salvará os títulos atuais da janela e do ícone na pilha:

echo -ne '\e[22t'

Isso definirá o título para my title:

echo -ne '\e]0;my title\007'

E isso restaurará os títulos anteriores da janela e do ícone:

echo -ne '\e[23t'
ak2
fonte
2

Para o caso trivial (e provavelmente o mais comum), em que se deseja consultar o prompt para o xterm atual, basta usar xprop -id $WINDOWID WM_NAME. Se você deseja extrair o valor da manipulação em um script de shell, pode fazer algo um pouco mais caro, como:

   curtitle=`xprop -id $WINDOWID WM_NAME|awk '{print $3}'|xargs echo`

Usando o bash sozinho (para evitar a invocação de awk e xargs):

   curtitle=`xprop -id $WINDOWID WM_NAME`
   curtitle=`eval echo ${x##*=}`

Os xargs ecoam no primeiro exemplo e o eval no segundo exemplo existe simplesmente para retirar as aspas que o xprop coloca em torno do valor.

Substitua WM_NAME por WM_ICON se você deseja obter o nome do ícone em vez da string na barra de título.

Keith Hanlan
fonte
-1

Se entendi bem sua pergunta, você deve conseguir o título xterm atual inspecionando a $PROMPT_COMMANDvariável, por exemplo:

$ echo $PROMPT_COMMAND 
printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"

e você pode configurá-lo como (quebra de linha para facilitar a leitura):

PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033]\
0;%s@%s%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'

fonte
Não PROMPT_COMMANDé a maneira mais autorizada de obter o título, pois nem sempre é definido, e qualquer comando executado pode alterar o título entre os prompts. Para maior precisão, as seqüências de controle específicas do emulador de terminal provavelmente são o caminho a percorrer.
Jw013
Isso não funcionaria nos casos em que outros aplicativos estão definindo o título.
precisa saber é o seguinte
O $PROMPT_COMMANDnão é o título da janela. Eles não estão relacionados.
JamesThomasMoon1979