次: , 上: Outline Mode


19.8.1 アウトラインの形式

アウトライン(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)モードが有効に働くように、 この変数を設定します。