elisp: Indenting Macros

 
 13.6 Indenting Macros
 =====================
 
 Defining Macros::) to specify how <TAB> should indent calls to the
 macro.  An indentation specification is written like this:
 
      (declare (indent INDENT-SPEC))
 
 This results in the ‘lisp-indent-function’ property being set on the
 macro name.
 
 Here are the possibilities for INDENT-SPEC:
 
 ‘nil’
      This is the same as no property—use the standard indentation
      pattern.
 ‘defun’
      Handle this function like a ‘def’ construct: treat the second line
      as the start of a “body”.
 an integer, NUMBER
      The first NUMBER arguments of the function are “distinguished”
      arguments; the rest are considered the body of the expression.  A
      line in the expression is indented according to whether the first
      argument on it is distinguished or not.  If the argument is part of
      the body, the line is indented ‘lisp-body-indent’ more columns than
      the open-parenthesis starting the containing expression.  If the
      argument is distinguished and is either the first or second
      argument, it is indented _twice_ that many extra columns.  If the
      argument is distinguished and not the first or second argument, the
      line uses the standard pattern.
 a symbol, SYMBOL
      SYMBOL should be a function name; that function is called to
      calculate the indentation of a line within this expression.  The
      function receives two arguments:
 
      POS
           The position at which the line being indented begins.
      STATE
           The value returned by ‘parse-partial-sexp’ (a Lisp primitive
           for indentation and nesting computation) when it parses up to
           the beginning of this line.
 
      It should return either a number, which is the number of columns of
      indentation for that line, or a list whose car is such a number.
      The difference between returning a number and returning a list is
      that a number says that all following lines at the same nesting
      level should be indented just like this one; a list says that
      following lines might call for different indentations.  This makes
      a difference when the indentation is being computed by ‘C-M-q’; if
      the value is a number, ‘C-M-q’ need not recalculate indentation for
      the following lines until the end of the list.