Comment puis-je écrire un "idempotent" .Xmodmap

Actuellement, j'ai un file .Xmodmap qui change ma command en Ctrl , puis change ma Ctrl en Super ( .Xmodmap Linux sur un Mac).

Il fonctionne très bien, lorsqu'il n'est exécuté qu'une seule fois mais lors d'exécutions successives (par exemple, lorsque je redémarre mon environnement de bureau (Cinnamon), il recharge le file .Xmodmap ), il réinitialise les parameters en returnnant les modifications. Effectivement basculer entre ma configuration désirée et la configuration d'origine.

Comment puis-je écrire un file .Xmodmap qui ne définit que les parameters une fois, mais ne les change pas lors des exécutions successives? Voici mon file .Xmodmap existant:

 clear control clear mod4 keycode 105 = keycode 206 = keycode 133 = Control_L NoSymbol Control_L keycode 134 = Control_R NoSymbol Control_R keycode 37 = Super_L NoSymbol Super_L add control = Control_L add control = Control_R 

Réinitialisez la carte à son état d'origine avant d'appliquer vos mods. Une réinitialisation complète prend toujours, donc le mieux que je puisse find est différent.

Ce code utilise .Xmodmap{.orig,.reset,.mods} où if .orig n'existe pas, il est défini sur l'état actuel et calcule .reset pour restaurer cet état d'où il doit. avant d'appliquer .mods .

 #!/bin/sh # file xmodmap-reset # rm ~/.Xmodmap.orig # beforehand to take current setup as baseline for Xmodmap.mods changes stem=~/.Xmodmap orig=${stem}.orig reset=${stem}.reset mods=${stem}.mods # implement -pme like -pke # xmodmap-pme () { xmodmap -pm \ | sed ' 1d / [^ ]/!d s/^[^ ][^ ]*/clear &\nadd & =/ s/([^ ]*//g ' } # save baseline if none atm test -a $orig || { xmodmap -pke xmodmap-pme } > $orig # payload, diff for commands to reset to baseline from current { xmodmap -pke xmodmap-pme } \ | { diff -u0 $orig - \ | sed -n ' 1,/^@@/d s/^[^+]clear/clear/p s/^-//p ' } > $reset xmodmap $reset # finally ready to apply the mods test -a $mods && xmodmap $mods 

(edit: nettoyage)

Allez dans le système> Preferences> Applications de démarrage et ajoutez xmodmap ~/.Xmodmap . ajouter la commande xmodmap

Je suis encore un peu confus quant à ce que vous voulez, mais je pense que cela:

Si vous mettez ceci dans votre ~/.Xmodmap ,

 clear control clear mod4 keysym Super_L = Control_L keysym Control_L = Super_L add control = Control_L add control = Control_R add mod4 = Super_L add mod4 = Super_R 

puis à chaque fois que xmodmap ~/.Xmodmap est exécuté, alors la touche Ctrl gauche et la touche gauche changent . Ainsi, lors de la première invocation, la touche Ctrl agit comme si vous appuyiez sur , mais lors de la deuxième invocation, elle recommence à agir comme une touche Ctrl .