Emac'larda ana moda özgü tuş bağlamalarını ayarlama


9

Benim içinde .emacsdosyanın, ben (ayarı belirli majör modu için bağlayıcı bir anahtar eklemek istediğiniz coffee-compile-fileiçin C-c C-ckahve modunda).

Kullanmayla ilgili birçok talimat buldum local-set-keyve global-set-keybu nedenle kahve modunda bir dosya açtıktan sonra bu bağlayıcıyı kolayca ekleyebilirim, ancak bunun ele alınması iyi olurdu .emacs.

Yanıtlar:


8

Mod kancasını kullanın. C-h mgenellikle hangi kancaları desteklediğini içeren ana mod hakkında bilgi gösterir; o zaman böyle bir şey yaparsın

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

6

Anahtarı moda özgü haritada tanımlayabilirsiniz, şuna benzer:

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

Veya daha temiz:

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

İkinci ifade, anahtar tanımın sadece bir kez gerçekleşmesine neden olurken, ilk ifade tanımın her coffee-modeetkinleştirildiğinde (aşırıya kaçan) gerçekleşmesine neden olur .


2
Bilginize: Bu ebeveynler yanlış yerde. Bu add-hook okumalı:(add-hook 'coffee-mode-hook (lambda () (define-key coffee-mode-map (kbd "C-c c") 'coffee-compile-file)))
owenmarshall

Ayrıca, neden bir kancada tanımlanıyor?
Nikana Reklawyks

@NikanaReklawyks Haklısınız, bir kancada tanımlamak eval-after-loadbu durumda bir ifade kullanmak kadar temiz değildir . Cevabı uygun şekilde güncelleyeceğim.
Trey Jackson

3

Emacs 24.4 yerini eval-after-loadile with-eval-after-load:

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

Yani cevap

(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
)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.