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 で下記のように記述すると、コードブロック内のみ該当のメジャーモードで記述できる。
