emacs: Outline Format
25.9.1 Format of Outlines
-------------------------
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 asterisk (‘*’)
characters; the number of asterisks determines the depth of the heading
in the outline structure. Thus, a heading line with one ‘*’ is a major
topic; all the heading lines with two ‘*’s between it and the next
one-‘*’ 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’. (The recommended ways to do this
are in a major mode function or with a file local variable.) 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’.
You can explicitly specify a 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. The recommended ways to set this
variable are in a major mode command or with a file local variable.