Outline mode assumes that the lines in the buffer are of two types: heading lines and body lines. A heading line represents a topic in the outline. Heading lines start with one or more stars; the number of stars determines the depth of the heading in the outline structure. Thus, a heading line with one star is a major topic; all the heading lines with two stars between it and the next one-star heading are its subtopics; and so on. Any line that is not a heading line is a body line. Body lines belong with the preceding heading line. Here is an example:
* 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.
A heading line together with all following body lines is called collectively an entry. A heading line together with all following deeper heading lines and their body lines is called a subtree.
You can customize the criterion for distinguishing heading lines
by setting the variable outline-regexp
. Any line whose
beginning has a match for this regexp is considered a heading line.
Matches that start within a line (not at the left margin) do not count.
The length of the matching text determines the level of the heading;
longer matches make a more deeply nested level. Thus, for example,
if a text formatter has commands `@chapter
', `@section
'
and `@subsection
' to divide the document into chapters and
sections, you could make those lines count as heading lines by
setting outline-regexp
to `"@chap\\|@\\(sub\\)*section"
'.
Note the trick: the two words `chapter
' and `section
' are equally
long, but by defining the regexp to match only `chap
' we ensure
that the length of the text matched on a chapter heading is shorter,
so that Outline mode will know that sections are contained in chapters.
This works as long as no other command starts with `@chap
'.
It is possible to change the rule for calculating the level of a
heading line by setting the variable outline-level
. The value of
outline-level
should be a function that takes no arguments and
returns the level of the current heading. Some major modes such as C,
Nroff, and Emacs Lisp mode set this variable in order to work with
Outline minor mode.