From 0ae8ebe848c4ca61cdbe95c86d84b5f0685ca5b1 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 21 Jun 2009 01:16:55 +0000 Subject: [PATCH] (lisp-indent-defun-method, common-lisp-indent-function): Add doc strings. --- lisp/ChangeLog | 5 +++ lisp/emacs-lisp/cl-indent.el | 77 ++++++++++++++++++++++++++++++++++-- 2 files changed, 79 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 9953b4f3b2f..2d1dd7efc1b 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2009-06-21 Glenn Morris + + * emacs-lisp/cl-indent.el (lisp-indent-defun-method) + (common-lisp-indent-function): Add doc strings. + 2009-06-19 David Casperson (tiny change) * font-core.el (turn-on-font-lock-if-desired): Correctly handle diff --git a/lisp/emacs-lisp/cl-indent.el b/lisp/emacs-lisp/cl-indent.el index 16794ad7777..9efa43e07a4 100644 --- a/lisp/emacs-lisp/cl-indent.el +++ b/lisp/emacs-lisp/cl-indent.el @@ -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 ;; Created: July 1987 @@ -103,7 +103,8 @@ If nil, indent backquoted lists as data, i.e., like quoted lists." (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 @@ If nil, indent backquoted lists as data, i.e., like quoted lists." ;;;###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 @@ If nil, indent backquoted lists as data, i.e., like quoted lists." ;; 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 -- 2.39.2