Emacs: Як вставити "λ" замість "лямбда" в режимі схеми?


10

Давно я натрапив на функцію редактора тексту, яка замінила слово "лямбда" символом "λ". Я хотів би це зробити в emacs. Мої вподобання:

  • Я хотів би активувати цю функцію лише в певних режимах (активувати її в режимі Scheme, але вимкнути її, наприклад, для C-режиму).

  • На роботі я все ще використовую старішу версію 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або sm-greek-lambda. XXX-mode-hookзазвичай використовується для ідентифікації гачків, якими run-hookкерує заданий режим, і таким чином, яким ви можете користуватися add-hook.
Даймрод

Чи make-charпросто існує підтримка 22?
Джон Перді,

@Daimrod: Чи можете ви поясніть різницю між а XXX-mode-hookта цим нестандартним, визначеним у відповіді? Або принаймні вказати мені на корисну документацію?
rahmu

@rahmu: xxx-mode-hookзазвичай ім'я гака, що працює run-hooksза режимом xxx. тобто emacs-lisp-mode-hookвиконується, коли функція emacs-modeвикликається. У цьому випадку не запускається жоден гак, але до гака додається функція. Перегляньте посібник Elisp (Гачки) для отримання додаткової інформації.
Даймрод

@rahmu: Просто, щоб додати невеликий приклад, ви можете зробити, (add-hook 'emacs-lisp-mode-hook 'some-function)але (add-hook 'sm-lambda-mode-hook 'some-function)ніколи не вийде, якщо у вас є якийсь фрагмент коду, який є (run-hooks 'sm-lambda-mode-hook).
Даймрод
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.