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.