Como um script bash pode detectar suporte para caracteres de escape de titulação de janela?

1

Eu tenho uma armadilha de depuração que é executada toda vez que eu insiro um comando no bash que define o título da janela para indicar qual comando está sendo executado. Estou deixando de fora todos os detalhes de configuração e reduzo a:

export PS1="\[\e]0;$GENERATED_WINDOW_TITLE\a\]$GENERATED_PROMPT"

Isso funciona incrivelmente bem, com apenas um problema: se o bash shell estiver sendo executado em um ambiente que não suporta esse recurso, o GENERATED_WINDOW_TITLE será impresso na tela a cada prompt. Isso acontece sempre que eu estou correndo bash de um terminal não-X.

Como o bash pode dizer se esta seqüência de escape é suportada?

    
por Sniggerfardimungus 27.02.2013 / 00:21

2 respostas

2

Eu não acho que haja um recurso terminfo para isso. Na prática, testar o valor de TERM deve ser bom o suficiente. Isso é o que eu faço no meu .bashrc e .zshrc , e não me lembro de ser um problema.

case $TERM in
  (|color(|?))(([Ekx]|dt|(ai|n)x)term|rxvt|screen*)*)
    PS1=$'\e\]0;$GENERATED_WINDOW_TITLE\a'"$PS1"
esac
    
por 27.02.2013 / 00:41
2

Existe uma entrada terminfo que é (ab) usada para este propósito, e tem sido o assunto de mais de um relatório de bug sugerindo que ela seja aplicada a várias descrições de terminal. Referindo-se a terminfo(5) :

   has_status_line           hs     hs   has extra status
                                         line
   from_status_line          fsl    fs   return from status
                                         line
   to_status_line            tsl    ts   move to status line,
                                         column #1

estes são explicados na seção Linhas de Status :

Some terminals with status lines need special sequences to access the status line. These may be expressed as a string with single parameter tsl which takes the cursor to a given zero-origin column on the status line.

De improviso, o único emulador de terminal que você provavelmente poderá usar e que suporta o recurso conforme documentado é kterm .

Uma extensão seria apropriada. O programa screen documenta uma possível escolha (mas depois de inspecionar o que faz com o recurso, essa idéia foi descartada). ncurses fornece uma extensão que está no banco de dados do terminal alguns anos , documentada na seção sobre Extensões do XTerm :

# TS is a string capability which acts like "tsl", but uses no parameter and
#    goes to the first column of the "status line".

Por fim, qualquer coisa que use o recurso herdaria de xterm+sl :

# These building-blocks allow access to the X titlebar and icon name as a
# status line.  There are a few problems in using them in entries:
#
# a) tsl should have a parameter to denote the column on which to transfer to
#    the status line.
# b) the "0" code for xterm updates both icon-title and window title.  Some
#    window managers such as twm (and possibly window managers descended from
#    it such as tvtwm, ctwm, and vtwm) track windows by icon-name. Thus, you
#    don't want to mess with icon-name when using those window managers.
#
# The extension "TS" is preferable, because it does not accept a parameter.
# However, if you are using a non-extended terminfo, "TS" is not visible.

O programa (ncurses) tput pode testar esse recurso.

    
por 02.04.2016 / 00:05