我正在运行 Ubuntu 16.04,并连接了 Logitech M705 鼠标。此鼠标共有 10 个按钮,按钮 1 为左键单击,按钮 2 为右键单击,按钮 10 为“拇指按钮”。
我已经设置了xbindkeys
# History Back & Forward
"xte 'keydown Alt_L' 'key Left' 'keyup Alt_L' "
b:6 + Release
"xte 'keydown Alt_L' 'key Right' 'keyup Alt_L' "
b:7 + Release
# page down
"xte 'key Next' "
b:8
# page up
"xte 'key Prior' "
b:9
# powerclick
"xte 'keydown Control_L' 'mouseclick 1' 'keyup Control_L' "
这一切都运行得很好。我所说的powerclick
是用来在新选项卡中打开 FF 中的链接。
现在我想要实现的是:当我点击按钮 1,然后点击按钮 10,然后选择一些文本并释放两个按钮时,文本应该被复制到剪贴板中。因此,对于任何窗口来说,这都是一种快速编辑模式,只要以这种方式选择文本,它就会被复制。
# quickcopy
"xte 'keydown Control_L' 'key c' 'keyup Control_L' "
b:10 + b:1 + Release
但这并没有达到预期的效果。
有没有办法映射如此复杂的条件?我可以想象这会非常有用,因为“拇指按钮”可能与键盘上的 Ctrl 键类似,即修改标准点击行为。
稍后我想为按钮 10(拇指按钮)+按钮 2(右按钮)创建粘贴功能
谢谢
答案1
通常这是不可能的,但幸运的是 xbindkeys 支持一种名为 guile 的脚本语言,它允许您执行诸如设置状态/变量之类的操作,从而允许您创建充当修饰键的按钮。
我发了一个关于它的帖子: https://www.linuxquestions.org/questions/linux-desktop-74/%5Bxbindkeys%5D-advanced-mouse-binds-4175428297/
答案2
xbindkeys -n -v
在终端运行输出:
1 keys in /home/whoever/.xbindkeysrc
min_keycode=8 max_keycode=255 (ie: know keycodes)
"xte 'keydown Control_L' 'key c' 'keyup Control_L' "
Release + m:0x0 + b:1 (mouse)
starting loop...
我认为m:0x0
这是一种鼠标状态,似乎 xbindkeys 被b:10 + b:1 + Release
简单地解释为b:1 + Release
。
我不知道我们是否做错了,是否有正确的书写方式,或者是否根本不可能使用双鼠标按钮组合xbindkeys
。
答案3
例子
实现b:3 + b:1
,在此示例中,右键单击与左键单击组合发送 CTRL+F5...这要求 xbindkeys 构建时支持 guile
/home/user/.xbindkeysrc.scm
使用以下内容创建此附加配置文件。
基本上这将
- 拦截第一个被监视的键 > 然后
- 注意第二把钥匙
- 如果是 key1 + key2,它会发送其命令
- 否则它发送第一个键的命令
- 重新启动 xbindkeys(以干净的方式重新开始)
;; This configuration is guile based.
;; http://www.gnu.org/software/guile/guile.html
;; Right Click
(define (first-binding)
"First binding"
(xbindkey-function '("b:3") b3-second-binding)
)
(define (reset-first-binding)
"reset first binding"
(ungrab-all-keys)
(remove-all-keys)
)
(define (b3-second-binding)
"Button Extra Functions"
(reset-first-binding)
;; First Key Down + Second Key = Action Ctrl+F5 And Release
(xbindkey-function '("b:1")
(lambda ()
(reset-first-binding)
(run-command "xte 'keydown Control_R' 'keydown F5' 'keyup F5' 'keyup Control_R'")
(run-command "killall xbindkeys; xbindkeys")
)
)
;; First Key Up = Release
(xbindkey-function '(release "b:3")
(lambda ()
(reset-first-binding)
(run-command "xte 'mouseclick 3'")
(run-command "killall xbindkeys; xbindkeys")
)
)
)
(first-binding)
感谢 David Bobb