Comment puis-je définir une liaison de clé qui remplace globalement et a priorité sur toutes les autres liaisons pour cette clé? Je veux remplacer toutes les cartes de mode majeur / mineur et m'assurer que ma liaison est toujours en vigueur.
Cela ne fonctionne bien sûr pas:
(global-set-key "\C-i" 'some-function)
Ca marche dedans text-mode
, mais quand je l'utilise lisp-mode
, C-i
c'est rebondir lisp-indent-line
.
Je peux passer et remplacer cette liaison dans lisp-mode
et dans tous les autres modes individuellement, mais il doit y avoir un moyen plus simple. Chaque fois que j'installe un nouveau mode pour un nouveau type de fichier, je devrais revenir en arrière et vérifier que toutes mes combinaisons de touches ne sont pas remplacées par le nouveau mode.
Je veux faire cela parce que je veux émuler des liaisons que j'ai déjà apprises et enracinées auprès d'autres éditeurs.
la source
En complément de la réponse de Scottfrazer , j'ai écrit ce qui suit afin que mes raccourcis clavier conservent la priorité, même si les bibliothèques chargées par la suite apportent leurs propres keymaps.
Parce que les keymaps peuvent être générés au moment de la compilation, cela
load
semblait être le meilleur endroit pour le faire.la source
Installez
use-package
, évaluez et vous avez terminé:la source
use-package
:Install package: use-package [No Match]
J'ai trouvé cette question en cherchant "emacs undefine org mode keybindings", parce que je voulais dissocier le comportement Cc Cb existant pour permettre à ma carte globale de bury-buffer de fonctionner dans un buffer org.
Cela a fini par être la solution la plus simple pour moi:
la source
Bien que la réponse de Scottfrazer soit exactement ce que vous avez demandé, je mentionnerai pour la postérité une autre solution.
À partir du manuel Emacs :
Si vous liez vos liaisons globales personnelles à Cc plus une lettre, alors vous «devriez» être en sécurité. Cependant, il ne s'agit que d'une convention et n'importe quel mode est toujours capable de remplacer vos liaisons.
la source
Si vous voulez "toujours utiliser les raccourcis clavier dans la carte, à moins que je ne les remplace explicitement pour une carte de mode spécifique", et en supposant que vous utilisez l'approche de scottfrazier , vous voulez:
Alors
devrait supprimer la liaison "\ Ci" du mode mineur dans le tampon courant uniquement. Attention: ceci n'a pas été testé, mais semble être la bonne approche. Le point de définir le parent plutôt que de simplement copier la valeur globale de my-keys-minor-mode-map est que toute modification ultérieure de la valeur globale est automatiquement reflétée dans la valeur locale.
la source
Je ne pense pas que vous puissiez. Cela revient à peu près à dire que vous voulez définir une variable globale qui ne peut pas être masquée par les déclarations de variables locales dans les fonctions. La portée ne fonctionne tout simplement pas de cette façon.
Cependant, il peut y avoir un moyen d'écrire une fonction elisp pour parcourir la liste des modes et la réaffecter dans chacun d'eux pour vous.
la source
overriding-local-map
est spécifiquement conçue pour remplacer toutes les autres cartes. Cependant, il est dangereux de l'utiliser.À moins que vous ne vouliez vraiment le faire vous-même, vous devriez vérifier et voir si quelqu'un d'autre l'a déjà fait.
Il existe un package pour Emacs qui donne à vos raccourcis clavier de type Windows. Vous devriez pouvoir le trouver via google.
la source
cua-mode
.