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?
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.
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)
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.
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".
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
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.