当鼠标滚轮停止时停止滚动

当鼠标滚轮停止时停止滚动

我有一个带有按钮的鼠标,可以切换鼠标滚轮上的摩擦力。这样,如果我愿意的话,我可以快速滚动。

然而,在 tmux 中,当我使用“无摩擦”模式时,即使我停止鼠标滚轮,它也会继续滚动。我认为发生这种情况是因为 tmux 计算了所有关键事件,然后只滚动那么多行,而忽略鼠标本身是否仍在滚动。然而,这种情况仅发生在多个水平窗格中,并且仅发生在最左侧的窗格上。

有没有办法告诉 tmux 在鼠标滚轮停止时停止滚动。或者当鼠标滚轮向另一个方向转动时停止滚动?

我目前在 xfce4-terminal 0.6.3-3 中使用 tmux 2.2 此行为在 xterm 或 urxvt 中不会发生。

xev输出:

向上滚动:

ButtonPress event, serial 25, synthetic NO, window 0x4a00001,
    root 0x4b2, subw 0x0, time 335774900, (128,158), root:(2049,204),
    state 0x10, button 4, same_screen YES

ButtonRelease event, serial 25, synthetic NO, window 0x4a00001,
    root 0x4b2, subw 0x0, time 335774900, (128,158), root:(2049,204),
    state 0x810, button 4, same_screen YES

向下滚动:

ButtonPress event, serial 25, synthetic NO, window 0x4a00001,
    root 0x4b2, subw 0x0, time 335776189, (128,158), root:(2049,204),
    state 0x10, button 5, same_screen YES

ButtonRelease event, serial 25, synthetic NO, window 0x4a00001,
    root 0x4b2, subw 0x0, time 335776189, (128,158), root:(2049,204),
    state 0x1010, button 5, same_screen YES

无论是否使用“无摩擦”模式,事件都是相同的

答案1

current 不支持平滑/无摩擦/惯性滚动tmux,主要是由于其无法控制的原因。

tmux通过终端控制序列接收鼠标输入,因此它受到终端提供的内容的限制。终端序列的流行参考是控制台代码(4),但这根本没有提到鼠标滚轮。然而,XTerm 控制序列确实定义了一些基本的轮子序列,因此 xterm 兼容的终端也将支持这些序列。

目前,tmux鼠标滚轮的处理只需要这两个简单的按钮事件:“向上滚轮”和“向下滚轮”。它也是丢弃车轮释放事件 (故意地)。

未来的终端模拟器可能会引入更多转义序列,例如包含滚动大小的滚轮事件。如果发生这种情况(或者已经存在),那么tmux还需要更新以识别这些序列并适当地处理它们。

相关内容