web-dev-qa-db-fra.com

Puis-je utiliser des combinaisons de boutons de souris complexes avec xbindkeys?

J'utilise Ubuntu 16.04 et j'ai connecté la souris Logitech M705. Cette souris a un total de 10 boutons, le bouton 1 étant un clic gauche, le bouton 2 clic droit, le bouton 10 "bouton du pouce".

J'ai mis en place 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' "

Tout cela fonctionne très bien. Ce que j'appelle powerclick est utilisé pour ouvrir des liens dans FF dans un nouvel onglet.

Maintenant, ce que je voudrais réaliser: quand je clique sur le bouton 1 ALORS le bouton 10 ALORS je sélectionne du texte et je relâche les deux boutons, le texte doit être copié dans le presse-papiers. Donc, genre de mode quickedit pour n'importe quelle fenêtre, dès que le texte est sélectionné de cette façon, il est copié.

# quickcopy
"xte 'keydown Control_L' 'key c' 'keyup Control_L' "
  b:10  + b:1 + Release

Mais cela ne fait pas l'effet désiré.

Existe-t-il un moyen de cartographier de telles conditions complexes? Je peux imaginer que cela soit d’une grande utilité, étant donné que le "bouton miniature" pourrait fonctionner de la même manière que la touche Ctrl du clavier, c’est-à-dire pour modifier le comportement de clic standard.

Plus tard, je voudrais faire la fonction Coller pour le bouton 10 (bouton du pouce) + bouton 2 (bouton de droite)

Merci

4
michnovka

L'exécution de xbindkeys -n -v dans un terminal génère:

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...

Comme je pense que m:0x0 est un état de souris, il semble que xbindkeys interprète b:10 + b:1 + Release comme simplement b:1 + Release.

Je ne sais pas si nous le faisons mal et s'il existe une manière correcte de l'écrire, ou si l'utilisation d'une combinaison de deux boutons de souris n'est tout simplement pas possible dans xbindkeys.

3
100r

Ce n'est pas possible de faire normalement, mais heureusement, xbindkeys prend en charge un langage de script appelé guile qui vous permet de faire des choses comme définir des états/variables, ce qui vous permet de créer des boutons qui agissent comme des touches de modification.

J'ai fait un fil à ce sujet: https://www.linuxquestions.org/questions/linux-desktop-74/%5Bxbindkeys%5D-advanced-mouse-binds-4175428297/

2
David Bobb

Exemple

implémentation de b:3 + b:1, clic droit en combinaison avec clic gauche, envoyer CTRL + F5 dans cet exemple ... cela nécessite que xbindkeys soit construit avec un support guile

Créez ce fichier de configuration supplémentaire /home/user/.xbindkeysrc.scm avec le contenu suivant.

Fondamentalement, cela

  • intercepter d'abord regardé la clé> puis
  • surveillez la seconde clé
    • cas de key1 + key2 il envoie sa commande
    • sinon, il envoie une commande pour la première clé
    • redémarrer xbindkeys (recommencer de manière propre)
;;   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) 

Merci à David Bobb

0
intika