使用Shift键模拟水平滚动

Modified on: Sat, 30 Jun 2018 05:31:30 +0800

当我使用我的(垂直)滚轮并按 Shift 时,我想模仿水平滚动。

在某些应用程序(Chrom {e,ium})中,这已经有效,但我正在寻找X应用程序的通用解决方案。

我到目前为止最接近的是xbindkeys + xdotool

# ~/.xbindkeysrc
"xdotool click 6"
  shift + b:4

"xdotool click 7"
  shift + b:5

问题是xbindkeys似乎错过了一些事件,偶尔会有一个垂直滚动“通过”。这非常烦人。看起来xbindkeys正在使用某种轮询?

另外,我不喜欢每秒产生数百个shell命令。

我有一个小屏幕,不得不横向滚动。

如何实现通用水平滚动?

更新强>

还有另一种方法可以完成我想要的xbindkeysxmodmap

"xmodmap -e 'pointer = 1 2 3 6 7 4 5 8 9 10'"
  c:50
"xmodmap -e 'pointer = default'"
  release + shift + c:50

当保持 Shift 时,指针按钮4和5被映射到6和7.(按钮4/5是前垂直滚动,6/7是水平滚动)。 c:50是左 Shift 键。在密钥释放时,将恢复默认指针映射。

这很好地解决了“太多事件”的问题。但是,Shift键不再作为普通修改器工作。我尝试用xdotool重新发布 Shift 按下/发布事件,如下所示:

"xmodmap -e 'pointer = 1 2 3 6 7 4 5 8 9 10';  xdotool keydown Shift_L"
  c:50
"xmodmap -e 'pointer = default';  xdotool keyup Shift_L"
  release + shift + c:50

根据xev Shift 事件通过,但我认为它不再被识别为修饰符。例如,按 Shift + A 将不会产生大写的A

最佳答案

我找到了一个可以接受的解决方案。

我没有找到一种方法来使用 Shift 或任何其他键作为我的修改器来旋转轮轴,只要它被按下。

我现在使用一个简单的.xbindkeysrc和一个切换按钮:

"~/toggle.sh" alt + x

toggle.sh脚本如下所示:

#!/bin/sh on() { xmodmap -e 'pointer = 1 2 3 6 7 4 5 8 9 10' } off() { xmodmap -e 'pointer = default' } if xmodmap -pp | grep -q '4.*6'; then off else on fi

这允许我切换行为。当我按 Alt + X 时,我的鼠标滚轮轴会旋转,当我再次按下它时,它会被设置为默认值。

这应该适用于现在。

如果有人找到了一种方法,可以使用 Shift 作为“修饰符”(只要按下鼠标轴就会旋转),请告诉我。

编辑:由于 Alt + x 是常用的热键,我将其更改为:

"~/toggle.sh"
  alt + x

(我切换到guile配置,所以上面应该在一个名为.xbindkeysrc.scm的文件中)

这将使用 Ctrl +鼠标右键切换滚轮方向。


相关问答

添加新评论