Установка привязок клавиш для основных режимов в 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
К вашему сведению: эти парены находятся не в том месте. Этот адд-хук должен гласить: (add-hook 'coffee-mode-hook (lambda () (define-key coffee-mode-map (kbd "C-c c") 'coffee-compile-file)))
owenmarshall

Кроме того, зачем определять это в крючке?
Никана Рекламикс

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