次: Outline Motion, 上: Outline Mode
アウトライン(outline)モードは、 バッファの中には2種類の行、つまり、 見出し行(heading lines)、本体行(body lines) があると仮定します。 見出し行は、アウトラインのトピックを表していて、 1つ以上の星印で始まります。 星印の個数は、アウトライン構造における見出しの深さを表します。 つまり、星印1つの見出し行は主要なトピックを表します。 この行とつぎの星印1個の行のあいだにある星印2個の見出し行は、 この行の下位トピックです。 星印がいくつであってもこのような関係が成り立ちます。 見出し行以外は本体行です。 これらは直前の見出し行に属します。 以下に例を示します。
* Food This is the body, which says something about the topic of food. ** Delicious Food This is the body of the second-level header. ** Distasteful Food This could have a body too, with several lines. *** Dormitory Food * Shelter Another first-level topic with its header line.
見出し行とそれに続く本体行をまとめて項目(entry)と呼びます。 また、見出し行と、それに続くさらに深いレベルの見出し行とそれらの本体行を まとめて部分木(subtree)と呼びます。
変数outline-regexp
に値を設定して、
見出し行を判定する基準をカスタマイズできます。
この正規表現に行頭が一致する行を見出し行とみなします。
(左端からではなく)行の途中で一致するものは、無視します。
一致したテキストの長さによって、見出しのレベルを決定します。
一致したテキストが長いほどレベルが深くなります。
したがって、たとえば、清書系に章や節を分ける
`@chapter'、`@section'、`@subsection'といった
コマンドがある場合、これらの行を見出しとして扱えばよいのですが、それには
outline-regexp
に`"@chap\\|@\\(sub\\)*section"'と設定します。
これには、ちょっとしたトリックがあります。
2つの単語、`chapter'と`section'は同じ長さですが、
正規表現では、`chap'だけに一致するように定義することで、
章見出しに一致するテキストの長さのほうを短くできます。
これによって、アウトライン(outline)モードは、
章(chapter)の中に節(section)が含まれるとわかるのです。
他のコマンドが`@chap'で始まらない限り、この設定は有効です。
変数outline-level
を設定すると、見出し行のレベル計算方法を変更できます。
outline-level
の値は、引数を取らない、
現在の見出しのレベルを返す関数である必要があります。
Cモード、nroffモード、Emacs Lispモードといったメジャーモードのいくつかでは、
アウトラインマイナ(outline-minor)モードが有効に働くように、
この変数を設定します。