Sous Linux, comment puis-je mapper SHIFT_L / SHIFT_R lorsqu'il est pressé sans touche supplémentaire?

13

Aujourd'hui, j'ai trouvé ce très bel article de Steven Losh dans lequel il présente quelques mappages de clavier améliorant la productivité. Parmi eux, une cartographie dynamique des touches Maj gauche et droite.

L'idée

Lorsque Shift_L ou Shift_R sont pressés sans touche supplémentaire, ils sont mappés respectivement sur '(' et ')', sinon ils fonctionnent comme d'habitude.

Le problème

Il fait tout cela sous OSX. J'essaie d'obtenir le même résultat sous Linux. Il n'y a pas de moyen simple pour cela car, si je comprends bien, vous ne pouvez pas utiliser xmodmap pour configurer une clé pour Shift_L seul, et une autre pour Shift lorsqu'il est utilisé comme touche de modification.

J'ai cherché un peu sur Google et j'ai trouvé des gens qui essayaient de faire la même chose sous Windows, ce qui est apparemment possible en utilisant AutoHotKey, mais je n'ai rien trouvé pour Linux.

Existe-t-il un moyen de résoudre ce problème sous Linux?

Gilligan
la source
Je ne l'ai pas essayé mais cela pourrait aider askubuntu.com/q/24916/11352
Mansuro
2
C'est presque un double de cette question . =)
teika kazura

Réponses:

4

Hou la la! Le commentaire de l'utilisateur teika kazura sur la question d'origine est tout à fait correct - non seulement est-ce effectivement un double de cette autre question , mais la réponse qui y est fournie ("use xcape ") résout ce problème!

Après avoir cloné le repo xcape et compilé (j'ai dû installer libXtst-devel sur ma boîte Fedora, d'abord), j'ai pu obtenir le comportement exact demandé avec la commande suivante:

xcape -e "Shift_L=parenleft;Shift_R=parenright"

Après des tests certes superficiels, cela semble fonctionner extrêmement bien. Agréable!

Autres options

Si vous utilisez la touche Maj comme modificateur de souris (c.-à-d. Si vous cliquez sur un élément tout en maintenant la touche Maj enfoncée), vous souhaiterez probablement inclure l'option de délai d'attente de xcape et trouver une valeur de délai confortable, de sorte que les touches de Maj Shift en solo utilisées en combinaison avec la souris ne ne génèrent pas de parenthèses parasites. À partir du fichier README de xcape:

-t <timeout ms>

Si vous maintenez une touche plus longue que ce délai, xcape ne générera pas d'événement clé. La valeur par défaut est de 500 ms.

Ainsi, en incluant le -tdrapeau avec une valeur de délai d'attente qui fonctionne pour vous, vous serez toujours en mesure de shift-clic avec la souris aussi longtemps que vous maintenez la touche Maj enfoncée pour au moins timeout ms quelques millisecondes.

(Encore une fois, merci à teika kazura d' avoir signalé l'autre question, et également à don_crissti pour la réponse originale.)

FeRD
la source
Un problème avec cette méthode est que j'appuie assez souvent sur [Shift] + [LMouse] pour sélectionner du texte dans les éditeurs. Fait intéressant, Sublime Text utilise également [Ctrl] + [LMouse], de sorte que la question concernant le remappage [Ctrl] pose également des problèmes.
AnnanFay
@Annan Avez-vous expérimenté l'ajustement de l'option de délai d'expiration de xcape? Dans le fichier README: " -t <timeout ms>Si vous maintenez une touche plus longue que ce délai, xcape ne générera pas d'événement clé. La valeur par défaut est 500 ms." ... à moins que xcape n'interfère avec l'événement de touche enfoncée du modificateur (je ne m'en souviens pas), cela devrait l'empêcher de générer des pressions de touches parasites, tout en vous permettant de l'utiliser comme modificateur de sélection de la souris tant que vous le maintenez suffisamment longtemps .
FeRD
@Annan C'est super d'entendre, j'ai mis à jour ma réponse pour suggérer l'utilisation du -tdrapeau!
FeRD
1

C'est un défi intéressant, et je suis d'accord sur celui auquel xinput ne semble pas être parfaitement adapté. J'ai passé un peu de temps bidouiller avec les capacités de xmodmap, et est venu si frustrante près de réaliser ce que vous voulez faire ... sans véritablement gérer pour y arriver.

En utilisant xmodmap, il est possible d'affecter parenleft comme symbole de touche décalé sur la touche de décalage gauche:

xmodmap -e 'keysym Shift_L = Shift_L parenleft Shift_L parenleft'

quel sorta fonctionne, au moins dans les tests sur ma boîte Fedora 17, mais pas de manière satisfaisante. J'ai trouvé que, avec ce mappage en place, la touche Maj fonctionnait toujours normalement et ne rendait pas de parens parasites, mais (frustrant), elle ne produisait pas non plus de manière fiable les parens gauches. Pour une raison quelconque, la clé ne semble pas modifier de manière fiable lui - même , qui brise sa mission décalée ... au départ. Pour une raison quelconque, frapper plusieurs fois de suite à gauche entraînerait éventuellement la production de parens à gauche, mais seulement après la quatrième ou la cinquième pression.

Un comportement que je l' ai avis, cependant, que vous pourriez être en mesure de travailler avec un « assez proche » analogique: je trouve que , après la cartographie parenleft et parenright sur Shift_L et Shift_R, je pourrais sûrement taper parens par « rouler » sur les deux touches de déplacement - en d'autres termes, avec cette cartographie:

xmodmap -e 'keysym Shift_L = Shift_L parenleft Shift_L parenleft'
xmodmap -e 'keysym Shift_R = Shift_R parenright Shift_R parenright'

appuyer sur Shift_L suivi de Shift_R, puis relâcher les deux, produirait une parenthèse droite ou une parenthèse gauche dans l'autre sens. (Les mappings de paren pourraient être inversés, bien sûr; je ne pouvais pas vraiment décider de quelle manière me semblait plus "naturelle".)

C'était aussi près que je suis arrivé à atteindre le comportement exact que vous recherchez; il ne semble pas possible d'utiliser xmodmap seul.

J'étais à moitié convaincu que ce n'était tout simplement pas possible, point final, mais j'ai réalisé qu'il y avait au moins une touche qui fonctionnait exactement comme vous le décrivez: la touche Super ("Windows"). Sous Gnome Shell, il s'agit d'une touche de modification (mod4), qui produit un effet différent (déclenchement de l'aperçu) lorsqu'elle est enfoncée seule. Ainsi, au moins en théorie, il peut être possible d'implémenter la surcharge de la touche Maj souhaitée de la même manière.

... Mais, je n'ai absolument aucune idée de la façon dont cela serait fait, ou à quel point il serait envahissant de s'embourber dans le traitement nécessaire chaque fois que vous appuyez sur la touche Maj. :-)

FeRD
la source