ふるきのガベージコレクション2

脳内を通り過ぎたイメージの残骸の記録

Windows版Emacsでのoutline-modeが正常化できた

WindowsEmacsでoutline-modeでのアウトライン解析に使用する記号を定義するoutline-regexp変数の設定がうまくいかずにoutline-modeが使えない状態だった。この変数を使えば、デフォルトの"*"を"#"に変更できて、Markdownファイルをoutline-modeで扱えるようになる。この機能が便利で常用していたのだが、ある時期からWindowsEmacsでは機能しなくなって困っていた。

昨日、以下の経緯でこの変数の定義をファイル中のLocal Variableの中に書くことで正常に動作することに気付いた。結局はマニュアルどおりにやればよいという話で、どこかのバージョンから扱いが厳密になったということだろう。

発見の経緯
(0)init.el中でoutline-regexpを定義した状態では、ファイル中にLocal Variableでoutline-modeを指定することでoutline-modeに切替わっても、outline解析を実施しない状態になっていた。Linux環境ではこの設定が有効になるが、Windows環境では無視されているという状況だった。
(setq outline-regexp "#[^#]\\|##[^#]\\|###[^#]")

(1)ファイル中にLocal Variableでoutline-modeを指定したファイルを開き、F1 vでoutline-regxp変数の説明を表示させた。その説明文の中に"The recommended way to set this is with a Local Variables: list in the file it applies to."とのコメントがあることに気付いた。

(2)ファイル中のLocal Variable部を以下の内容に設定
Local Variables:
mode:outline
outline-regexp: "#[^#]\\|##[^#]\\|###[^#]"
End:

(3)ファイルを開きなおすとoutline解析が有効になっていた。

(4)ただし、この状態ではアウトラインタイトル行のハイライトが効かない(以前からの状況)。以下の定義をiniti.elに書く必要がある。また、どこかにバグがあって、アウトライン解析結果のレベルのハイライト色が1段階ずれている。
(custom-set-faces
'(outline-2 ((t (:inherit font-lock-variable-name-face :foreground "LightSkyBlue"))))
'(outline-3 ((t (:inherit font-lock-keyword-face :foreground "LightGoldenrod"))))
'(outline-4 ((t (:inherit font-lock-comment-face :foreground "Cyan1")))))