Могу ли я использовать сложные комбинации кнопок мыши с xbindkeys?

Я использую 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 (кнопка вправо)

Спасибо

3 ответа

Решение

Бег 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,

Это невозможно сделать нормально, но, к счастью, xbindkeys поддерживает язык сценариев, называемый guile, который позволяет вам делать такие вещи, как установка состояний / переменных, который позволяет создавать кнопки, которые действуют как клавиши-модификаторы.

Я сделал тему об этом: https://www.linuxquestions.org/questions/linux-desktop-74/%5Bxbindkeys%5D-advanced-mouse-binds-4175428297/

пример

реализации 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) 

Спасибо Дэвиду Боббу

Другие вопросы по тегам