Ustawianie skrótów klawiszowych specyficznych dla trybu głównego w emacsie

9

W moim .emacspliku chcę dodać powiązanie klawisza dla określonego trybu głównego (ustawienie coffee-compile-filena C-c C-ctryb kawy).

Znalazłem wiele instrukcji dotyczących używania local-set-keyi global-set-key, więc mogę łatwo dodać to powiązanie, gdy otworzę plik w trybie kawy, ale byłoby miło, gdyby sobie z tym poradził .emacs.

Jeff
źródło

Odpowiedzi:

8

Użyj haka trybu. C-h mpokazuje informacje o głównym trybie, zwykle włączając obsługiwane haki (haki); wtedy robisz coś takiego

(add-hook 'coffee-mode-hook ;; guessing
    '(lambda ()
       (local-set-key "\C-cc" 'coffee-compile-file)))
geekozaur
źródło
6

Możesz zdefiniować klucz na mapie specyficznej dla trybu, na przykład:

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

Lub bardziej czysto:

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

Druga instrukcja powoduje, że definicja klucza pojawia się tylko raz, podczas gdy pierwsza powoduje, że definicja coffee-modepojawia się za każdym razem, gdy jest włączona (co jest nadmierną mocą).

Trey Jackson
źródło
2
Do Twojej wiadomości: te pareny znajdują się w niewłaściwym miejscu. Ten haczyk powinien brzmieć: (add-hook 'coffee-mode-hook (lambda () (define-key coffee-mode-map (kbd "C-c c") 'coffee-compile-file)))
owenmarshall
A po co definiować to w haczyku?
Nikana Reklawyks
@NikanaReklawyks Masz rację, zdefiniowanie go w haczyku nie jest tak czyste, jak użycie eval-after-loadinstrukcji w tym przypadku. Odpowiednio zaktualizuję odpowiedź.
Trey Jackson,
3

Emacs 24.4 zastąpiony eval-after-loadprzez with-eval-after-load:

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

Tak powinna być odpowiedź

(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
źródło