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
をセットすることによりカスタマイズできます(これを行う推奨された方法は、メジャーモードの関数を使うか、ファイルローカル変数を使う方法です)。行の開始がこのregexpにマッチする行は、ヘッダー行と判断されます。(行の左端ではなく)行の途中でのマッチは勘定に入りません。
テキストにたいするマッチの長さは、ヘッダーのレベルを決定します。長いマッチは、より深くネストされたレベルとなります。‘@chapter’、‘@section’、‘@subsection’というコマンドが、ドキュメントをチャプター、セクション、サブセクションに分割するようなテキストフォーマッターがある場合(訳注:
texinfo形式のこと)、outline-regexp
に‘"@chap\\|@\\(sub\\)*section"’をセットすることにより、それらの行をヘッダー行と判断させることができます。ここでトリックに注意してください。2つの単語‘chapter’と‘section’は同じ長さです。しかしregexp‘chap’だけにマッチするように定義することによって、チャプターのヘッダーにマッチするテキストの長さを短くすることができるので、Outlineモードはセクションがチャプターの配下であることを知ることができます。これは‘@chap’で始まるコマンドが他にない場合に限り機能します。
変数outline-regexp
のかわりに、カレントのヘッダーにマッチして次のマッチを探す関数を変数outline-search-function
にセットすることができます(Outline
Minor Mode in the Emacs Lisp Reference Manualを参照)。
変数outline-level
をセットすることにより、ヘッダー行のレベルを計算するためのルールを明示できに指定できます。outline-level
の値には、引数をとらないカレントヘッダーのレベルを返す関数を指定します。この変数をセットする推奨された方法は、メジャーモードのコマンドを使うか、ファイルローカル変数を使用する方法です。