Emacs:如何在“方案”模式下插入“λ”而不是“ lambda”?


10

很久以前,我遇到了一个文本编辑器函数,该函数将字符“λ”替换为字符“λ”。我想在emacs中做到这一点。我的偏好:

  • 我只想在某些模式下激活此功能(例如,对于Scheme模式将其激活,但对于C模式将其关闭)。

  • 在工作中,我仍使用emacs的旧版本,因此该解决方案应适用于emacs22和emacs23。

我应该如何进行?

Answers:


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-hooksm-replace-lambda或来重命名sm-greek-lambdaXXX-mode-hook通常用于标识run-hook由指定模式运行的钩子,因此您可以使用它add-hook
戴姆罗德

是否make-char只是在那里支持22?
乔恩·普迪

@Daimrod:您能解释一下XXX-mode-hook答案中定义的a 和这个自定义变量之间的区别吗?或至少指出我有用的文档?
rahmu 2012年

@rahmu:xxx-mode-hook通常是run-hooks该模式与- 一起运行的钩子的名称xxx。即emacs-lisp-mode-hookemacs-mode调用函数时运行。在这种情况下,不运行任何钩子,而是向钩子添加了一个函数。有关更多信息,请参见Elisp手册(挂钩)
戴姆罗德2012年

@rahmu:只需添加一个小示例,您就可以做到,(add-hook 'emacs-lisp-mode-hook 'some-function)但是(add-hook 'sm-lambda-mode-hook 'some-function)除非有一些代码可以做到,否则它永远不会起作用(run-hooks 'sm-lambda-mode-hook)
戴姆罗德2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.