アウトラインモードでは、バッファ内の行が見出し行と本文行の2種類であると想定します。見出し行は、アウトラインにおけるトピックを表します。見出し行は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.
見出し行と、それに続くすべての本文行を合わせて、総称してエントリと呼びます。見出し行と、それに続くすべての下位見出し行およびそれらの本文行を合わせて、サブツリーと呼びます。
変数 outline-regexp
を設定することで、見出し行を判別する基準をカスタマイズできます。(推奨される方法は、メジャーモード関数内で行うか、ファイルローカル変数を使用することです。)行頭がこの正規表現に一致する行は、すべて見出し行とみなされます。行内(左マージン以外)から開始する一致はカウントされません。
一致するテキストの長さによって見出しのレベルが決まり、一致するテキストが長いほど、より深い階層になります。例えば、テキストフォーマッタに文書を章や節に分割するためのコマンド
‘@chapter’、‘@section’、‘@subsection’ がある場合、outline-regexp を ‘"@chap\\|@\\(sub\\)*section"’
に設定することで、これらの行を見出し行として扱うことができます。ここでの工夫に注目してください。‘chapter’ と ‘section’ という2つの単語は等しい長さですが、正規表現を ‘chap’
にのみ一致するように定義することで、章見出しに一致するテキストの長さが短くなり、アウトラインモードが節が章に含まれていることを認識できるようになります。これは、他に
‘@chap’ で始まるコマンドがない限り有効です。
変数 outline-regexp を設定する代わりに、変数 outline-search-function
に、現在の見出しに一致し、次の見出しを検索する関数を設定できます(Emacs Lisp
リファレンスマニュアル の Outline
Minor Mode を参照してください)。
変数 outline-level
を設定することで、見出し行のレベルを計算するためのルールを明示的に指定できます。outline-level
の値は、引数を取らずに現在の見出しのレベルを返す関数である必要があります。この変数を設定する推奨方法は、メジャーモードコマンドまたはファイルローカル変数を使用することです。