Können Terminalfenstertitel aktualisiert werden, während ein Prozess ausgeführt wird?

Können Terminalfenstertitel aktualisiert werden, während ein Prozess ausgeführt wird?

Ich versuche, im Terminal einen kleinen Pomodoro-/Countdown-Timer für mich einzustellen.

Dieser Kommentaron Superuser bietet eine praktische kleine Shell-Funktion, die als Countdown-Timer fungiert und printfdie verbleibende Zeit bis STDOUT anzeigt (super). Ich dachte, es wäre noch besser, wenn ich den Live-Countdown im Titel dieser Registerkarte des Terminalemulators sehen könnte, damit ich meine verbleibende Zeit überwachen könnte, ohne zwischen den Registerkarten hin- und herwechseln zu müssen.

Es erscheintDie PROMPT_COMMANDUmgebungsvariable kann verwendet werden, um den Fenstertitel zu aktualisieren, aber da sein Inhalt ausgeführt wirderst kurz bevor Bash eine Eingabeaufforderung anzeigt, es gibt (soweit ich weiß) keine Möglichkeit, den Titel live zu aktualisieren, während der Vorgang läuft.

Gibt es eine Möglichkeit, dies zu tun?

(Mir ist eingefallen, dass ich das einfacher lösen könnte, indem ich in tmux einen neuen Bereich aufteile, aber ich habe einen kleinen Bildschirm und wäre dankbar, wenn ich so viel Bildschirmfläche wie möglich einsparen könnte.)

Antwort1

Möglicherweise benötigen Sie Terminalcodes. Siehehttp://wiki.bash-hackers.org/scripting/terminalcodesUndhttps://en.wikipedia.org/wiki/ANSI_Escapecodefür Details (oderhttp://invisible-island.net/xterm/ctlseqs/ctlseqs.htmlfür eine recht technische Beschreibung der Codes in Bezug auf xterm).

Hier ein Beispiel zum Festlegen des Titels:

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

Antwort2

Geben Sie einfach die relevanten ANSI-Codes an stdout oder stderr aus.

Folgendes funktioniert bei mir in einem xterm:

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

Einige Terminals verfügen möglicherweise auch über eine API, um ihre Titel programmgesteuert zu ändern.

verwandte Informationen