elisp: Relative Indent

 
 31.17.4 Indentation Relative to Previous Lines
 ----------------------------------------------
 
 This section describes two commands that indent the current line based
 on the contents of previous lines.
 
  -- Command: indent-relative &optional unindented-ok
      This command inserts whitespace at point, extending to the same
      column as the next “indent point” of the previous nonblank line.
      An indent point is a non-whitespace character following whitespace.
      The next indent point is the first one at a column greater than the
      current column of point.  For example, if point is underneath and
      to the left of the first non-blank character of a line of text, it
      moves to that column by inserting whitespace.
 
      If the previous nonblank line has no next indent point (i.e., none
      at a great enough column position), ‘indent-relative’ either does
      nothing (if UNINDENTED-OK is non-‘nil’) or calls ‘tab-to-tab-stop’.
      Thus, if point is underneath and to the right of the last column of
      a short line of text, this command ordinarily moves point to the
      next tab stop by inserting whitespace.
 
      The return value of ‘indent-relative’ is unpredictable.
 
      In the following example, point is at the beginning of the second
      line:
 
                       This line is indented twelve spaces.
           ★The quick brown fox jumped.
 
      Evaluation of the expression ‘(indent-relative nil)’ produces the
      following:
 
                       This line is indented twelve spaces.
                       ★The quick brown fox jumped.
 
      In this next example, point is between the ‘m’ and ‘p’ of ‘jumped’:
 
                       This line is indented twelve spaces.
           The quick brown fox jum★ped.
 
      Evaluation of the expression ‘(indent-relative nil)’ produces the
      following:
 
                       This line is indented twelve spaces.
           The quick brown fox jum  ★ped.
 
  -- Command: indent-relative-maybe
      This command indents the current line like the previous nonblank
      line, by calling ‘indent-relative’ with ‘t’ as the UNINDENTED-OK
      argument.  The return value is unpredictable.
 
      If the previous nonblank line has no indent points beyond the
      current column, this command does nothing.