Parfois, mes combinaisons de touches globales sont remplacées par un mode majeur. Un exemple simple est le paramètre suivant dans mon fichier init
(global-set-key (kbd "C-j") 'newline-and-indent)
Mais, ce qui est gênant, cette liaison est masquée par le mode majeur "Lisp Interaction", qui est le mode par défaut du tampon de travail.
Lorsque je me trouve dans une situation où un mode majeur (ou un mode mineur) masque ma liaison de clé globale, comment puis-je la récupérer?
Note: Ma question n'est pas « Comment puis - je lier C-j
à newline-and-indent
« ? Mode » dans » Lisp Interaction Je suis intéressé par une réponse beaucoup plus générale sur la façon de traiter les keymaps en conflit ou les associations de touches utilisateur qui sont masquées par un mode majeur / mineur.
Réponses:
Il existe également une approche de "raccourci" pour la même solution si vous ne souhaitez pas définir votre propre mode mineur (dont je parle dans ma première réponse).
Vous pouvez installer le
use-package
package disponible à partir Melpa et utiliserbind-key*
oubind-keys*
macro qui fait partie dubind-key
paquet qui est livré avecuse-package
.De la documentation de
bind-key.el
:la source
emulation-mode-map-alists
pour appliquer la priorité.(bind-key* "C-M-&" 'override-global-mode)
à votre init, et vous pouvez généralement obtenir les liaisons de votre chemin rapidement si vous en avez besoin. Étant donné qu’iloverride-global-mode
ne s’agit pas d’un mode mineur «global», vous devrez toujours le désactiver, tampon par tampon. Donc, si vous désactivez fréquemment les clés de substitution globales, cette solution n’est pas pratique.Vous pouvez définir votre propre mode mineur et sa carte de touches et faire en sorte que ceux-ci remplacent tous les autres modes (mineur + majeur). C'est exactement pourquoi j'ai choisi d'écrire mon propre mode mineur.
Étapes à suivre pour que vos liaisons de clé remplacent toutes les liaisons:
(define-key my-mode-map (kbd "C-j") #'newline-and-indent)
De même, les autres raccourcis clavier définis dans votre mode mineur remplaceront ceux des autres modes.
Je recommande fortement de lire le billet de blog de Christopher Wellons sur la façon d'écrire un mode mineur. Ce blog, ajouté à la contrariété de devoir définir plusieurs raccourcis clavier
nil
dans plusieurs modes majeurs et mineurs, m'a incité à écrire mon propre mode mineur.La meilleure partie de cette approche est que, lorsque vous voulez vérifier ce que les raccourcis-clés font dans la configuration par défaut d’emacs, vous désactivez simplement le mode mineur; vous le rallumez et vous retrouvez vos raccourcis clavier personnalisés.
la source
Pour qu'une liaison globale remplace une liaison en mode majeur, définissez simplement la liaison sur
nil
dans le mode majeur:Il n’est pas possible d’avoir la liaison globale prioritaire sur tous les modes en général (sinon il ne servirait à rien d’avoir des modes majeurs), mais vous pouvez le contourner en créant votre propre mode mineur avec vos liaisons les plus importantes. Dans ce cas, vous auriez au moins préséance sur la plupart des modes (mais pas nécessairement sur tous).
la source
(define-key foo-mode (kbd "C-j") nil)
mon fichier .emacs dans l'espoir que cela fonctionne?foo-mode-map
(mon exemple de réponse était mauvais), mais oui, cela désactivera la liaison de clé dans le mode majeur, de sorte que la liaison de clé globale sera utilisée à la place (à moins qu'un mode mineur différent ne l'utilise).foo-mode
soit appeléfoo-mode-map
?Vous pouvez utiliser ces macros:
EDIT :
Vérifiez l'exemple ci-dessous:
Si le clavier X supprime votre liaison globale Y, vous écrivez:
(expose-bindings X '("Y"))
Et alors la dérogation sera «annulée».
la source
other map
, exposant ainsi la liaison de la carte globale par le biais deother map
. La seconde vous permet simplement d’appliquer l’ancien à une liste de liaisons.expose-bindings
commence par exécuter et ensuite, je lie globalement ces clés aux commandes que je veux? Vous pourriez peut-être montrer un exemple de ce que je pourrais mettre dans mon fichier init pour que cela fonctionne.