emacs: Foldout

 
 25.9.5 Folding Editing
 ----------------------
 
 The Foldout package extends Outline mode and Outline minor mode with
 folding commands.  The idea of folding is that you zoom in on a nested
 portion of the outline, while hiding its relatives at higher levels.
 
    Consider an Outline mode buffer with all the text and subheadings
 under level-1 headings hidden.  To look at what is hidden under one of
 these headings, you could use ‘C-c C-e’ (‘M-x outline-show-entry’) to
 expose the body, or ‘C-c C-i’ to expose the child (level-2) headings.
 
    With Foldout, you use ‘C-c C-z’ (‘M-x foldout-zoom-subtree’).  This
 exposes the body and child subheadings, and narrows the buffer so that
 only the level-1 heading, the body and the level-2 headings are visible.
 Now to look under one of the level-2 headings, position the cursor on it
 and use ‘C-c C-z’ again.  This exposes the level-2 body and its level-3
 child subheadings and narrows the buffer again.  Zooming in on
 successive subheadings can be done as much as you like.  A string in the
 mode line shows how deep you’ve gone.
 
    When zooming in on a heading, to see only the child subheadings
 specify a numeric argument: ‘C-u C-c C-z’.  The number of levels of
 children can be specified too (compare ‘M-x outline-show-children’),
 e.g., ‘M-2 C-c C-z’ exposes two levels of child subheadings.
 Alternatively, the body can be specified with a negative argument:
 ‘M-- C-c C-z’.  The whole subtree can be expanded, similarly to ‘C-c
 C-s’ (‘M-x outline-show-subtree’), by specifying a zero argument:
 ‘M-0 C-c C-z’.
 
    While you’re zoomed in, you can still use Outline mode’s exposure and
 hiding functions without disturbing Foldout.  Also, since the buffer is
 narrowed, global editing actions will only affect text under the
 zoomed-in heading.  This is useful for restricting changes to a
 particular chapter or section of your document.
 
    To unzoom (exit) a fold, use ‘C-c C-x’ (‘M-x foldout-exit-fold’).
 This hides all the text and subheadings under the top-level heading and
 returns you to the previous view of the buffer.  Specifying a numeric
 argument exits that many levels of folds.  Specifying a zero argument
 exits all folds.
 
    To cancel the narrowing of a fold without hiding the text and
 subheadings, specify a negative argument.  For example, ‘M--2 C-c C-x’
 exits two folds and leaves the text and subheadings exposed.
 
    Foldout mode also provides mouse commands for entering and exiting
 folds, and for showing and hiding text:
 
 ‘C-M-mouse-1’ zooms in on the heading clicked on
           single click: expose body.
           double click: expose subheadings.
           triple click: expose body and subheadings.
           quad click: expose entire subtree.
 ‘C-M-mouse-2’ exposes text under the heading clicked on
           single click: expose body.
           double click: expose subheadings.
           triple click: expose body and subheadings.
           quad click: expose entire subtree.
 ‘C-M-mouse-3’ hides text under the heading clicked on or exits fold
           single click: hide subtree.
           double click: exit fold and hide text.
           triple click: exit fold without hiding text.
           quad click: exit all folds and hide text.
 
    You can specify different modifier keys (instead of ‘<Ctrl>-<META>-’)
 by setting ‘foldout-mouse-modifiers’; but if you have already loaded the
 ‘foldout.el’ library, you must reload it in order for this to take
 effect.
 
    To use the Foldout package, you can type ‘M-x load-library <RET>
 foldout <RET>’; or you can arrange for to do that automatically by
 putting the following in your init file:
 
      (with-eval-after-load "outline"
        (require 'foldout))