Emacs: วิธีแทรก 'λ' แทน 'lambda' ในโหมด Scheme ได้อย่างไร?


10

นานมาแล้วฉันได้พบกับฟังก์ชั่นแก้ไขข้อความที่แทนที่คำว่า 'แลมบ์ดา' ด้วยตัวอักษร 'λ' ฉันต้องการทำสิ่งนี้ใน emacs การตั้งค่าของฉัน:

  • ฉันต้องการเปิดใช้งานฟังก์ชั่นนี้ในบางโหมดเท่านั้น (เปิดใช้งานสำหรับโหมด Scheme แต่ปิดเช่น C-mode)

  • ที่ทำงานฉันยังคงใช้ emacs รุ่นเก่ากว่าดังนั้นโซลูชันควรทำงานกับ emacs22 และ emacs23

ฉันควรดำเนินการอย่างไร

คำตอบ:


8

คุณสร้างเบ็ดโหมดซึ่งแทนที่lambdaด้วยอักขระภาษากรีก

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

จากนั้นคุณเพิ่มเบ็ดนี้ในโหมดของคุณ:

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

2
มันจะดีกว่าที่จะเปลี่ยนชื่อsm-lambda-mode-hookจากหรือsm-replace-lambda มักจะใช้เพื่อระบุ hooks ที่รันโดยโหมดที่ระบุซึ่งคุณสามารถใช้ได้ sm-greek-lambdaXXX-mode-hookrun-hookadd-hook
Daimrod

คือmake-charเพียงแค่มีการสนับสนุน 22?
จอน Purdy

@Daimrod: คุณช่วยอธิบายความแตกต่างระหว่าง a XXX-mode-hookและ custom ที่กำหนดไว้ในคำตอบได้ไหม? หรืออย่างน้อยก็ชี้ให้ฉันไปที่เอกสารที่มีประโยชน์?
rahmu

@rahmu: xxx-mode-hookมักจะเป็นชื่อของวิ่งเบ็ด - มีrun-hooks- xxxโดยโหมด ie emacs-lisp-mode-hookคือวิ่งเมื่อฟังก์ชั่นที่emacs-modeเรียกว่า ในกรณีนี้ไม่มีการรัน hook แต่เพิ่มฟังก์ชันลงใน hook ดูคู่มือ Elisp (Hooks)สำหรับข้อมูลเพิ่มเติม
Daimrod

@rahmu: เพียงเพื่อเพิ่มตัวอย่างเล็ก ๆ ที่คุณสามารถทำได้(add-hook 'emacs-lisp-mode-hook 'some-function)แต่จะไม่ทำงานจนกว่าคุณจะได้ชิ้นส่วนบางส่วนของรหัสที่ไม่(add-hook 'sm-lambda-mode-hook 'some-function) (run-hooks 'sm-lambda-mode-hook)
Daimrod
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.