我有一个自定义响铃命令:
set -g monitor-bell on
set -g bell-action current
set-hook -g alert-bell 'set -g status-bg "#901010" ; run-shell "sleep 0.1s" ; set -g status-bg colour8'
不幸的是,这并不能抑制蜂鸣声。为了做到这一点,我必须要么出发monitor-bell
,要么bell-action
出发(参见这个答案)。然而,我的alert-bell
钩子永远不会触发。
在添加我自己的钩子之前,我尝试删除任何现有的钩子:
set-hook -u alert-bell
set-hook -gu alert-bell
如何抑制蜂鸣声但仍将挂钩保留alert-bell
在 tmux 2.7 中?
答案1
set -g visual-bell on
这将导致tmux
闪烁一条消息(“当前窗口中的铃声”),而不是告诉终端发出蜂鸣声。该消息可能会掩盖您使用自己的挂钩所做的状态栏更改。
从手册中:
视觉铃[上|关闭 |两个都]
如果打开,则窗口中的响铃上会显示一条消息, 监控铃窗口选项已启用,而不是传递到终端(通常会发出声音)。 [...]
答案2
我通过使用(显示一毫秒的空消息)visual-bell
快速将其隐藏在钩子内部来摆脱该消息。alert-bell
display -d1
例如,这里有一个钩子,它将通过将其背景颜色设置为白色十分之一秒来使状态行闪烁(尽管您可以更改您想要的任何类型的样式)。
set -g visual-bell on
set-hook -g alert-bell {
display -d1
set status-style bg=white
run -b -d.1 -C {
set -u status-style
}
}
请注意,这些set
命令设置和取消设置status-style
会议选项(覆盖任何全球的只要设置了该选项)。这意味着您使用全局选项 ( ) 对状态行所做的任何自定义set -g
都不受此挂钩的影响。
答案3
我迭代了前面的示例,结果如下:
set -g monitor-bell on
set -g visual-bell on
set-hook -g alert-bell {
display-message -d1
setw @bell_flag 1
run -b -d.5 -C {
setw @bell_flag 0
}
}
set-hook -g pane-focus-in {
setw @bell_flag 0
}
然后,我使用自己的变量 @bell_flag 而不是内置变量 window_bell_flag。