Встановлення специфічних сполук клавіатури для основного режиму в emacs


9

У моєму .emacsфайлі, я хочу , щоб додати ключ прив'язки для конкретного основного режиму (установка coffee-compile-fileдля C-c C-cв кава-режимі).

Я знайшов багато вказівок щодо використання local-set-keyі global-set-key, тому я легко можу додати цю прив'язку, коли я відкрию файл у режимі кави, але було б непогано, щоб цим займався .emacs.

Відповіді:


8

Використовуйте гачок режиму. C-h mпоказує інформацію про основний режим, як правило, включаючи, який гак (и) він підтримує; то ти робиш щось подібне

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

6

Ви можете визначити ключ на картці конкретного режиму, наприклад:

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

Або, більш чисто:

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

Друге твердження призводить до того, що ключове визначення відбувається лише один раз, тоді як перше спричиняє визначення кожного разу, коли coffee-modeце вмикається (що є надмірним).


2
FYI: ці парени не в тому місці. Цей додаток повинен читати: (add-hook 'coffee-mode-hook (lambda () (define-key coffee-mode-map (kbd "C-c c") 'coffee-compile-file)))
Owenmarshall

Крім того, навіщо визначати це в гачку?
Nikana Reklawyks

@NikanaReklawyks Ви маєте рацію, визначати це в гачку не так чисто, як використовувати eval-after-loadзаяву в цьому випадку. Відповідь я оновлю належним чином.
Трей Джексон

3

Emacs 24.4 замінено eval-after-loadна with-eval-after-load:

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

Тож відповідь має бути

(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
)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.