在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)))))))
这很有效,直到你围绕这个花哨的角色进行编辑。您可以按照以下屏幕截图保留悬挂字符...
当我进行编辑时,如何让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)))))))
答案 0 :(得分:1)
最简单的方法是添加(set (make-local-variable 'font-lock-extra-managed-props) '(composition))
。