4

在 emacs 中编辑 clojure 代码时,通常会调整 font-lock 以插入 lambdas、sets、anon 函数的“花哨”字符。

这是通过以下一些变体实现的(在 clojure-mode、emacs-live 等中看到)

(dolist (mode '(clojure-mode clojurescript-mode nrepl-interaction-mode))
  (eval-after-load mode
    (font-lock-add-keywords
     mode '(("(\\(fn\\)[\[[:space:]]"  ; anon funcs 1
             (0 (progn (compose-region (match-beginning 1)
                                       (match-end 1) "λ")
                   nil)))
        ("\\(#\\)("                ; anon funcs 2
         (0 (progn (compose-region (match-beginning 1)
                                   (match-end 1) "ƒ")
                   nil)))
        ("\\(#\\){"                 ; sets
         (0 (progn (compose-region (match-beginning 1)
                                   (match-end 1) "∈")
                   nil)))))))

在您围绕花哨的角色进行编辑之前,这非常有用。您可以按照以下屏幕截图保留悬挂字符... 在此处输入图像描述

当我进行编辑时,如何让 emacs 恢复为“真实”字符。上面代码中的nil(s) 可能是一个修改函数,(大概)执行此操作,并且有一个(decompose-region)似乎符合要求。应该如何调用它,将它作为符号传递是行不通的。

例如我试过这个:

(dolist (mode '(clojure-mode clojurescript-mode nrepl-interaction-mode))
  (eval-after-load mode
    (font-lock-add-keywords
     mode '(("(\\(fn\\)[\[[:space:]]"  ; anon funcs 1
             (0 (progn (compose-region (match-beginning 1)
                                       (match-end 1) "λ")
                       'decompose-region)))
            ("\\(#\\)("                ; anon funcs 2
             (0 (progn (compose-region (match-beginning 1)
                                       (match-end 1) "ƒ")
                       'decompose-region)))
            ("\\(#\\){"                 ; sets
             (0 (progn (compose-region (match-beginning 1)
                                       (match-end 1) "∈")
                       'decompose-region)))))))
4

1 回答 1

1

最简单的方法是添加(set (make-local-variable 'font-lock-extra-managed-props) '(composition)).

于 2013-09-05T01:42:21.710 回答