Đặt các phím bấm cụ thể ở chế độ chính trong emacs


9

Trong tôi .emacstập tin, tôi muốn thêm một chìa khóa bắt buộc đối với một chế độ chính cụ thể (thiết coffee-compile-fileđể C-c C-ctrong cà phê-mode).

Tôi đã tìm thấy rất nhiều hướng dẫn về cách sử dụng local-set-keyglobal-set-keyvì vậy tôi có thể dễ dàng thêm ràng buộc này một khi tôi đã mở một tệp ở chế độ cà phê, nhưng sẽ rất tốt nếu xử lý nó .emacs.

Câu trả lời:


8

Sử dụng móc chế độ. C-h mhiển thị thông tin về chế độ chính, thường bao gồm những gì hook (s) nó hỗ trợ; sau đó bạn làm một cái gì đó như

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

6

Bạn có thể xác định khóa trong bản đồ cụ thể của chế độ, đại loại như:

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

Hoặc, sạch sẽ hơn:

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

Câu lệnh thứ hai khiến định nghĩa khóa chỉ xảy ra một lần, trong khi câu lệnh thứ nhất khiến định nghĩa xảy ra mỗi lần coffee-modeđược bật (đó là quá mức cần thiết).


2
FYI: những parens này ở sai vị trí. Phần bổ trợ này nên đọc: (add-hook 'coffee-mode-hook (lambda () (define-key coffee-mode-map (kbd "C-c c") 'coffee-compile-file)))
owenmarshall

Ngoài ra, tại sao xác định nó trong một cái móc?
Nikana Reklawyks

@NikanaReklawyks Bạn nói đúng, việc xác định nó trong một cái móc không rõ ràng như sử dụng một eval-after-loadtuyên bố trong trường hợp này. Tôi sẽ cập nhật câu trả lời thích hợp.
Trey Jackson

3

Emacs 24.4 thay thế eval-after-loadbằng with-eval-after-load:

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

Vì vậy, câu trả lời nên được

(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
)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.