Emacs: Làm cách nào để chèn 'λ' thay vì 'lambda' trong chế độ Scheme?


10

Cách đây rất lâu, tôi đã bắt gặp một chức năng soạn thảo văn bản thay thế từ 'lambda' bằng ký tự ''. Tôi muốn làm điều này trong emacs. Sở thích của tôi:

  • Tôi chỉ muốn kích hoạt chức năng này ở một số chế độ (kích hoạt nó cho chế độ Scheme nhưng tắt nó ở chế độ C chẳng hạn).

  • Trong công việc tôi vẫn sử dụng một phiên bản cũ hơn của emacs, vì vậy giải pháp nên hoạt động cho emacs22 và emacs23.

Tôi nên tiến hành như thế nào?

Câu trả lời:


8

Bạn tạo một hook chế độ, thay thế lambdabằng ký tự Hy Lạp.

   (defun sm-greek-lambda ()
       (font-lock-add-keywords nil `(("\\<lambda\\>"
           (0 (progn (compose-region (match-beginning 0) (match-end 0)
           ,(make-char 'greek-iso8859-7 107))
           nil))))))

Sau đó, bạn thêm móc này vào chế độ của bạn:

   (add-hook 'emacs-lisp-mode-hook 'sm-greek-lambda)

2
Nó sẽ tốt hơn để đổi tên sm-lambda-mode-hookbằng sm-replace-lambdahoặc sm-greek-lambda. XXX-mode-hookthường được sử dụng để xác định các hook được chạy bởi run-hookchế độ chỉ định và do đó bạn có thể sử dụng add-hook.
Daimrod

Có phải make-charchỉ để hỗ trợ 22?
Jon Purdy

@Daimrod: Bạn có thể giải thích sự khác biệt giữa a XXX-mode-hookvà tùy chỉnh này được xác định trong câu trả lời không? Hoặc ít nhất là chỉ cho tôi một tài liệu hữu ích?
rahmu

@rahmu: xxx-mode-hookthường là tên của hook hook - with run-hooks- by mode xxx. tức emacs-lisp-mode-hooklà được chạy khi hàm emacs-modeđược gọi. Trong trường hợp này, không có hook nào được chạy nhưng một chức năng được thêm vào hook. Nhìn vào Hướng dẫn Elisp (Móc) để biết thêm thông tin.
Daimrod

@rahmu: Chỉ cần thêm một ví dụ nhỏ, bạn có thể làm (add-hook 'emacs-lisp-mode-hook 'some-function)nhưng (add-hook 'sm-lambda-mode-hook 'some-function)sẽ không bao giờ hoạt động trừ khi bạn có một đoạn mã nào đó (run-hooks 'sm-lambda-mode-hook).
Daimrod
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.