Relier Super + C Super + V pour copier et coller

Pendant un certain temps, je me suis intéressé à lier la clé Windows (Super_L) sur mon clavier pour copier et coller sans autre raison que la commodité et la cohérence entre mon bureau et mon MacBook.

Je pensais que j'étais proche après avoir lu sur xmodmap et j'ai exécuté ce qui suit:

$ # re-map Super_L to Mode_switch, the 3rd col in keymap table `xmodmap -pke` $ xmodmap -e "keycode 133 = Mode_switch" $ # map Mode_switch+c to copy $ xmodmap -e "keycode 54 = c C XF86_Copy C" $ # map Mode_switch+v to paste $ xmodmap -e "keycode 55 = v V XF86_Paste V" 

Malheureusement, XF86Copy et XF86Paste ne semblent pas fonctionner du tout. Ils sont répertoriés dans /usr/include/X11/XF86keysym.h et xev montre que la séquence de touches est interprétée par X comme XF86Paste et XF86Copy, ces symboles fonctionnent réellement? Doivent-ils bénéficier d'un support de niveau d'application?

Relier Super to Ctrl

Qu'en est-il de lier votre clé Windows/Logo/Super gauche pour agir comme une autre touche Ctrl ?

Vous pouvez le faire avec les commandes xmodmap suivantes:

 remove mod4 = Super_L keysym Super_L = Control_L add Control = Control_L 

En supposant que vous avez enregistré les lignes ci-dessus comme super_as_ctrl.xmodmap vous pouvez tester l'effet en exécutant

 xmodmap super_as_ctrl.xmodmap 

Pour rendre le changement permanent (re-login / redémarrage) renommez le fichier vers .Xmodmap dans votre dossier personnel.

(Ce qui précède a été testé sur le système live Ubuntu 11.10, mais il devrait être identique pour les autres distributions Linux)


Réglage des raccourcis Copier / Coller pour votre programme de terminal

Après avoir attaché Super à Ctrl vous pouvez maintenant utiliser Super-C pour copier presque partout. La seule exception commune est votre programme terminal. Toutefois, vous pouvez redéfinir les raccourcis là-bas.

J'ai découvert que même gnome-terminal a cette option maintenant (je n'ai eu jusqu'à ce que je me soit habitué à Ctrl-Shift-C toute façon). Dans le cas où vous l'utilisez, accédez à Edit / Keyboard Shortcuts... dans le menu et attribuez Ctrl-C pour copier et Ctrl-V pour coller. Devrait être similaire pour konsole etc.

Et ne vous inquiétez pas, vous ne perdrez pas la possibilité de mettre fin à un programme en utilisant un raccourci. Après avoir relié le raccourci de copie pour le terminal, vous pouvez simplement utiliser Ctrl-Shift-C comme vous l'avez déjà utilisé Ctrl-C . Le terminal ne se distingue pas ici si Shift est pressé ou non. Et le raccourci n'est plus pris pour la copie. Alternativement, renvoyer la fin à un autre raccourci, comme suggère MountainX dans sa réponse.


XF86Copy etc. ne fonctionnent pas

Concernant les symboles clés pour copier et coller: Apparemment, ils n'ont aucun effet. Je l'ai testé rapidement en assignant l'action de copie à Shift-ScrollLock (il était inutilisé et je voulais tester avec une touche non modifiée):

 xmodmap -e 'keycode 78 = Scroll_Lock XF86Copy Scroll_Lock' 

En l'appuyant, il n'a eu aucun effet, ni avec XF86AudioMute. Toutefois, il a fonctionné lors de l'attribution de la lettre «a». Donc, je suppose qu'il y a un problème spécifique avec ces symboles clés spéciaux XF86.

