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.

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)))

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).


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
)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.