web-dev-qa-db-fra.com

Comment mapper les majuscules sur les touches fléchées?

J'essaie de mapper les majuscules sur la flèche du bas et les majuscules avec un modificateur de décalage sur la flèche du haut.

J'ai essayé d'utiliser xmodmap avec le fichier d'entrée suivant:

remove Lock = Caps_Lock
keycode 66 = Down Up

Une pression sur la touche majuscule fonctionne pour l'envoi de la flèche vers le bas, mais une pression sur la touche majuscule + Maj n'envoie pas Haut.

Qu'est-ce que je fais mal?

5
Jared Beach

Il y aura beaucoup de détails techniques à cette solution. N'hésitez pas à passer à la section du fichier de présentation si vous ne vous souciez pas du problème, mais seulement de la solution.

xmodmap

Monter et descendre via CAPS et Shift+CAPS fonctionne sur mon système avec le .Xmodmap donné comme prévu.

Vous vérifiez si vos paramètres sont réellement appliqués en appelant

$ xmodmap -pk | grep ^\\s*66
     66     0xffe5 (Caps_Lock)  0x0000 (NoSymbol)   0xffe5 (Caps_Lock)
$ setxkbmap -layout us && xmodmap ~/.Xmodmap
$ xmodmap -pk | grep ^\\s*66
     66     0xff54 (Down)   0xff52 (Up)

le modificateur LEVEL2

Votre question pose un autre problème (réel):

Le modificateur LEVEL2 <SHIFT> qui est activé en appuyant sur la touche Shift bouton est là pour marquer visuellement les caractères dans un éditeur de texte lorsque vous vous déplacez dans les lignes avec les touches fléchées. Si vous affectez <UP>  au deuxième niveau de <CAPS>, vous appuyez efficacement Shift+. Vous devez désactiver le modificateur Shift uniquement pour ce scénario. Afaik vous ne pouvez pas faire cela en utilisant xmodmap.

redirection du modificateur LEVEL2

Le "vrai moyen" de modifier les mappes de clés est avec xkb . J'ai trouvé la solution sur ne ancienne liste de diffusion xorg . Le NIVEAU2 de Caps doit être redirigé vers le (<UP>) (La touche de montée ne comporte qu'un seul niveau.) Sur X.org, vous pouvez désactiver le Shift modificateur pendant la redirection avec la fonction intégrée RedirectKey(key=<UP>, clearmods=Shift). clearmods "libère" le modificateur Shift avant que la touche ne soit réellement "enfoncée".

fichier de mise en page

Le moyen le plus simple d'activer le comportement consiste à créer un nouveau fichier de présentation:

/ usr/share/X11/xkb/symboles/capslockarrow

default partial xkb_symbols "basic" {

    include "de(basic)"
    include "shift(both_capslock_cancel)"

    key <CAPS> {
        type[Group1] = "TWO_LEVEL",
        symbols[Group1] = [ Down, NoSymbol ],
        actions[Group1] = [ NoAction(), RedirectKey(key=<UP>, clearmods=Shift) ]
    };
 };

activer la nouvelle mise en page avec

setxkbmap capslockarrow

Notes sur le fichier de mise en page

  • Le nouveau fichier de présentation provient de de(basic). Telle est la disposition du clavier allemand standard . Vous pouvez ajouter n'importe quelle autre disposition ici, comme us(basic) ou us(euro). voir /usr/share/X11/xkb/symbols/ pour avoir un aperçu de ce qui est possible. Le code à deux lettres est le nom du fichier et entre parenthèses, la définition respective xkb_symbols du fichier.

  • Vous n'auriez plus de modificateur de touche majuscule. J'ai donc ajouté une sorte de remplaçant pour Caps: shift(both_capslock_cancel) En appuyant sur les deux LSHIFT et RSHIFT ensemble, vous pouvez activer CAPS Lock et vous relâchez à nouveau le verrou avec toute autre pression d'un Shift clé.

  • Si quelqu'un se demande pourquoi je n'ai pas utilisé de nouvelle définition de type pour cela: je ne pouvais tout simplement pas libérer le modificateur Shift avant que l'action de la touche Haut soit déclenchée. Le relâchement de la touche Shift devrait cependant être possible en appelant explicitement preserve[Shift] = None dans un _ en spearated xkb_types.

  • Comme indiqué dans les commentaires ci-dessous, Wayland s'appuiera également sur XKB mais n'autorisera pas les redirections.

3
ukos