如何在编辑后恢复'奇特的lambdas'

时间:2013-09-04 17:26:29

标签: emacs clojure elisp

在emacs中编辑clojure代码时,通常会调整font-lock来为lambdas,sets,anon函数插入'fancy'字符。

这是通过以下的一些变体(在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)))))))

这很有效,直到你围绕这个花哨的角色进行编辑。您可以按照以下屏幕截图保留悬挂字符... enter image description here

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

e.g。我试过这个:

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

1 个答案:

答案 0 :(得分:1)

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