¿Se pueden actualizar los títulos de las ventanas de terminal mientras se ejecuta un proceso?

¿Se pueden actualizar los títulos de las ventanas de terminal mientras se ejecuta un proceso?

Estoy intentando configurar un pequeño pomodoro/temporizador de cuenta regresiva para mí en la terminal.

este comentarioen Superusuario ofrece una pequeña y práctica función de shell que actuará como un temporizador de cuenta regresiva, que printfes el tiempo restante para STDOUT (increíble). Estaba pensando que sería aún mejor si pudiera ver la cuenta regresiva en vivo en el título de esa pestaña del emulador de terminal, así podría monitorear el tiempo restante sin tener que alternar entre pestañas.

Aparecela PROMPT_COMMANDvariable de entorno se puede utilizar para actualizar el título de la ventana, pero dado que su contenido se ejecutasólo justo antes de que Bash muestre un mensaje, no hay forma de que pueda actualizar el título mientras se ejecuta el proceso (que yo sepa).

¿Hay alguna manera de que esto se pueda hacer?

(Se me ocurrió que podría resolver esto más fácilmente dividiendo un nuevo panel en tmux, pero estoy en una pantalla pequeña y agradecería poder guardar todo el espacio de la pantalla que pueda).

Respuesta1

Los códigos de terminal pueden ser lo que necesita, consultehttp://wiki.bash-hackers.org/scripting/terminalcodesyhttps://en.wikipedia.org/wiki/ANSI_escape_codepara más detalles (ohttp://invisible-island.net/xterm/ctlseqs/ctlseqs.htmlpara obtener una descripción bastante técnica de los códigos relacionados con xterm).

Aquí un ejemplo de cómo configurar el título:

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

Respuesta2

Simplemente envíe los códigos ANSI relevantes a stdout o stderr.

Lo siguiente me funciona en xterm:

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

Algunas terminales también pueden proporcionar API para cambiar sus títulos mediante programación.

información relacionada