Establecer combinaciones de teclas específicas del modo principal en emacs

9

En mi .emacsarchivo, quiero añadir una clave de unión para un modo mayor específica (ajuste coffee-compile-filea C-c C-cen el café-mode).

He encontrado muchas instrucciones sobre el uso local-set-keyy global-set-key, por lo que puedo agregar fácilmente este enlace una vez que haya abierto un archivo en modo café, pero sería bueno que esto se maneje .emacs.

Jeff
fuente

Respuestas:

8

Usa el gancho de modo. C-h mmuestra información sobre el modo principal, que generalmente incluye los ganchos que admite; entonces haces algo como

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

Puede definir la clave en el mapa específico del modo, algo como:

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

O, más limpiamente:

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

La segunda declaración hace que la definición clave solo suceda una vez, mientras que la primera hace que la definición suceda cada vez que coffee-modeestá habilitada (lo cual es excesivo).

Trey Jackson
fuente
2
FYI: estos padres están en el lugar equivocado. Este complemento debe leer: (add-hook 'coffee-mode-hook (lambda () (define-key coffee-mode-map (kbd "C-c c") 'coffee-compile-file)))
owenmarshall
Además, ¿por qué definirlo en un gancho?
Nikana Reklawyks
@NikanaReklawyks Tienes razón, definirlo en un gancho no es tan limpio como usar una eval-after-loaddeclaración en este caso. Actualizaré la respuesta adecuadamente.
Trey Jackson
3

Emacs 24.4 reemplazado eval-after-loadcon with-eval-after-load:

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

Entonces la respuesta debería ser

(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
fuente