Comment mapper la touche Maj gauche et droite individuellement?

10

Tout d'abord, excusez mon ignorance de X et XKB; J'ai essayé de pirater ensemble une solution dans l'espoir de pouvoir réaliser ce que je veux sans en avoir besoin d'une compréhension détaillée.

J'essaie de créer une carte de clavier XKB sur Ubuntu 12.04 qui me permet de stipuler laquelle des deux touches Maj constitue le modificateur Level2. Plus précisément, la 4touche ne doit produire un $lorsque le décalage vers la droite est maintenu, pas la gauche.

Ma lecture jusqu'à présent:

J'ai essayé de définir un type personnalisé, puis de me référer explicitement à lui dans une carte de symboles:

/usr/share/X11/xkb/types/mbfisher:

default xkb_types "mbfisher" {
  type "RIGHT_SHIFT" {
    modifiers = None+Shift_R;
    map[None] = Level1;
    map[Shift_R] = Level2;
  };
}

/usr/share/X11/xkb/symbols/mbfisher:

default
partial alphanumeric_keys
xkb_symbols "basic" {

  name[Group1]= "mbfisher";

  key <AE04> {
    type= "RIGHT_SHIFT",
    symbols[Group1]= [ 4,  dollar ]
  };

};

Je sélectionne ensuite la carte avec l'interface graphique de mise en page du clavier Ubuntu.

Cela désactive évidemment le clavier alphanumérique en dehors de la 4touche, mais le signe dollar peut toujours être tapé avec l'une ou l'autre touche Maj.

Je suis conscient d'écrire une énorme question avec beaucoup d'informations inutiles, alors je m'arrête ici; veuillez demander tout ce que j'ai manqué.

Des idées?

mbfisher
la source

Réponses:

2

Je ne sais pas si c'est la solution que vous voulez mais une possibilité de désactiver la touche Maj gauche serait d'utiliser xmodmap. Créer un fichier ~/.Xmodmapavec son contenu

clear shift
add shift = Shift_R

et courir xmodmap ~/.Xmodmap.


Voir commentaires / chat:

Vous pouvez rencontrer des problèmes si d'autres modifications sont apportées à votre xkbmap par un autre programme, il setxkbmap uspeut donc être nécessaire de réinitialiser un xkbmap par défaut avec quelque chose comme .

Si vous souhaitez que certaines touches répondent à une seule touche Maj, vous pouvez obtenir la disposition actuelle du clavier avec xmodmap -pke > .Xmodmapcela, vous obtenez une .Xmodmapliste de toutes vos touches sous la forme de keycode XX = functions. Dans cette affectation, chaque code de touche peut avoir plusieurs fonctions sur le côté droit. Chacun correspond à un modificateur différent + cette touche. Vous pouvez alors insérer le clear + add d'en haut et ajouter quelque chose comme add mod5 = Shift_L. La touche Maj droite correspondrait alors à mod2 tandis que celle de gauche serait mod5. Vous pouvez ensuite continuer et déplacer les fonctions mod2 des touches que vous souhaitez appeler avec la touche Maj gauche vers mod5 en insérant simplement NoSymbolet en espaçant jusqu'à atteindre la colonne de droite ( keycode 57 = n N-> keycode 57 = n NoSymbol NoSymbol NoSymbol N).

Trudbert
la source
Heureux de vous aider. Cela a-t-il fonctionné?
Trudbert
Désolé, journée chargée. J'ai toujours les deux touches Maj disponibles après avoir exécuté xmodmap, dois-je faire autre chose pour obtenir le changement?
mbfisher
Essayez xmodmap -e "clear shift" après cela, vous ne devriez pas avoir de touches shift disponibles si cela fonctionne, le reste devrait aussi fonctionner
Trudbert
Non, j'ai toujours les touches Maj. # xmodmap -verbose -e "clear shift" ! 1: clear shift clear shift ! ! executing work queue ! clear shift
mbfisher
étrange. Pas de message d'erreur? clear devrait supprimer tout ce qui est associé au modificateur afin qu'il ne reste plus rien. Je mettrai la main sur le système Linux dans une heure environ et j'y reviendrai.
Trudbert
2

Voici ce qui a finalement fonctionné! J'ai utilisé xmodmapet un ~/.Xmodmapfichier plutôt que la configuration xkb.

~/.Xmodmap:

clear Shift

! Key Shift+Key mode_switch+Key mode_switch+Shift+Key AltGr+Key AltGr+Shift+Key
! Key Shift_L+Key Shift_R+Key Shift_R+Shift_L+Key AltGr+Key AltGr+Shift_L+Key

keycode 10 = 1 1 exclam 1
keycode 11 = 2 2 at 2
keycode 12 = 3 3 numbersign 3
keycode 13 = 4 4 dollar 4
keycode 14 = 5 5 percent 5

keysym Shift_R = Mode_switch
add Shift = Shift_L

Les 2 lignes commentées (regardant avec !) montrent les en-têtes de colonne avant et après mes modifications. Cela m'a permis de spécifier le col 2 comme Shift_L et le col 3 comme Shift_R, car j'ai mappé shift_R comme Mode_switch.

Les modifications sont effectuées en exécutant:

 # setxkbmap us
 # xmodmap ~/.Xmodmap

setxkbmap usdéfinit la carte US par défaut de sorte que vous travaillez à partir d'une table rase et y xmodmapajoute les modifications personnalisées.

Lorsque la mise en œuvre !, @, #, $et les %personnages ne peuvent être tapés avec la touche de décalage vers la droite, et ^, &, *, (et )ne peuvent être tapés avec la touche de décalage vers la gauche.

Je peux maintenant continuer en mappant toutes les touches du côté gauche du clavier pour qu'elles ne soient modifiées que par la touche Maj droite (c'est-à-dire les caractères aplhabétiques et leurs modifications majuscules) et vice versa; cette solution signifie que je dois seulement remapper le côté gauche.

Autres liens utiles trouvés en cours de route:

Merci beaucoup à @Trudbert de m'avoir aidé à trouver la réponse!

mbfisher
la source