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

  • 本文关键字:完成时 tmux 进程 tmux
  • 更新时间 :
  • 英文 :


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

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

我很

惊讶这个答案还没有给出:您可以使用 tmux 窗口设置visual-bell为此。使用bell-action您可以配置是仅查看当前窗口的铃铛,还是仅查看非当前窗口(其他(的铃铛。就个人而言,我更喜欢第二种,因为您不会看到 shell 产生的噪音,并且您可能不关心通知是否在当前窗口中。

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

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

然后在过程结束时敲响铃铛。 例如:

make; echo -e 'a'

(或者&& ||而不是;,如果你只想分别在成功或失败时响铃(

我知道

有 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. (已弃用,有朝一日被更好的选项取代( 监视和警报输出是否包含与给定模式匹配的字符串(并可能像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定义的短时间。

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

有关其中每个设置的详细信息,请参阅 tmux 手册页

更新(感谢史蒂文·卢(

我终于找到了一个适合我的解决方案。我使用zsh作为我的 shell,它有一个叫做"钩子函数"的功能——在某些动作上执行的 shell 函数:http://zsh.sourceforge.net/Doc/Release/Functions.html。

其他外壳可能具有类似的功能。

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

在我的.zshrc

precmd () {
  echo -n -e "a"
}  

这会向tmux发送一个铃铛,这导致它只突出显示运行命令的窗口。

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

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

你可以

用 && bash 派生来包装你的运行脚本,它会调用一个 tmux 命令来通知你。使用 &&&意味着只有当脚本退出并显示错误代码 0 时,您才会收到通知。如果您希望它仍然通知您,只需使用 ;

至于包装脚本的 TMUX 命令,看看那些,它们应该足够了选择窗口拆分窗口 -h "执行回声..."发送密钥

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

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

建立在

@psp940的答案之上(StackOverflow不允许我添加评论(:

precmd () {
  echo -n -e "a" >$TTY
}

如果您使用的是 powerlevel10k 的即时提示功能,将铃铛直接重定向到终端可避免有关预初始化控制台输出的警告。另请参阅此处。

添加到@wump和@psp940的答案;我发现在命令完成时收到警报的最简单方法是在您的PS1中放一个铃铛:

tmux.conf

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

在您的.bashrc

# ring bell every time a command completes
export PS1+=$'[a]'

我不确定+=$''是否是 bash-ism,但该原则在任何外壳中都有效。

周围的 [ + ]告诉您的 shell 它们之间的字符宽度为零

有两个

选项:

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

您是否尝试过在 tmux.conf 中设置它们?

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

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

您将在状态栏中收到一个很好的通知(如果启用(

最新更新