Установить / Отключить переключатель / состояние флага для окна

#zsh #tmux

#zsh #tmux

Вопрос:

Я склонен использовать несколько окон в сеансе tmux и запускать длительные процессы (такие как миграция базы данных и сложные запросы и т.д.) В одном окне, В то время как я продолжаю фокусироваться на другом.

Я хотел бы настроить что-нибудь, чтобы помечать окно, когда процесс завершен. Я планирую сделать это с zsh функциями, но у меня возникли проблемы с поиском команды для установки звонка в данном окне tmux. Я посмотрел set-window-option и нашел window_flag , но я не знаю, как установить window_flag

Как я могу установить и очистить индикатор для данного окна tmux с помощью команды командной строки?

Ответ №1:

Чтобы отправить bell на любой терминал, включая tmux, вам просто нужно распечатать a на терминале. Для этого вы можете использовать echo 'a' or print 'a' . (В оболочках, отличных от ZSH, вместо этого может потребоваться использовать echo -e 'a' or printf 'a' .)

Если в окне произошел сбой, tmux добавляет ! к названию окна в строке состояния. Активация окна автоматически удаляет флаг звонка, это также означает, что флаг не будет установлен, если звонок происходит в текущем активном окне.

Вы также можете установить отдельный стиль для этих окон в строке состояния с помощью window-status-bell-style опции (по умолчанию, кажется, reverse , то есть переключать цвета переднего плана и фона).

Кроме того, вы можете заставить tmux отображать короткое сообщение, если произошел звонок, установив для bell-action параметра значение any .


У меня есть следующее в моем ~/.zshrc , чтобы позвонить в звонок, если процесс занимает не менее 60 секунд для завершения:

 autoload -Uz add-zsh-hook

typeset -i LONGRUNTIME=60

save_starttime () {
    starttime=$SECONDS
}

set_longrunning_alert () {
    if ((LONGRUNTIME > 0 amp;amp; SECONDS - starttime >= LONGRUNTIME)); then
        print "a"
    fi
}

add-zsh-hook preexec save_starttime
add-zsh-hook precmd set_longrunning_alert