Customizing Lisp Indentation
The indentation pattern for a Lisp expression can depend on the function
called by the expression. For each Lisp function, you can choose among
several predefined patterns of indentation, or define an arbitrary one with
a Lisp program.
The standard pattern of indentation is as follows: the second line of the
expression is indented under the first argument, if that is on the same
line as the beginning of the expression; otherwise, the second line is
indented underneath the function name. Each following line is indented
under the previous line whose nesting depth is the same.
If the variable lisp-indent-offset is non-nil, it overrides
the usual indentation pattern for the second line of an expression, so that
such lines are always indented lisp-indent-offset more columns than
the containing list.
Certain functions override the standard pattern. Functions whose
names start with def treat the the second lines as the start of
a body, by indenting the second line lisp-body-indent
additional columns beyond the open-parenthesis that starts the
expression.
You can override the standard pattern in various ways for individual
functions, according to the lisp-indent-function property of the
function name. There are four possibilities for this property:
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.
- a number, 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:
- 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.
- pos
- The position at which the line being indented begins.
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.
|