我倾向于在一个tmux会话中有多个窗口,并且在一个窗口中运行长时间的进程(例如数据库迁移和复杂查询等),而我专注于另一个窗口。
我想设置一些东西,以便在进程完成时标记窗口。我计划对zsh
函数这样做,但是我很难找到在给定的tmux窗口上设置铃声的命令。我看了看set-window-option
,找到了window_flag
,但是我不知道如何设置 window_flag
如何通过shell命令设置和清除给定tmux窗口的指示器?
为了将铃声发送到任何终端,包括tmux,您只需要将a
打印到终端。您可以使用echo 'a'
或print 'a'
。(在非ZSH的shell上,您可能需要使用echo -e 'a'
或printf 'a'
。)
如果在窗口中出现铃声,tmux在状态栏的窗口名称中添加!
。激活窗口会自动删除铃声标志,这也意味着如果当前活动窗口中出现铃声,则不会设置该标志。
你也可以在window-status-bell-style
选项的状态行中为这些窗口设置一个单独的样式(默认似乎是reverse
,即切换前色和背景色)。
另外,通过将bell-action
选项设置为any
,您可以让tmux在铃声发生时显示一条短消息。
如果一个进程至少需要60秒才能完成,我在~/.zshrc
中有以下内容来响铃:
autoload -Uz add-zsh-hook
typeset -i LONGRUNTIME=60
save_starttime () {
starttime=$SECONDS
}
set_longrunning_alert () {
if ((LONGRUNTIME > 0 && SECONDS - starttime >= LONGRUNTIME)); then
print "a"
fi
}
add-zsh-hook preexec save_starttime
add-zsh-hook precmd set_longrunning_alert