Os títulos das janelas do terminal podem ser atualizados enquanto um processo está em execução?

Os títulos das janelas do terminal podem ser atualizados enquanto um processo está em execução?

Estou tentando definir um pequeno cronômetro pomodoro/contagem regressiva para mim no terminal.

Este comentárioon Superuser oferece uma pequena função de shell útil que atuará como um cronômetro de contagem regressiva, que printfé o tempo restante para STDOUT (incrível). Eu estava pensando que seria ainda melhor se pudesse ver a contagem regressiva ao vivo no título da guia do emulador de terminal, para poder monitorar meu tempo restante sem ter que alternar entre as guias.

Parecea PROMPT_COMMANDvariável de ambiente pode ser usada para atualizar o título da janela, mas como seu conteúdo é executadoapenas pouco antes do Bash exibir um prompt, não há como atualizar o título ao vivo enquanto o processo está em execução (que eu saiba).

Existe alguma maneira de fazer isso?

(Ocorreu-me que poderia resolver isso mais facilmente dividindo um novo painel no tmux, mas estou em uma tela pequena e gostaria de poder salvar todo o espaço da tela possível.)

Responder1

Os códigos dos terminais podem ser o que você precisa, consultehttp://wiki.bash-hackers.org/scripting/terminalcodesehttps://en.wikipedia.org/wiki/ANSI_escape_codepara detalhes (ouhttp://invisible-island.net/xterm/ctlseqs/ctlseqs.htmlpara uma descrição bastante técnica dos códigos relacionados ao xterm).

Aqui está um exemplo de como definir o título:

set_title() {
  printf '\033]0;%s\007' "$*"
}

Responder2

Basta enviar os códigos ANSI relevantes para stdout ou stderr.

O seguinte funciona para mim em um xterm:

for i in {10..1} ; do printf '\e]0;'$i'\a' ; sleep 1 ; done &

Alguns terminais também podem fornecer API para alterar seus títulos programaticamente.

informação relacionada