Si vous souhaitez lier seulement quelques séquences de la forme Super + x, Super + c, Super + v à d'autres séquences comme Ctrl + x, Ctrl + c, Ctrl + v, par exemple afin que (comme l'OP souhaitait) ces Les séquences Super-clés particulières seront généralement utilisées pour couper et coller sans affecter d'autres utilisations de la Super-clé sur votre système, il est possible d'utiliser uniquement l'extension XKB. La procédure ci-dessous décrit les étapes et donne deux exemples différents de détails pour deux configurations de clavier de démarrage différentes; Nous espérons que cela fournira suffisamment d'informations pour s'adapter à votre système. Il suppose que vous êtes à l'aise avec la création et l'édition de fichiers sur votre système, y compris dans les emplacements système comme /usr/share/X11/xkb .

  1. Décidez où vous souhaitez que votre arbre de configuration XKB réside. Trouvez d'abord le système. Il est généralement dans / usr / share / X11 / xkb, et je ne suis pas certain de savoir s'il ne l'est pas; Vous pouvez simplement rechercher votre système pour les répertoires nommés "xkb". Quoi qu'il en soit, une fois que vous l'avez trouvé, vous pouvez soit modifier le système en place, soit vous pouvez utiliser n'importe quel répertoire de votre choix. L'avantage d'utiliser le répertoire système est que vous pouvez inviter beaucoup plus facilement vos modifications, mais l'inconvénient est que les futures mises à jour du système peuvent remplacer vos modifications (vous avez été averti). Dans tous les cas, tous les noms de fichiers mentionnés ci-après sont relatifs à ce répertoire, auquel je parlerai lorsque cela sera demandé $ XKBLOCAL $, et toutes les commandes supposent que c'est votre répertoire actuel.

  2. Déterminez ce que XKB "type" de clé les clés x, c, v actuelles sont. La manière la plus simple de le faire est via la commande xkbcomp -a $DISPLAY - | grep -C 6 c, xkbcomp -a $DISPLAY - | grep -C 6 c, (notez que la virgule est intentionnellement incluse dans le motif). Dans mon premier exemple d'installation, cela produit:

     key <AB02> { type= "ALPHABETIC", symbols[Group1]= [ x, X ] }; key <AB03> { type= "ALPHABETIC", symbols[Group1]= [ c, C ] }; key <AB04> { type= "ALPHABETIC", symbols[Group1]= [ v, V ] }; key <AB05> { 

    Alors que dans mon autre exemple, l'installation de ce produit

     key <AB02> { type= "FOUR_LEVEL", symbols[Group1]= [ x, X, approxeq, dead_ogonek ] }; key <AB03> { type= "FOUR_LEVEL", symbols[Group1]= [ c, C, ccedilla, Ccedilla ] }; key <AB04> { type= "FOUR_LEVEL", symbols[Group1]= [ v, V, squareroot, U25CA ] }; key <AB05> { 

    Le résultat est que, dans le premier exemple, les clés correspondantes sont de type "ALPHABETIC" alors qu'elles sont dans le deuxième exemple de type "FOUR_LEVEL". Selon votre configuration du clavier, vous pouvez constater qu'ils sont d'un autre type. Dans ce qui suit, le type sera appelé $ TYPE $, que vous devez remplacer par la chaîne ALPHABETIC réelle ou quoi que ce soit dans les commandes ci-dessous.

  3. Trouvez la définition de $ TYPE $ et copiez-le dans un nouveau fichier dans le répertoire $ XKBLOCAL $ / types. Voici une commande qui fait exactement cela: xkbcomp -a $DISPLAY - | grep -z -o 'type "$TYPE$" {[^}]*};' > types/cutpaste xkbcomp -a $DISPLAY - | grep -z -o 'type "$TYPE$" {[^}]*};' > types/cutpaste xkbcomp -a $DISPLAY - | grep -z -o 'type "$TYPE$" {[^}]*};' > types/cutpaste . Le nom du fichier "cutpaste" que j'ai choisi est arbitraire, utilisez le nom que vous souhaitez, mais notez que vous devrez vous référer à ce fichier régulièrement dans des étapes ultérieures. Dans la première configuration, ce fichier obtient le contenu

     type "ALPHABETIC" { modifiers= Shift+Lock; map[Shift]= Level2; map[Lock]= Level2; level_name[Level1]= "Base"; level_name[Level2]= "Caps"; }; 

    Et dans l'autre exemple, il obtient le contenu

     type "FOUR_LEVEL" { modifiers= Shift+LevelThree; map[Shift]= Level2; map[LevelThree]= Level3; map[Shift+LevelThree]= Level4; level_name[Level1]= "Base"; level_name[Level2]= "Shift"; level_name[Level3]= "Alt Base"; level_name[Level4]= "Shift Alt"; }; 
  4. Modifiez les types de fichiers / cutpaste pour faire deux choses: ajoutez un préambule et un post-tampon qui en fait une clause XKB appropriée, et modifiez le nom du type et la définition de type pour ajouter un niveau de plus produit par le modificateur correspondant à Super. Vous devriez vérifier ce que ce modificateur est sur votre système, il est probable que Mod4 soit utilisé ci-dessous. Les modifications nécessaires doivent être évidentes à partir des deux exemples de versions finales de types / coupe-couche, à savoir:

     default partial xkb_types "addsuper" { type "ALPHABETIC_SUPER" { modifiers= Shift+Lock+Mod4; map[Shift]= Level2; map[Lock]= Level2; map[Mod4]= Level3; map[Shift+Mod4]= Level3; map[Lock+Mod4]= Level3; level_name[Level1]= "Base"; level_name[Level2]= "Caps"; level_name[Level3]= "With Super"; }; }; 

    et

     default partial xkb_types "addsuper" { type "FOUR_LEVEL_SUPER" { modifiers= Shift+LevelThree+Mod4; map[Shift]= Level2; map[LevelThree]= Level3; map[Shift+LevelThree]= Level4; map[Mod4]= Level5; map[Shift+Mod4] = Level5; map[LevelThree+Mod4] = Level5; map[Shift+LevelThree+Mod4] = Level5; level_name[Level1]= "Base"; level_name[Level2]= "Shift"; level_name[Level3]= "Alt Base"; level_name[Level4]= "Shift Alt"; level_name[Level5]= "With Super"'; }; }; 
  5. Copiez les définitions des symboles de touches qui ont été générés par grep dans la deuxième étape dans un deuxième nouveau fichier symboles / cutpaste, et ajoutez un préambule et un postamble similaires, et modifiez les définitions pour utiliser les nouveaux types et ajoutez des actions à la définition pour gérer la clé désirée Produit par les versions Super. Les résultats de ces deux exemples sont les suivants:

     default partial xkb_symbols "superversions" { replace key <AB02> { type[Group1]= "ALPHABETIC_SUPER", symbols[Group1]= [ x, X, NoSymbol ], actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatX>,mods=Control,clearmods=Super)] }; replace key <AB03> { type[Group1]= "ALPHABETIC_SUPER", symbols[Group1]= [ c, C, NoSymbol ], actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatC>,mods=Control,clearmods=Super)] }; replace key <AB04> { type[Group1]= "ALPHABETIC_SUPER", symbols[Group1]= [ v, V, NoSymbol ], actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatV>,mods=Control,clearmods=Super)] }; }; 

    et

     default partial xkb_symbols "superversions" { replace key <AB02> { type[Group1]= "FOUR_LEVEL_SUPER", symbols[Group1]= [x,X,approxeq,dead_ogonek,NoSymbol], actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatX>,mods=Control,clearmods=Super)] }; replace key <AB03> { type[Group1]= "FOUR_LEVEL_SUPER", symbols[Group1]= [c,C,ccedilla,Ccedilla,NoSymbol], actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatC>,mods=Control,clearmods=Super)] }; replace key <AB04> { type[Group1]= "FOUR_LEVEL_SUPER", symbols[Group1]= [v,V,squareroot,U25CA,NoSymbol], actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatV>,mods=Control,clearmods=Super)] }; }; 

    Notez que dans le deuxième exemple, j'ai supprimé certains des espaces (non significatifs) pour garder la longueur de la ligne sous un peu de contrôle.

  6. Trouvez le nom des règles définies par XKB. C'est facile, il est montré dans le résultat de setxkbmap -query . Dans mon cas, c'était "evdev".

  7. Copiez la version système des règles / evdev (ou quel que soit le nom de votre configuration de règles) à $ XKBLOCAL $ / rules / evdev et ajoutez des règles indiquant les options que nous avons créées. Vous avez ici deux choix: vous pouvez copier tout Evdev ou simplement les parties mentionnant le modèle de clavier, la mise en page, la variante et les options que vous utilisez réellement. Bien sûr, si vous modifiez les fichiers système en place, vous n'avez pas besoin de copier, simplement d'éditer.

    Dans ce cas, ce qui s'ajoute est identique indépendamment de la configuration initiale du clavier, il n'y a qu'un exemple. Vous trouvez la section du fichier de règles qui commence ! option = symbols ! option = symbols et ajoutez une ligne de cutpaste:super = +cutpaste à cette section, et vous trouverez également la section du fichier de règles qui commence ! option = types ! option = types et une cutpaste:super = +cutpaste ligne cutpaste:super = +cutpaste à cette section aussi.

  8. Copiez la version système de evdev.lst et ajoutez une ligne pour votre nouvelle option. Notez que le nom de ce fichier correspond simplement au nom du fichier de règles avec .lst ajouté. Comme dans l'étape précédente, vous pouvez soit copier le fichier entier, soit simplement la partie référencée par le modèle, la mise en page, la variante et les options que vous utilisez. Il vous suffit de trouver la section de ce fichier qui commence ! option ! option et ajoutez une ligne comme celle-ci: cutpaste:super Add super equivalents of cut and paste operations à cette section.

  9. OK, maintenant tous les fichiers de configuration sont en place. Si vous avez modifié les fichiers système, vous pouvez maintenant appeler votre nouvelle option avec setxkbmap -option cutpaste:super . D'autre part, si vous ne l'avez pas fait, vous devez laisser savoir à setxkbmap votre répertoire $ XKBLOCAL $. Ce qui est pire, le serveur ne sait pas non plus où ce répertoire est, et setxkbmap n'a pas (ou peut-être ne peut pas, car, finalement, le serveur pourrait être exécuté sur une autre machine), dites-le. Donc, vous devez transférer la sortie de setxkbmap vers xkbcomp, et indiquer également la commande dans laquelle se trouve votre répertoire $ XKBLOCAL. La ligne de commande complète est donc setxkbmap -I$XKBLOCAL$ -option cutpaste:super -print | xkbcomp -I$XKBLOCAL - $DISPLAY setxkbmap -I$XKBLOCAL$ -option cutpaste:super -print | xkbcomp -I$XKBLOCAL - $DISPLAY .

