Можно ли обновлять заголовки окон терминала во время выполнения процесса?

Можно ли обновлять заголовки окон терминала во время выполнения процесса?

Я пытаюсь установить для себя в терминале небольшой таймер-помидор/обратный отсчет.

Этот комментарийв Superuser есть удобная маленькая функция оболочки, которая будет работать как таймер обратного отсчета, который printfвыводит оставшееся время на STDOUT (круто). Я подумал, что было бы еще лучше, если бы я мог видеть обратный отсчет в заголовке вкладки эмулятора терминала, чтобы я мог следить за оставшимся временем без необходимости переключаться между вкладками.

Кажетсяпеременную окружения PROMPT_COMMANDможно использовать для обновления заголовка окна, но поскольку его содержимое выполняетсятолько перед тем, как Bash отобразит приглашение, нет никакой возможности обновлять заголовок в реальном времени во время выполнения процесса (насколько мне известно).

Можно ли это как-то сделать?

(Мне пришло в голову, что эту проблему можно решить проще, разделив новую панель в tmux, но у меня маленький экран, и я бы хотел сэкономить как можно больше места на экране.)

решение1

Терминальные коды могут быть тем, что вам нужно, см.http://wiki.bash-hackers.org/scripting/terminalcodesиhttps://en.wikipedia.org/wiki/ANSI_escape_codeдля получения подробной информации (илиhttp://invisible-island.net/xterm/ctlseqs/ctlseqs.htmlдля довольно технического описания кодов, относящихся к xterm).

Вот пример того, как задать заголовок:

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

решение2

Просто выведите соответствующие коды ANSI на stdout или stderr.

Для меня работает следующее xterm:

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

Некоторые терминалы также могут предоставлять API для программного изменения своих заголовков.

Связанный контент