changeset 103498:4470991d3249

(lisp-indent-defun-method, common-lisp-indent-function): Add doc strings.
author Glenn Morris <rgm@gnu.org>
date Sun, 21 Jun 2009 01:16:55 +0000
parents 0475d1e553c3
children 247269056555
files lisp/ChangeLog lisp/emacs-lisp/cl-indent.el
diffstat 2 files changed, 79 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Sat Jun 20 23:23:55 2009 +0000
+++ b/lisp/ChangeLog	Sun Jun 21 01:16:55 2009 +0000
@@ -1,3 +1,8 @@
+2009-06-21  Glenn Morris  <rgm@gnu.org>
+
+	* emacs-lisp/cl-indent.el (lisp-indent-defun-method)
+	(common-lisp-indent-function): Add doc strings.
+
 2009-06-19  David Casperson  <casper@unbc.ca>  (tiny change)
 
 	* font-core.el (turn-on-font-lock-if-desired): Correctly handle
--- a/lisp/emacs-lisp/cl-indent.el	Sat Jun 20 23:23:55 2009 +0000
+++ b/lisp/emacs-lisp/cl-indent.el	Sun Jun 21 01:16:55 2009 +0000
@@ -1,7 +1,7 @@
 ;;; cl-indent.el --- enhanced lisp-indent mode
 
-;; Copyright (C) 1987, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+;; Copyright (C) 1987, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
+;;   2008, 2009 Free Software Foundation, Inc.
 
 ;; Author: Richard Mlynarik <mly@eddie.mit.edu>
 ;; Created: July 1987
@@ -103,7 +103,8 @@
 
 
 (defvar lisp-indent-error-function)
-(defvar lisp-indent-defun-method '(4 &lambda &body))
+(defvar lisp-indent-defun-method '(4 &lambda &body)
+  "Indentation for function with `common-lisp-indent-function' property `defun'.")
 
 
 (defun extended-loop-p (loop-start)
@@ -135,6 +136,75 @@
 
 ;;;###autoload
 (defun common-lisp-indent-function (indent-point state)
+  "Function to indent the arguments of a Lisp function call.
+This is suitable for use as the value of the variable
+`lisp-indent-function'.  INDENT-POINT is the point at which the
+indentation function is called, and STATE is the
+`parse-partial-sexp' state at that position.  Browse the
+`lisp-indent' customize group for options affecting the behavior
+of this function.
+
+If the indentation point is in a call to a Lisp function, that
+function's common-lisp-indent-function property specifies how
+this function should indent it.  Possible values for this
+property are:
+
+* defun, meaning indent according to `lisp-indent-defun-method';
+  i.e., like (4 &lambda &body), as explained below.
+
+* any other symbol, meaning a function to call.  The function should
+  take the arguments: PATH STATE INDENT-POINT SEXP-COLUMN NORMAL-INDENT.
+  PATH is a list of integers describing the position of point in terms of
+  list-structure with respect to the containing lists.  For example, in
+  ((a b c (d foo) f) g), foo has a path of (0 3 1).  In other words,
+  to reach foo take the 0th element of the outermost list, then
+  the 3rd element of the next list, and finally the 1st element.
+  STATE and INDENT-POINT are as in the arguments to
+  `common-lisp-indent-function'.  SEXP-COLUMN is the column of
+  the open parenthesis of the innermost containing list.
+  NORMAL-INDENT is the column the indentation point was
+  originally in.  This function should behave like `lisp-indent-259'.
+
+* an integer N, meaning indent the first N arguments like
+  function arguments, and any further arguments like a body.
+  This is equivalent to (4 4 ... &body).
+
+* a list.  The list element in position M specifies how to indent the Mth
+  function argument.  If there are fewer elements than function arguments,
+  the last list element applies to all remaining arguments.  The accepted
+  list elements are:
+
+  * nil, meaning the default indentation.
+
+  * an integer, specifying an explicit indentation.
+
+  * &lambda.  Indent the argument (which may be a list) by 4.
+
+  * &rest.  When used, this must be the penultimate element.  The
+    element after this one applies to all remaining arguments.
+
+  * &body.  This is equivalent to &rest lisp-body-indent, i.e., indent
+    all remaining elements by `lisp-body-indent'.
+
+  * &whole.  This must be followed by nil, an integer, or a
+    function symbol.  This indentation is applied to the
+    associated argument, and as a base indent for all remaining
+    arguments.  For example, an integer P means indent this
+    argument by P, and all remaining arguments by P, plus the
+    value specified by their associated list element.
+
+  * a symbol.  A function to call, with the 6 arguments specified above.
+
+  * a list, with elements as described above.  This applies when the
+    associated function argument is itself a list.  Each element of the list
+    specifies how to indent the associated argument.
+
+For example, the function `case' has an indent property
+\(4 &rest (&whole 2 &rest 1)), meaning:
+  * indent the first argument by 4.
+  * arguments after the first should be lists, and there may be any number
+    of them.  The first list element has an offset of 2, all the rest
+    have an offset of 2+1=3."
   (if (save-excursion (goto-char (elt state 1))
 		      (looking-at "([Ll][Oo][Oo][Pp]"))
       (common-lisp-loop-part-indentation indent-point state)
@@ -149,6 +219,7 @@
           ;; Path describes the position of point in terms of
           ;;  list-structure with respect to containing lists.
           ;; `foo' has a path of (0 4 1) in `((a b c (d foo) f) g)'
+          ;; (Surely (0 3 1)?).
           (path ())
           ;; set non-nil when somebody works out the indentation to use
           calculated