Configurando combinações de teclas específicas no modo principal no emacs

9

No meu .emacsarquivo, quero adicionar uma ligação de tecla para um modo principal específico (configurando coffee-compile-filecomo C-c C-cno modo café).

Encontrei muitas instruções de uso local-set-keye global-set-key, portanto, posso adicionar facilmente essa ligação depois de abrir um arquivo no modo café, mas seria bom que isso fosse tratado .emacs.

Jeff
fonte

Respostas:

8

Use o gancho de modo. C-h mmostra informações sobre o modo principal, geralmente incluindo quais ganchos são suportados; então você faz algo como

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

Você pode definir a chave no mapa específico do modo, algo como:

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

Ou, de maneira mais limpa:

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

A segunda instrução faz com que a definição de chave aconteça apenas uma vez, enquanto a primeira faz com que a definição aconteça sempre que coffee-modeé ativada (o que é um exagero).

Trey Jackson
fonte
2
FYI: esses parênteses estão no lugar errado. Este add-hook deve ler: (add-hook 'coffee-mode-hook (lambda () (define-key coffee-mode-map (kbd "C-c c") 'coffee-compile-file)))
owenmarshall
Além disso, por que defini-lo em um gancho?
Nikana Reklawyks
@NikanaReklawyks Você está certo, defini-lo em um gancho não é tão limpo quanto usar uma eval-after-loaddeclaração neste caso. Vou atualizar a resposta adequadamente.
Trey Jackson
3

O Emacs 24.4 substituiu eval-after-loadcom with-eval-after-load:

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

Então a resposta deve 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
fonte