#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