Могу ли я использовать сложные комбинации кнопок мыши с 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)
Спасибо Дэвиду Боббу