Émuler le défilement horizontal avec la touche Maj

13

Je veux émuler le défilement horizontal lorsque j'utilise ma molette de défilement (verticale) et que j'appuie sur Shift.

Dans certaines applications (Chrom {e, ium}), cela fonctionne déjà, mais je cherche une solution générique pour les applications X.

Le plus proche que j'ai obtenu jusqu'à présent est xbindkeys+ xdotool.

# ~/.xbindkeysrc
"xdotool click 6"
  shift + b:4

"xdotool click 7"
  shift + b:5

Le problème est qu'il xbindkeyssemble manquer certains événements, et parfois un défilement vertical "passe". C'est très ennuyeux. Il semble xbindkeysutiliser une sorte de sondage?

Je n'aime pas non plus générer des centaines de commandes shell par seconde.

J'ai un petit écran et je dois beaucoup faire défiler horizontalement.

Comment réaliser un défilement horizontal générique?

MISE À JOUR:

Il y a une autre façon qui fait surtout ce que je veux avec xbindkeyset xmodmap.

"xmodmap -e 'pointer = 1 2 3 6 7 4 5 8 9 10'"
  c:50
"xmodmap -e 'pointer = default'"
  release + shift + c:50

Lorsque Shiftest maintenu enfoncé, les boutons de pointeur 4 et 5 sont mappés sur 6 et 7. (Les boutons 4/5 sont pour le défilement vertical et 6/7 pour le défilement horizontal). c:50est la Shifttouche gauche . Lors de la libération de la touche, le mappage du pointeur par défaut est restauré.

Cela résout bien le problème des «trop d'événements». Cependant, la touche Maj ne fonctionne plus comme modificateur normal. J'ai essayé de ré-émettre les Shiftévénements de presse / communiqué avec xdotoolcomme ceci:

"xmodmap -e 'pointer = 1 2 3 6 7 4 5 8 9 10';  xdotool keydown Shift_L"
  c:50
"xmodmap -e 'pointer = default';  xdotool keyup Shift_L"
  release + shift + c:50

Selon xevles Shiftévénements, je pense que ce n'est plus reconnu comme un modificateur. Par exemple, appuyer sur Shift+ Ane produira pas de majuscule A.

Paul Schyska
la source
1
Vous pouvez également faire défiler horizontalement avec Ctrl + Flèches pour de nombreux programmes.
terdon
1
Merci, mais cela ne fonctionne pas pour moi dans Firefox. Je recherche une solution "générique" qui fonctionne partout.
Paul Schyska
Serait-ce un problème d'exécuter quelque chose en tant que root, par exemple en utilisant sudo?
brm
Ce n'est pas optimal d'avoir à sudo. Je suppose que tu veux dire sudo-ing à chaque fois que Shift est pressé? Pourriez-vous préciser ce que vous avez en tête?
Paul Schyska
Cela peut être inutile, mais il était une fois cela a fonctionné pour moi ~/.xbindkeysrc.scm. À un moment donné, il a échoué, mais cela pourrait fonctionner sur votre système.
Sparhawk

Réponses:

2

J'ai trouvé une solution acceptable pour moi.

Je n'ai pas trouvé de moyen d'utiliser Shiftou toute autre touche comme modificateur pour faire pivoter l'axe de la roue tant qu'il est enfoncé.

J'utilise maintenant un simple .xbindkeysrcavec un bouton à bascule:

"~/toggle.sh"
  alt + x

Le script toggle.sh ressemble à ceci:

#!/bin/sh
on()
{
  xmodmap -e 'pointer = 1 2 3 6 7 4 5 8 9 10'
}

off()
{
  xmodmap -e 'pointer = default'
}

if xmodmap -pp | grep -q '4.*6'; then
  off
else
  on
fi

Cela me permet de basculer le comportement. Lorsque j'appuie sur Alt+ X, l'axe de la molette de la souris tourne et lorsque j'appuie à nouveau, il est réglé sur la valeur par défaut.

Cela devrait fonctionner pour l'instant.

Si quelqu'un trouve un moyen de le faire avec Shiftun "modificateur" (l'axe de la souris tourne tant qu'il est enfoncé), faites-le moi savoir.

EDIT: Comme Alt+ xest un raccourci clavier couramment utilisé, je l'ai changé en:

(xbindkey '(control "b:3") "toggle-wheel.sh")

(Je suis passé à la configuration guile donc ce qui précède devrait être dans un fichier nommé .xbindkeysrc.scm)

Cela fera basculer la direction de la molette de défilement avec Ctrlle bouton droit de la souris.

Paul Schyska
la source
0

Vous pouvez utiliser btnx et son outil de configuration gui .

Package Ubuntu plus récent et ici

Après avoir fait la détection de bouton sur votre souris en utilisant btnx-config, mappez simplement "Scroll Up" avec un modificateur de bouton shift sur le bouton x que vous souhaitez.

RedMage
la source
Merci, j'ai du mal à le faire s'appuyer sur Fedora.
Paul Schyska
1
J'ai trouvé un paquet rpm pour btnx maintenant. Je ne trouve pas de moyen de mapper un modificateur en tant qu'événement source (c'est-à-dire Shift + WheelUp). Je peux uniquement mapper à partir de WheelUp à Shift + une autre touche. Suis-je en train de manquer quelque chose? J'ai également essayé de "détecter" Shift + WheelUp en premier lieu, mais il a dit "Button déjà mappé". Le rawcode était 0x02010008 pour les deux cas (Shift pressé et non pressé). Je ne pense pas que btnx puisse gérer plusieurs périphériques d'entrée (souris + clavier)
Paul Schyska
0

Comme indiqué ici , j'ai installé imwheel , puis créé ~/.imwheelrcavec le contenu suivant.

".*"
Shift_L, Up, Left
Shift_L, Down, Right

J'ai ensuite couru imwheel -b 45dans le terminal. J'ai testé et je n'ai pas remarqué les problèmes diagonaux associés au défilement élevé et aux xbindkeys.

NB se -b 45limite imwheelà capturer uniquement le défilement vers le haut et vers le bas, l'empêchant de bloquer (par exemple) les xbindkeysliaisons pour les boutons du pouce.

Problèmes

Cependant, plusieurs problèmes y sont associés.

  • C'est incohérent. Je pouvais le faire fonctionner avec Firefox et Gwenview hors de la boîte, mais Inkscape et GIMP ne fonctionnaient pas. Je pourrais utiliser la correspondance de fenêtre pour ne pas correspondre à Inkscape / GIMP, mais il devrait y avoir un moyen de le faire fonctionner universellement.
  • Pire encore, cela empêche certains autres événements par défaut, comme Ctrl+ Scroll wheel, qui est normalement utilisé pour zoomer. J'ai essayé de mettre des choses comme Control_L, Up, Control_L|Updans ~/.imwheelrc, mais cela ne fonctionne pas.
  • imwheelenvoie les événements de la molette de défilement horizontale à la fenêtre active, pas à la fenêtre sous le curseur de la souris. Ceci est contraire au comportement par défaut de la molette de défilement. Cela suggère également que la Ctrlsolution de contournement dans le point ci-dessus serait également sous-optimale.
  • imwheelsemble ne plus être en développement. Il est bloqué sur la version préliminaire depuis 10 ans (depuis 2004).
Sparhawk
la source