39 votes

Comment supprimer une touche d'un keymap de mode mineur dans Emacs?

J'ai assigné globalement C-c/ à ace-jump-mode mais reftex-mode (un mode mineur pour les citations utilisé avec AucTeX) remplace cette touche avec une fonction que je n'utilise jamais.

J'ai essayé local-unset-key mais cela ne désassigne que les touches de la carte du major mode actuel.

Comment puis-je supprimer C-c/ de reftex-mode-map sans apporter de modifications à reftex.el ?

52voto

Lindydancer Points 13353

Vous pouvez modifier une touche de raccourci existante en utilisant define-key. En passant nil comme fonction à appeler, la touche deviendra sans affectation. Je suppose que vous devriez pouvoir faire quelque chose comme ceci :

(define-key reftex-mode-map "\C-c/" nil)

Bien sûr, vous devriez le faire dans une sorte d'accroche, par exemple :

(defun my-reftex-hook ()
  (define-key reftex-mode-map "\C-c/" nil))
(add-hook 'reftex-mode-hook 'my-reftex-hook)

7voto

Alex Ott Points 14329

Vous pouvez utiliser la commande suivante :

(define-key reftex-mode-map "\C-c/" nil)

pour supprimer la liaison de cette fonction de C-c /... Mais reftex-mode doit être chargé, donc reftex-mode-map sera disponible pour modification

1voto

knobo Points 66

C'est ainsi que je le fais. Cela pourrait être amélioré, cependant.

 (defun get-key-combo (key)
  "Juste retourner la combinaison de touches saisie par l'utilisateur"
  (interactive "kCombinaison de touches : ")
  key)

(defun keymap-unset-key (key keymap)
    "Supprimer la liaison de la touche KEY dans un keymap
    KEY est une chaîne ou un vecteur représentant une séquence de frappes de touches."
    (interactive
     (list (call-interactively #'get-key-combo)
           (completing-read "Quel map : " minor-mode-map-alist nil t)))
    (let ((map (rest (assoc (intern keymap) minor-mode-map-alist))))
      (when map
        (define-key map key nil)
        (message  "%s délié pour %s" key keymap))))
;;
;; Ensuite, utilisez-le de manière interactive
;; Ou comme ceci :

(keymap-unset-key  '[C-M-gauche]   "paredit-mode")
..
..

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X