Đặ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-keyvà global-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 cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.