Emacs: Как вставить 'λ' вместо 'лямбда' в режиме Scheme?


10

Давным-давно я натолкнулся на функцию текстового редактора, которая заменила слово «лямбда» на символ «λ». Я хотел бы сделать это в Emacs. Мои предпочтения:

  • Я хотел бы активировать эту функцию только в определенных режимах (активируйте ее для режима схемы, но отключите для режима 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: Не могли бы вы объяснить разницу между a XXX-mode-hookи этим, определенным в ответе? Или хотя бы указать мне на полезную документацию?
Рахму

@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.