Mengatur key-binding spesifik mode utama di emacs


9

Dalam .emacsfile saya , saya ingin menambahkan kunci yang mengikat untuk mode utama spesifik (pengaturan coffee-compile-fileke C-c C-cdalam mode kopi).

Saya telah menemukan banyak instruksi tentang cara menggunakan local-set-keydan global-set-key, jadi saya dapat dengan mudah menambahkan pengikatan ini setelah saya membuka file dalam mode kopi, tetapi akan lebih baik jika ini ditangani .emacs.

Jawaban:


8

Gunakan kait mode. C-h mmemperlihatkan informasi tentang mode utama, biasanya termasuk kait apa yang didukungnya; maka Anda melakukan sesuatu seperti

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

6

Anda dapat menentukan kunci di peta mode khusus, seperti:

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

Atau, lebih bersih:

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

Pernyataan kedua menyebabkan definisi kunci hanya terjadi sekali, sedangkan yang pertama menyebabkan definisi terjadi setiap kali coffee-modediaktifkan (yang berlebihan).


2
FYI: orangtua ini ada di tempat yang salah. Add-hook ini seharusnya berbunyi: (add-hook 'coffee-mode-hook (lambda () (define-key coffee-mode-map (kbd "C-c c") 'coffee-compile-file)))
owenmarshall

Juga, mengapa mendefinisikannya dalam kaitan?
Nikana Reklawyks

@NikanaReklawyks Anda benar, mendefinisikannya di hook tidak sebersih menggunakan eval-after-loadpernyataan dalam kasus ini. Saya akan memperbarui jawabannya dengan tepat.
Trey Jackson

3

Emacs 24.4 digantikan eval-after-loaddengan with-eval-after-load:

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

Jadi jawabannya harus

(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
)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.