Définition de raccourcis clavier spécifiques au mode principal dans emacs

9

Dans mon .emacsfichier, je veux ajouter une liaison de touches pour un mode majeur spécifique (réglage coffee-compile-filesur C-c C-cen mode café).

J'ai trouvé beaucoup d'instructions sur l'utilisation de local-set-keyet global-set-key, donc je peux facilement ajouter cette liaison une fois que j'ai ouvert un fichier en mode café, mais ce serait bien que cela soit géré par .emacs.

Jeff
la source

Réponses:

8

Utilisez le crochet de mode. C-h maffiche des informations sur le mode principal, y compris généralement les crochets qu'il prend en charge; alors vous faites quelque chose comme

(add-hook 'coffee-mode-hook ;; guessing
    '(lambda ()
       (local-set-key "\C-cc" 'coffee-compile-file)))
geekosaure
la source
6

Vous pouvez définir la clé dans la carte spécifique au mode, quelque chose comme:

(add-hook 'coffee-mode-hook
    (lambda ()
        (define-key coffee-mode-map (kbd "C-c c") 'coffee-compile-file)))

Ou, plus proprement:

(eval-after-load "coffee-mode"
    '(define-key coffee-mode-map (kbd "C-c c") 'coffee-compile-file))

La deuxième instruction fait que la définition de clé ne se produit qu'une seule fois, tandis que la première fait que la définition se produit chaque fois qu'elle coffee-modeest activée (ce qui est excessif).

Trey Jackson
la source
2
FYI: ces parens sont au mauvais endroit. Ce crochet supplémentaire devrait se lire: (add-hook 'coffee-mode-hook (lambda () (define-key coffee-mode-map (kbd "C-c c") 'coffee-compile-file)))
owenmarshall
Aussi, pourquoi le définir dans un crochet?
Nikana Reklawyks
@NikanaReklawyks Vous avez raison, le définir dans un crochet n'est pas aussi propre que d'utiliser une eval-after-loaddéclaration dans ce cas. Je mettrai à jour la réponse de manière appropriée.
Trey Jackson
3

Emacs 24.4 remplacé eval-after-loadpar with-eval-after-load:

** New macro `with-eval-after-load'.
This is like the old `eval-after-load', but better behaved.

La réponse devrait donc être

(with-eval-after-load 'coffee-mode
  (define-key coffee-mode-map (kbd "C-c C-c") 'coffee-compile-file)
  (define-key erlang-mode-map (kbd "C-c C-m") 'coffee-make-coffee)
  ;; Add other coffee commands
)
Blaz
la source