4

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

1 に答える 1