设置/取消设置窗口的铃声/标志状态

时间:2014-07-03 18:34:28

标签: zsh tmux

我倾向于在tmux会话中有多个窗口,并在一个窗口中运行长进程(例如数据库迁移和复杂查询等),同时我将注意力集中在另一个窗口中。

我想在进程完成时设置一些内容来标记窗口。我打算用zsh函数执行此操作,但是我无法找到在给定tmux窗口上设置铃声的命令。我查看set-window-option并找到了window_flag,但我不知道如何设置 window_flag

如何通过shell命令为给定的tmux窗口设置和清除指示符?

1 个答案:

答案 0 :(得分:3)

为了向任何终端(包括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