2017-08-20 1 views
2

Je sais que je peux déconnecter les touches en utilisant unbind-key. Dans ce cas, je dois connaître la clé que je veux délier. Mais je ne connais pas la clé. Je veux juste délier toutes les clés de some-mode-map. Je ne veux pas les contourner, je veux juste les délier et ensuite définir mes propres clés dans le some-mode-map. Je sais que je pourrais itérer some-mode-map et appliquer unbind-key, mais peut-être il y a une solution plus simple? Et je ne sais pas comment itérer un keymap.Emacs: déconnecter toutes les clés d'une carte en mode partiel

Mise à jour

Essayé (comme cela a été suggéré par phils dans les commentaires) de cette façon et il ne fonctionne pas:

(use-package neotree 
    :config 
    (setq neotree-mode-map (make-sparse-keymap)) 
    (define-key neotree-mode-map (kbd "RET") 'neotree-enter) 
) 
(use-package evil 
    :init 
    (setq evil-overriding-maps '((neotree-mode-map))) 
) 

neotree-mode-map reste pas nettoyé. Et en fonction de l'ordre de configuration du package, les liaisons evil sont remplacées. Ce n'est pas le cas sauf si je redéfinis neotree-mode-map. Je sais que je pourrais obtenir le résultat désiré avec evil-define-key, mais je veux garder les paramètres spécifiques au paquet dans son propre fichier de configuration. Si j'emploie evil-define-key, neotree définitions clés de liaison seront setup-evil.el et non pas dans setup-neotree.el

Mise à jour 2

Answer œuvres, tout comme (setq neotree-mode-map (make-sparse-keymap)). Mais il semble que neotree-mode-map a une carte mère, et c'est pourquoi certaines liaisons de touches "reviennent" après "nettoyage". Une autre chose que j'ai compris, c'est que evil mis en cartes prioritaires certaines informations supplémentaires.

(keymap 
... 
(override-state . all) 
... 
) 

Et voilà pourquoi je devrais effacer carte avant evil configuration.

+0

Une quasi-copie de https://emacs.stackexchange.com/questions/32389/how-do-you-disable-all-keybinding-for-a-package – phils

+0

Etes-vous sûr que 'neotree-mode-map '" * reste non nettoyé * "? Ou est-ce que vous avez correctement redéfini cette * variable * mais que le code existant pointe encore, * pas * vers la variable, mais vers son ancienne * valeur * (un keymap, c'est-à-dire une liste)? Qu'est-ce que 'C-h v neotree-mode-map' vous en dit? (Ou utilisez 'Ch Mk' (' describe-keymap') de la bibliothèque ['help-fns + .el'] (https://www.emacswiki.org/emacs/download/help-fns%2b.el), pour une fiche lisible par l'homme des liaisons keymap) – Drew

+0

'valeur neotree-mode-map' est la suivante:. ' '' valeur: (. keymap (OVERRIDE-état tout) (13 neotree-Entrée.) keymap (103. revert-buffer) (60. début de tampon) (62. fin de tampon) (104. describe-mode) (63. describe-mode) (127. commande) (33554464.commande de défilement vers le bas) ... (argument négatif de 45) (remapper le clavier \t (commande d'insertion automatique undefined))) '' ' – nicolai

Répondre

0

Vous pouvez gut toutes les liaisons dans un Keymap les éléments suivants:

(setf (cdr <keymap>) nil) 

Je pense que dans la pratique, il est rare que vraiment ce que vous voulez, parce qu'il y aura des liaisons vous ne savais pas été utile (par exemple ceux correspondant aux entrées de menubar), mais vous obtenez ce que vous avez demandé. En ce qui concerne l'itération d'une table de touches, vous pouvez utiliser map-keymap pour cela.