Mercurial > emacs
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