Emacs: Bagaimana cara memasukkan 'λ' alih-alih 'lambda' dalam mode Skema?


10

Dahulu, saya menemukan fungsi editor teks yang menggantikan kata 'lambda' dengan karakter 'λ'. Saya ingin melakukan ini di emacs. Preferensi saya:

  • Saya ingin mengaktifkan fungsi ini dalam mode tertentu saja (mengaktifkannya untuk mode-Skema tetapi mematikannya untuk mode-C misalnya).

  • Di tempat kerja saya masih menggunakan emacs versi lama, jadi solusinya harus bekerja untuk emacs22 dan emacs23.

bagaimana saya harus melanjutkan?

Jawaban:


8

Anda membuat kait mode, yang menggantikan lambdadengan karakter Yunani.

   (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))))))

Kemudian Anda menambahkan pengait ini ke mode Anda:

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

2
Akan lebih baik untuk mengganti nama sm-lambda-mode-hookdengan sm-replace-lambdaatau sm-greek-lambda. XXX-mode-hookbiasanya digunakan untuk mengidentifikasi kait yang dijalankan oleh run-hookmode yang ditentukan dan dengan demikian Anda dapat menggunakannya add-hook.
Daimrod

Apakah make-charhanya untuk mendukung 22?
Jon Purdy

@Daimrod: Bisakah Anda jelaskan perbedaan antara a XXX-mode-hookdan custom yang ditentukan dalam jawaban ini? Atau setidaknya tunjukkan saya ke dokumentasi yang bermanfaat?
rahmu

@rahmu: xxx-mode-hookbiasanya nama hook dijalankan - dengan run-hooks- oleh mode xxx. yaitu emacs-lisp-mode-hookdijalankan ketika fungsi emacs-modedipanggil. Dalam hal ini, tidak ada pengait yang dijalankan tetapi suatu fungsi ditambahkan ke pengait. Lihatlah Manual Elisp (Kait) untuk informasi lebih lanjut.
Daimrod

@rahmu: Hanya dengan menambahkan contoh kecil, Anda dapat melakukannya (add-hook 'emacs-lisp-mode-hook 'some-function)tetapi (add-hook 'sm-lambda-mode-hook 'some-function)tidak akan pernah berfungsi kecuali Anda memiliki beberapa kode yang berfungsi (run-hooks 'sm-lambda-mode-hook).
Daimrod
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.