例子

例子

我正在运行 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

相关内容