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