emacs で clojure コードを編集する場合、font-lock を微調整して、ラムダ、セット、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)))))))