mmm-mode
を使用する。
web-mode
が登場してもう mmm-mode
のお世話になることはないだろうと思っていた。
けれど markdown-mode
の登場で再度お世話になることになった。
mmm-mode
で定義を追加するには一般的には (mmm-add-classes)
でmmm-class
を作っておいて markdown-mode
を (mmm-add-mode-ext-class)
する。
そうすれば markdown-mode
で mmm-mode
をして parse させればシンタックスハイライトされる。
しかしMarkdownで書きたいコードの種類は無数にあるし、パターンが決まっているので楽に定義したい。
ということで下記を設定した。
https://github.com/magnars/dash.el は必須
必要に応じて2行目にメジャーモードの名前を追加する。
(with-eval-after-load "mmm-mode"
(-each '("sh" "plantuml" "dos" "css" "js2" "web" "emacs-lisp") ;; 引数にメジャーモードの関数 -mode を抜いた文字列のリストを渡す
'(lambda (mode-name)
(let ((md-class (intern (concat "markdown-" mode-name))))
(mmm-add-classes
(list (list md-class
:submode (intern (concat mode-name "-mode"))
:face 'mmm-declaration-submode-face
:front (concat "^```" mode-name "[\n
]+")
:back "^```$")))
(mmm-add-mode-ext-class 'markdown-mode nil md-class)))))
markdown-mode で下記のように記述すると、コードブロック内のみ該当のメジャーモードで記述できる。