Emacsのoutline modeのデフォルトのレベル記号は"*"だが、Markdownのレベル記号に合せることで、Markdownエディタにも対応できるようにファイル毎に以下のLocal variables:を設定していた。この変数の正規表現にマッチする行頭の文字列のうち短かいものから順に見出し記号としてoutline-1から割当てられるという仕組みになっている。
Local Variables:
mode:outline
outline-regexp: "#[^#]\\|##[^#]\\|###[^#]"
End:
ただしこの設定には問題があって、レベル1の"#"に対してoutline-2のfaceが設定されてしまう。上記の正規表現が"#"より短かい文字列にマッチしているということなのだが、それがどれなのかわかっていない。これはoutline-modeのバグだと思っていたのだが、そうではないことがわかった。
outline.elでは以下の変数定義になっていて、"*"または改ページ(^L)の繰返しを見出しとしている。
(defvar outline-regexp "[*\^L]+")
これにならって、"#"の繰返しを以下のように指定してみたら、outlineレベルのずれはなくなった(改ページはありえないので省略)
Local Variables:
mode:outline
outline-regexp: "#+"
End:
これに合せてinit.elの配色設定も見直した。
;; outline mode font color
(custom-set-faces
'(outline-1 ((t (:inherit default :foreground "LightSkyBlue"))))
'(outline-2 ((t (:inherit default :foreground "LightGoldenrod"))))
'(outline-3 ((t (:inherit default :foreground "LightSkyBlue")))))
;; M-x list-faces-display で一覧表示