Espérons que cela est utile / intéressant pour quelqu'un, car la documentation / référence XKB définitive est rare. Une référence très utile était http://madduck.net/docs/extending-xkb/ .

Voici ce que je fais. Ce n'est pas la solution ultime, mais j'ai essayé d'obtenir la solution ultime et je ne pouvais pas y arriver après de nombreux efforts. Je me suis donc arrangé pour quelque chose qui est simple et qui fonctionne pour plus de 90% de ce dont j'ai besoin. Je peux l'implémenter sur n'importe quel ordinateur auquel je vais (ou toute nouvelle installation Linux) en quelques minutes. C'est tout simplement simple.

Dans l'application du terminal X, définissez les préférences de raccourci. Je l'ai fait dans Gnome et KDE. Dans Konsole, par exemple, allez dans Menu> Paramètres> Configurer raccourcis. Il existe un menu similaire dans le terminal Gnome X. Sélectionnez simplement le raccourci (p. Ex., "Copie") et entrez la séquence de touches souhaitée.

Dans le cas où les raccourcis de copie et de copie de terminal entrent en conflit avec les commandes de terminal, il existe également une solution facile à résoudre. Par exemple, que faire si quelqu'un veut utiliser CTRL-C pour une copie (de sorte que le terminal X est conforme à la norme CUA)?

Dans ce cas, vous pouvez facilement modifier facilement les liens de clé stty (dans .bashrc). En continuant le CTRL-C pour l'exemple de copie, vous voulez que la touche d'interruption soit maintenant CTRL-b (pour "pause"). Cela accomplit cela:

 echo "stty intr \^b" >> ~/.bashrc 

Puis, source .bashrc.

Toute la solution est aussi simple que d'utiliser les paramètres des terminaux X pour modifier les raccourcis et, éventuellement, résoudre des conflits avec stty avec une commande echo one-line. Dead simple et couvre presque tout ce dont j'ai besoin.

Probablement la touche Windows est la touche modificatrice. Exécutez ceci et essayez à nouveau:

 xmodmap -e 'remove Mod4 = Super_L'