进程完成时在tmux中发出警报

时间:2014-05-20 08:49:53

标签: tmux

我可以设置tmux在进程完成时在非活动窗口中触发警报吗?

例如:我开始一个很长的构建过程。我希望在完成时收到通知,而不是每次打印状态时都会收到通知。

7 个答案:

答案 0 :(得分:16)

我很惊讶这个答案还没有给出:你可以使用tmux窗口设置visual-bell。使用bell-action,您可以配置是仅要查看当前窗口的铃声,还是仅查看非当前窗口(其他)的铃声。我个人更喜欢第二个,因为你不会看到shell产生的噪音,如果它在当前窗口中,你可能不关心通知。

set-window-option -g visual-bell on
set-window-option -g bell-action other

当进程生成铃声时,tmux将突出显示响铃铃声的窗口标题,并显示“窗口X中的铃声”通知。

然后在过程结束时按铃。 E.g:

make; echo -e '\a'

(或&& ||代替;,如果您想分别仅在成功或失败时响铃)

答案 1 :(得分:12)

我知道有3个解决方案,没有一个真正理想。您可以将这些命令放在~/.tmux.conf中,或者直接通过Ctrl-B :以Tmux命令运行它们。

  1. 每当输出发生变化时监视并发出警报(然后您可以将输出重定向到其他位置,以便输出仅在命令完成后更改):

    :set -g visual-activity on
    :setw -g monitor-activity on
    
  2. 只要输出一段时间(此处为30秒),监视并发出警报:

    :set -g visual-silence on
    :setw -g monitor-silence 30
    
  3. deprecated and someday replaced by a better option)监视并警告whevener输出包含与给定模式匹配的字符串(并且可能运行像my-command; echo foobar这样的命令):

    :set -g visual-content on
    :setw -g monitor-content foo*bar
    
  4. $ some-command; tmux display-message "Task 1 done"。但是,该消息仅会在:set -g display-time 4000定义的短暂时间内显示。

  5. 如果您将visual-*保留为off(默认值),则只会突出显示警报的窗口名称,而不会显示全局警报状态消息。

    有关这些设置的详细信息,请参阅tmux man page

    更新(感谢Steven Lu)

答案 2 :(得分:2)

你可以使用&&&amp ;; bash衍生物将调用tmux命令通知你。 使用&&意味着只有当脚本以错误代码0退出时才会收到通知。如果您希望它通知您,只需使用;

至于用于包装脚本的tmux命令,看看那些束,它们就足够了 选择窗口 split-window -h'exec echo ...' 发送密钥

答案 3 :(得分:2)

我终于找到了适合我的解决方案。我使用.cell { height: 100px; border: 1px solid; border-collapse: collapse; } .red { background: red; } .yel { background: lightyellow; } .row { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; flex-wrap: wrap; } .row > [class*='col-'] { display: flex; flex-direction: column; } 作为我的shell,它有一个名为" Hook Functions" - 执行某些操作的shell函数:http://zsh.sourceforge.net/Doc/Release/Functions.html

可能其他炮弹也有相似的特征。

我使用的钩子函数是zsh,每次显示提示时都会执行。即,当一个命令刚刚运行完毕。

在我的precmd

.zshrc

这会向precmd () { echo -n -e "\a" } 发送一个铃声,这会使其突出显示该命令所在的窗口。

如果您已经专注于tmux窗口,则不会执行任何操作,因为铃声会立即被清除。

这种方法的好处是它不会触发所有视觉活动。它仅在命令完成时触发。

答案 4 :(得分:0)

有两种选择:

set -g visual-activity on
setw -g monitor-activity on

你试过在tmux.conf中设置它们吗?

答案 5 :(得分:0)

作为一个好的解决方法,您可以使用: https://github.com/tcreech/tmux-notifications

您只需执行以下操作: $命令; tmux-notify

您会在状态栏中收到一个不错的通知(如果启用)

答案 6 :(得分:0)

为了将来参考,人们还可以查看由 ChanderG 创建的 tmux-notify 插件,该插件专为此目的而设计。

免责声明:我是这个插件的贡献者。如果您发现错误或发现缺失的内容,请随时查看并打开问题/拉取请求或功能请求。