annotate lisp/emacs-lisp/cl-indent.el @ 51010:f79532778159

Rewrote the local minor mode so that it can be sticky as well and made sticky the default. Reimplemented the global minor mode. Updated the commentary section to document these changes. (hl-line-sticky-flag): New user option. (hl-line-overlay): Made it buffer-local and gave it a docstring. (global-hl-line-overlay): New variable. (hl-line-mode): Rewritten to use `hl-line-sticky-flag'. (hl-line-highlight): Rewritten to use `hl-line-sticky-flag'. (hl-line-unhighlight): Updated docstring. (global-hl-line-mode): Implemented directly so that is does not depend on `hl-line-mode' any more. (global-hl-line-highlight, global-hl-line-unhighlight): New functions.
author Lute Kamstra <lute@gnu.org>
date Thu, 15 May 2003 13:21:23 +0000
parents ad311d8949c4
children 695cf19ef79e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 257
diff changeset
1 ;;; cl-indent.el --- enhanced lisp-indent mode
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 257
diff changeset
2
43859
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
3 ;; Copyright (C) 1987, 2000, 2001, 2002 Free Software Foundation, Inc.
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 845
diff changeset
4
14040
187735b53d52 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 3591
diff changeset
5 ;; Author: Richard Mlynarik <mly@eddie.mit.edu>
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 845
diff changeset
6 ;; Created: July 1987
845
213978acbc1e entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 811
diff changeset
7 ;; Maintainer: FSF
213978acbc1e entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 811
diff changeset
8 ;; Keywords: lisp, tools
213978acbc1e entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 811
diff changeset
9
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
14 ;; the Free Software Foundation; either version 2, or (at your option)
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 ;; any later version.
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20 ;; GNU General Public License for more details.
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
25 ;; Boston, MA 02111-1307, USA.
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
27 ;;; Commentary:
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
28
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 845
diff changeset
29 ;; This package supplies a single entry point, common-lisp-indent-function,
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 845
diff changeset
30 ;; which performs indentation in the preferred style for Common Lisp code.
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 845
diff changeset
31 ;; To enable it:
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 845
diff changeset
32 ;;
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 845
diff changeset
33 ;; (setq lisp-indent-function 'common-lisp-indent-function)
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 845
diff changeset
34
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35 ;;>> TODO
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
36 ;; :foo
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37 ;; bar
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38 ;; :baz
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39 ;; zap
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
40 ;; &key (like &body)??
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42 ;; &rest 1 in lambda-lists doesn't work
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43 ;; -- really want (foo bar
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
44 ;; baz)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
45 ;; not (foo bar
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46 ;; baz)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47 ;; Need something better than &rest for such cases
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
48
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
49 ;;; Code:
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50
17413
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
51 (defgroup lisp-indent nil
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
52 "Indentation in Lisp"
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
53 :group 'lisp)
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
54
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
55
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
56 (defcustom lisp-indent-maximum-backtracking 3
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
57 "*Maximum depth to backtrack out from a sublist for structured indentation.
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
58 If this variable is 0, no backtracking will occur and forms such as flet
17413
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
59 may not be correctly indented."
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
60 :type 'integer
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
61 :group 'lisp-indent)
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62
17413
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
63 (defcustom lisp-tag-indentation 1
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
64 "*Indentation of tags relative to containing list.
17413
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
65 This variable is used by the function `lisp-indent-tagbody'."
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
66 :type 'integer
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
67 :group 'lisp-indent)
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
68
17413
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
69 (defcustom lisp-tag-body-indentation 3
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
70 "*Indentation of non-tagged lines relative to containing list.
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
71 This variable is used by the function `lisp-indent-tagbody' to indent normal
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
72 lines (lines without tags).
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
73 The indentation is relative to the indentation of the parenthesis enclosing
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
74 the special form. If the value is t, the body of tags will be indented
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75 as a block at the same indentation as the first s-expression following
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
76 the tag. In this case, any forms before the first tag are indented
17413
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
77 by `lisp-body-indent'."
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
78 :type 'integer
9fa0ed8da0b1 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
79 :group 'lisp-indent)
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
80
43859
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
81 (defcustom lisp-backquote-indentation t
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
82 "*Whether or not to indent backquoted lists as code.
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
83 If nil, indent backquoted lists as data, i.e., like quoted lists."
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
84 :type 'boolean
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
85 :group 'lisp-indent)
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
86
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
87
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
88 (defcustom lisp-loop-keyword-indentation 3
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
89 "*Indentation of loop keywords in extended loop forms."
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
90 :type 'integer
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
91 :group 'lisp-indent)
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
92
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
93
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
94 (defcustom lisp-loop-forms-indentation 5
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
95 "*Indentation of forms in extended loop forms."
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
96 :type 'integer
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
97 :group 'lisp-indent)
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
98
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
99
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
100 (defcustom lisp-simple-loop-indentation 3
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
101 "*Indentation of forms in simple loop forms."
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
102 :type 'integer
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
103 :group 'lisp-indent)
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
104
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
105
22212
b95ba3830bc9 (lisp-indent-error-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22180
diff changeset
106 (defvar lisp-indent-error-function)
22858
77090a500417 (lisp-indent-defun-method): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22756
diff changeset
107 (defvar lisp-indent-defun-method '(4 &lambda &body))
22212
b95ba3830bc9 (lisp-indent-error-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22180
diff changeset
108
43859
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
109
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
110 (defun extended-loop-p (loop-start)
47298
c6dddb2746ee * emacs-lisp/cl-indent.el (extended-loop-p): Doc fix.
John Paul Wallington <jpw@pobox.com>
parents: 45573
diff changeset
111 "True if an extended loop form starts at LOOP-START."
43859
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
112 (condition-case ()
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
113 (save-excursion
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
114 (goto-char loop-start)
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
115 (forward-char 1)
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
116 (forward-sexp 2)
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
117 (backward-sexp 1)
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
118 (looking-at "\\sw"))
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
119 (error t)))
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
120
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
121
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
122 (defun common-lisp-loop-part-indentation (indent-point state)
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
123 "Compute the indentation of loop form constituents."
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
124 (let* ((loop-indentation (save-excursion
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
125 (goto-char (elt state 1))
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
126 (current-column))))
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
127 (goto-char indent-point)
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
128 (beginning-of-line)
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
129 (cond ((not (extended-loop-p (elt state 1)))
43920
af0b9648d018 (common-lisp-loop-part-indentation):
Gerd Moellmann <gerd@gnu.org>
parents: 43859
diff changeset
130 (+ loop-indentation lisp-simple-loop-indentation))
43859
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
131 ((looking-at "^\\s-*\\(:?\\sw+\\|;\\)")
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
132 (+ loop-indentation lisp-loop-keyword-indentation))
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
133 (t
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
134 (+ loop-indentation lisp-loop-forms-indentation)))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47298
diff changeset
135
43859
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
136
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137 ;;;###autoload
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138 (defun common-lisp-indent-function (indent-point state)
43859
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
139 (if (save-excursion (goto-char (elt state 1))
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
140 (looking-at "([Ll][Oo][Oo][Pp]"))
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
141 (common-lisp-loop-part-indentation indent-point state)
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
142 (common-lisp-indent-function-1 indent-point state)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47298
diff changeset
143
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47298
diff changeset
144
43859
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
145 (defun common-lisp-indent-function-1 (indent-point state)
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
146 (let ((normal-indent (current-column)))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147 ;; Walk up list levels until we see something
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
148 ;; which does special things with subforms.
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149 (let ((depth 0)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
150 ;; Path describes the position of point in terms of
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 2307
diff changeset
151 ;; list-structure with respect to containing lists.
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
152 ;; `foo' has a path of (0 4 1) in `((a b c (d foo) f) g)'
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
153 (path ())
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
154 ;; set non-nil when somebody works out the indentation to use
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155 calculated
45573
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
156 ;; If non-nil, this is an indentation to use
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
157 ;; if nothing else specifies it more firmly.
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
158 tentative-calculated
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
159 (last-point indent-point)
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160 ;; the position of the open-paren of the innermost containing list
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161 (containing-form-start (elt state 1))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162 ;; the column of the above
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163 sexp-column)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
164 ;; Move to start of innermost containing list
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
165 (goto-char containing-form-start)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
166 (setq sexp-column (current-column))
43859
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
167
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
168 ;; Look over successively less-deep containing forms
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169 (while (and (not calculated)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
170 (< depth lisp-indent-maximum-backtracking))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171 (let ((containing-sexp (point)))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172 (forward-char 1)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173 (parse-partial-sexp (point) indent-point 1 t)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
174 ;; Move to the car of the relevant containing form
45573
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
175 (let (tem function method tentative-defun)
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
176 (if (not (looking-at "\\sw\\|\\s_"))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
177 ;; This form doesn't seem to start with a symbol
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
178 (setq function nil method nil)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179 (setq tem (point))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180 (forward-sexp 1)
22858
77090a500417 (lisp-indent-defun-method): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22756
diff changeset
181 (setq function (downcase (buffer-substring-no-properties
77090a500417 (lisp-indent-defun-method): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22756
diff changeset
182 tem (point))))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
183 (goto-char tem)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
184 (setq tem (intern-soft function)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
185 method (get tem 'common-lisp-indent-function))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
186 (cond ((and (null method)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187 (string-match ":[^:]+" function))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
188 ;; The pleblisp package feature
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
189 (setq function (substring function
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190 (1+ (match-beginning 0)))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
191 method (get (intern-soft function)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
192 'common-lisp-indent-function)))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
193 ((and (null method))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
194 ;; backwards compatibility
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
195 (setq method (get tem 'lisp-indent-function)))))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
196 (let ((n 0))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
197 ;; How far into the containing form is the current form?
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
198 (if (< (point) indent-point)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
199 (while (condition-case ()
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
200 (progn
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
201 (forward-sexp 1)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
202 (if (>= (point) indent-point)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
203 nil
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
204 (parse-partial-sexp (point)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
205 indent-point 1 t)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
206 (setq n (1+ n))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
207 t))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
208 (error nil))))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
209 (setq path (cons n path)))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
211 ;; backwards compatibility.
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
212 (cond ((null function))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
213 ((null method)
22858
77090a500417 (lisp-indent-defun-method): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22756
diff changeset
214 (when (null (cdr path))
45573
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
215 ;; (package prefix was stripped off above)
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
216 (cond ((string-match "\\`def"
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
217 function)
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
218 (setq tentative-defun t))
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
219 ((string-match "\\`\\(with\\|do\\)-"
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
220 function)
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
221 (setq method '(&lambda &body))))))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222 ;; backwards compatibility. Bletch.
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
223 ((eq method 'defun)
22858
77090a500417 (lisp-indent-defun-method): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22756
diff changeset
224 (setq method lisp-indent-defun-method)))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
225
43859
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
226 (cond ((and (or (eq (char-after (1- containing-sexp)) ?\')
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
227 (and (not lisp-backquote-indentation)
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
228 (eq (char-after (1- containing-sexp)) ?\`)))
26047
e6efd0ace0f3 (common-lisp-indent-function): Use `eq' instead of `eql'.
Gerd Moellmann <gerd@gnu.org>
parents: 23725
diff changeset
229 (not (eq (char-after (- containing-sexp 2)) ?\#)))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
230 ;; No indentation for "'(...)" elements
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
231 (setq calculated (1+ sexp-column)))
29797
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
232 ((or (eq (char-after (1- containing-sexp)) ?\,)
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
233 (and (eq (char-after (1- containing-sexp)) ?\@)
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
234 (eq (char-after (- containing-sexp 2)) ?\,)))
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
235 ;; ",(...)" or ",@(...)"
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
236 (setq calculated normal-indent))
26047
e6efd0ace0f3 (common-lisp-indent-function): Use `eq' instead of `eql'.
Gerd Moellmann <gerd@gnu.org>
parents: 23725
diff changeset
237 ((eq (char-after (1- containing-sexp)) ?\#)
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
238 ;; "#(...)"
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 (setq calculated (1+ sexp-column)))
45573
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
240 ((null method)
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
241 ;; If this looks like a call to a `def...' form,
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
242 ;; think about indenting it as one, but do it
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
243 ;; tentatively for cases like
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
244 ;; (flet ((defunp ()
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
245 ;; nil)))
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
246 ;; Set both normal-indent and tentative-calculated.
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
247 ;; The latter ensures this value gets used
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
248 ;; if there are no relevant containing constructs.
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
249 ;; The former ensures this value gets used
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
250 ;; if there is a relevant containing construct
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
251 ;; but we are nested within the structure levels
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
252 ;; that it specifies indentation for.
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
253 (if tentative-defun
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
254 (setq tentative-calculated
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
255 (common-lisp-indent-call-method
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
256 function lisp-indent-defun-method
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
257 path state indent-point
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
258 sexp-column normal-indent)
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
259 normal-indent tentative-calculated)))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
260 ((integerp method)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
261 ;; convenient top-level hack.
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
262 ;; (also compatible with lisp-indent-function)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
263 ;; The number specifies how many `distinguished'
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264 ;; forms there are before the body starts
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
265 ;; Equivalent to (4 4 ... &body)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
266 (setq calculated (cond ((cdr path)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
267 normal-indent)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
268 ((<= (car path) method)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
269 ;; `distinguished' form
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
270 (list (+ sexp-column 4)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
271 containing-form-start))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
272 ((= (car path) (1+ method))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
273 ;; first body form.
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
274 (+ sexp-column lisp-body-indent))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
275 (t
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
276 ;; other body form
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
277 normal-indent))))
45573
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
278 (t
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
279 (setq calculated
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
280 (common-lisp-indent-call-method
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
281 function method path state indent-point
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
282 sexp-column normal-indent)))))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
283 (goto-char containing-sexp)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
284 (setq last-point containing-sexp)
22858
77090a500417 (lisp-indent-defun-method): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22756
diff changeset
285 (unless calculated
45573
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
286 (condition-case ()
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
287 (progn (backward-up-list 1)
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
288 (setq depth (1+ depth)))
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
289 (error (setq depth lisp-indent-maximum-backtracking))))))
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
290 (or calculated tentative-calculated))))
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
291
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
292
45573
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
293 (defun common-lisp-indent-call-method (function method path state indent-point
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
294 sexp-column normal-indent)
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
295 (let ((lisp-indent-error-function function))
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
296 (if (symbolp method)
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
297 (funcall method
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
298 path state indent-point
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
299 sexp-column normal-indent)
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
300 (lisp-indent-259 method path state indent-point
54fb43cbbd73 (common-lisp-indent-function-1):
Richard M. Stallman <rms@gnu.org>
parents: 43920
diff changeset
301 sexp-column normal-indent))))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
302
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
303 (defun lisp-indent-report-bad-format (m)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
304 (error "%s has a badly-formed %s property: %s"
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
305 ;; Love those free variable references!!
22212
b95ba3830bc9 (lisp-indent-error-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22180
diff changeset
306 lisp-indent-error-function 'common-lisp-indent-function m))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
307
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
308 ;; Blame the crufty control structure on dynamic scoping
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
309 ;; -- not on me!
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
310 (defun lisp-indent-259 (method path state indent-point
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
311 sexp-column normal-indent)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
312 (catch 'exit
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
313 (let ((p path)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
314 (containing-form-start (elt state 1))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
315 n tem tail)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
316 ;; Isn't tail-recursion wonderful?
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
317 (while p
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
318 ;; This while loop is for destructuring.
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
319 ;; p is set to (cdr p) each iteration.
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
320 (if (not (consp method)) (lisp-indent-report-bad-format method))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
321 (setq n (1- (car p))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
322 p (cdr p)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
323 tail nil)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
324 (while n
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
325 ;; This while loop is for advancing along a method
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
326 ;; until the relevant (possibly &rest/&body) pattern
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
327 ;; is reached.
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
328 ;; n is set to (1- n) and method to (cdr method)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
329 ;; each iteration.
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
330 (setq tem (car method))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
331
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
332 (or (eq tem 'nil) ;default indentation
29797
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
333 (eq tem '&lambda) ;lambda list
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
334 (and (eq tem '&body) (null (cdr method)))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
335 (and (eq tem '&rest)
29797
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
336 (consp (cdr method))
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
337 (null (cddr method)))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
338 (integerp tem) ;explicit indentation specified
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
339 (and (consp tem) ;destructuring
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
340 (eq (car tem) '&whole)
29797
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
341 (or (symbolp (cadr tem))
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
342 (integerp (cadr tem))))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
343 (and (symbolp tem) ;a function to call to do the work.
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
344 (null (cdr method)))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
345 (lisp-indent-report-bad-format method))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
346
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
347 (cond ((and tail (not (consp tem)))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
348 ;; indent tail of &rest in same way as first elt of rest
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
349 (throw 'exit normal-indent))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
350 ((eq tem '&body)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
351 ;; &body means (&rest <lisp-body-indent>)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
352 (throw 'exit
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
353 (if (and (= n 0) ;first body form
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
354 (null p)) ;not in subforms
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
355 (+ sexp-column
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
356 lisp-body-indent)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
357 normal-indent)))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
358 ((eq tem '&rest)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
359 ;; this pattern holds for all remaining forms
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
360 (setq tail (> n 0)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
361 n 0
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
362 method (cdr method)))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
363 ((> n 0)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
364 ;; try next element of pattern
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
365 (setq n (1- n)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
366 method (cdr method))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
367 (if (< n 0)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
368 ;; Too few elements in pattern.
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
369 (throw 'exit normal-indent)))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
370 ((eq tem 'nil)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
371 (throw 'exit (list normal-indent containing-form-start)))
22858
77090a500417 (lisp-indent-defun-method): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22756
diff changeset
372 ((eq tem '&lambda)
77090a500417 (lisp-indent-defun-method): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22756
diff changeset
373 (throw 'exit
77090a500417 (lisp-indent-defun-method): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22756
diff changeset
374 (cond ((null p)
77090a500417 (lisp-indent-defun-method): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22756
diff changeset
375 (list (+ sexp-column 4) containing-form-start))
77090a500417 (lisp-indent-defun-method): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22756
diff changeset
376 ((null (cdr p))
77090a500417 (lisp-indent-defun-method): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22756
diff changeset
377 (+ sexp-column 1))
77090a500417 (lisp-indent-defun-method): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22756
diff changeset
378 (t normal-indent))))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
379 ((integerp tem)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
380 (throw 'exit
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
381 (if (null p) ;not in subforms
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
382 (list (+ sexp-column tem) containing-form-start)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
383 normal-indent)))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
384 ((symbolp tem) ;a function to call
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
385 (throw 'exit
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
386 (funcall tem path state indent-point
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
387 sexp-column normal-indent)))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
388 (t
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
389 ;; must be a destructing frob
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
390 (if (not (null p))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
391 ;; descend
22858
77090a500417 (lisp-indent-defun-method): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22756
diff changeset
392 (setq method (cddr tem)
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
393 n nil)
22858
77090a500417 (lisp-indent-defun-method): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22756
diff changeset
394 (setq tem (cadr tem))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
395 (throw 'exit
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
396 (cond (tail
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
397 normal-indent)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
398 ((eq tem 'nil)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
399 (list normal-indent
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
400 containing-form-start))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
401 ((integerp tem)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
402 (list (+ sexp-column tem)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
403 containing-form-start))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
404 (t
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
405 (funcall tem path state indent-point
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
406 sexp-column normal-indent))))))))))))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
407
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
408 (defun lisp-indent-tagbody (path state indent-point sexp-column normal-indent)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
409 (if (not (null (cdr path)))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
410 normal-indent
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
411 (save-excursion
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
412 (goto-char indent-point)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
413 (beginning-of-line)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
414 (skip-chars-forward " \t")
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
415 (list (cond ((looking-at "\\sw\\|\\s_")
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
416 ;; a tagbody tag
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
417 (+ sexp-column lisp-tag-indentation))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
418 ((integerp lisp-tag-body-indentation)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
419 (+ sexp-column lisp-tag-body-indentation))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
420 ((eq lisp-tag-body-indentation 't)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
421 (condition-case ()
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
422 (progn (backward-sexp 1) (current-column))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
423 (error (1+ sexp-column))))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
424 (t (+ sexp-column lisp-body-indent)))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
425 ; (cond ((integerp lisp-tag-body-indentation)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
426 ; (+ sexp-column lisp-tag-body-indentation))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
427 ; ((eq lisp-tag-body-indentation 't)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
428 ; normal-indent)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
429 ; (t
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
430 ; (+ sexp-column lisp-body-indent)))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
431 (elt state 1)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
432 ))))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
433
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
434 (defun lisp-indent-do (path state indent-point sexp-column normal-indent)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
435 (if (>= (car path) 3)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
436 (let ((lisp-tag-body-indentation lisp-body-indent))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
437 (funcall (function lisp-indent-tagbody)
29797
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
438 path state indent-point sexp-column normal-indent))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
439 (funcall (function lisp-indent-259)
29797
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
440 '((&whole nil &rest
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
441 ;; the following causes weird indentation
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
442 ;;(&whole 1 1 2 nil)
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
443 )
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
444 (&whole nil &rest 1))
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
445 path state indent-point sexp-column normal-indent)))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
446
43859
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
447
40952
2ca1b56f3bb1 Indent properly `generic-flet', `generic-labels', `with-accessors',
Sam Steingold <sds@gnu.org>
parents: 38826
diff changeset
448 (defun lisp-indent-defmethod (path state indent-point sexp-column
38826
f2ff22369238 (lisp-indent-defmethod): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37764
diff changeset
449 normal-indent)
f2ff22369238 (lisp-indent-defmethod): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37764
diff changeset
450 "Indentation function defmethod."
43859
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
451 (lisp-indent-259 (if (and (>= (car path) 3)
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
452 (null (cdr path))
41256
4a78098c3bd7 (lisp-indent-defmethod): At first three elements, act like defun.
Richard M. Stallman <rms@gnu.org>
parents: 40952
diff changeset
453 (save-excursion (goto-char (elt state 1))
4a78098c3bd7 (lisp-indent-defmethod): At first three elements, act like defun.
Richard M. Stallman <rms@gnu.org>
parents: 40952
diff changeset
454 (forward-char 1)
4a78098c3bd7 (lisp-indent-defmethod): At first three elements, act like defun.
Richard M. Stallman <rms@gnu.org>
parents: 40952
diff changeset
455 (forward-sexp 3)
4a78098c3bd7 (lisp-indent-defmethod): At first three elements, act like defun.
Richard M. Stallman <rms@gnu.org>
parents: 40952
diff changeset
456 (backward-sexp)
4a78098c3bd7 (lisp-indent-defmethod): At first three elements, act like defun.
Richard M. Stallman <rms@gnu.org>
parents: 40952
diff changeset
457 (looking-at ":")))
38826
f2ff22369238 (lisp-indent-defmethod): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37764
diff changeset
458 '(4 4 (&whole 4 &rest 4) &body)
f2ff22369238 (lisp-indent-defmethod): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37764
diff changeset
459 (get 'defun 'common-lisp-indent-function))
f2ff22369238 (lisp-indent-defmethod): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37764
diff changeset
460 path state indent-point sexp-column normal-indent))
f2ff22369238 (lisp-indent-defmethod): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37764
diff changeset
461
f2ff22369238 (lisp-indent-defmethod): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37764
diff changeset
462
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
463 (defun lisp-indent-function-lambda-hack (path state indent-point
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
464 sexp-column normal-indent)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
465 ;; indent (function (lambda () <newline> <body-forms>)) kludgily.
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
466 (if (or (cdr path) ; wtf?
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
467 (> (car path) 3))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
468 ;; line up under previous body form
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
469 normal-indent
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
470 ;; line up under function rather than under lambda in order to
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
471 ;; conserve horizontal space. (Which is what #' is for.)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
472 (condition-case ()
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
473 (save-excursion
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
474 (backward-up-list 2)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
475 (forward-char 1)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
476 (if (looking-at "\\(lisp:+\\)?function\\(\\Sw\\|\\S_\\)")
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
477 (+ lisp-body-indent -1 (current-column))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
478 (+ sexp-column lisp-body-indent)))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
479 (error (+ sexp-column lisp-body-indent)))))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
480
43859
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
481
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
482
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
483 (let ((l '((block 1)
29797
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
484 (case (4 &rest (&whole 2 &rest 1)))
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
485 (ccase . case) (ecase . case)
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
486 (typecase . case) (etypecase . case) (ctypecase . case)
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
487 (catch 1)
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
488 (cond (&rest (&whole 2 &rest 1)))
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
489 (defvar (4 2 2))
30651
61c2f9fcb8f6 * emacs-lisp/cl-indent.el (toplevel): Indent `defclass',
Sam Steingold <sds@gnu.org>
parents: 29797
diff changeset
490 (defclass (6 4 (&whole 2 &rest 1) (&whole 2 &rest 1)))
29797
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
491 (defconstant . defvar)
27231
e9725bb98b6e Add defclass, define-condition, defmethod, symbol-macrolet.
Dave Love <fx@gnu.org>
parents: 26047
diff changeset
492 (defcustom (4 2 2 2))
29797
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
493 (defparameter . defvar)
30651
61c2f9fcb8f6 * emacs-lisp/cl-indent.el (toplevel): Indent `defclass',
Sam Steingold <sds@gnu.org>
parents: 29797
diff changeset
494 (defconst . defcustom)
61c2f9fcb8f6 * emacs-lisp/cl-indent.el (toplevel): Indent `defclass',
Sam Steingold <sds@gnu.org>
parents: 29797
diff changeset
495 (define-condition . defclass)
42252
63b6d0453539 (define-modify-macro): Better indent spec.
Richard M. Stallman <rms@gnu.org>
parents: 41256
diff changeset
496 (define-modify-macro (4 &lambda &body))
29797
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
497 (defsetf (4 &lambda 4 &body))
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
498 (defun (4 &lambda &body))
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
499 (define-setf-method . defun)
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
500 (define-setf-expander . defun)
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
501 (defmacro . defun) (defsubst . defun) (deftype . defun)
38826
f2ff22369238 (lisp-indent-defmethod): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37764
diff changeset
502 (defmethod lisp-indent-defmethod)
29797
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
503 (defpackage (4 2))
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
504 (defstruct ((&whole 4 &rest (&whole 2 &rest 1))
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
505 &rest (&whole 2 &rest 1)))
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
506 (destructuring-bind
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
507 ((&whole 6 &rest 1) 4 &body))
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
508 (do lisp-indent-do)
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
509 (do* . do)
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
510 (dolist ((&whole 4 2 1) &body))
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
511 (dotimes . dolist)
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
512 (eval-when 1)
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
513 (flet ((&whole 4 &rest (&whole 1 &lambda &body)) &body))
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
514 (labels . flet)
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
515 (macrolet . flet)
40952
2ca1b56f3bb1 Indent properly `generic-flet', `generic-labels', `with-accessors',
Sam Steingold <sds@gnu.org>
parents: 38826
diff changeset
516 (generic-flet . flet) (generic-labels . flet)
22858
77090a500417 (lisp-indent-defun-method): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22756
diff changeset
517 (handler-case (4 &rest (&whole 2 &lambda &body)))
22756
6103b46f200a Indent `restart-case', `handler-bind' and `restart-bind' correctly.
Richard M. Stallman <rms@gnu.org>
parents: 22731
diff changeset
518 (restart-case . handler-case)
29797
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
519 ;; `else-body' style
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
520 (if (nil nil &body))
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
521 ;; single-else style (then and else equally indented)
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
522 (if (&rest nil))
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
523 (lambda (&lambda &rest lisp-indent-function-lambda-hack))
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
524 (let ((&whole 4 &rest (&whole 1 1 2)) &body))
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
525 (let* . let)
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
526 (compiler-let . let) ;barf
22756
6103b46f200a Indent `restart-case', `handler-bind' and `restart-bind' correctly.
Richard M. Stallman <rms@gnu.org>
parents: 22731
diff changeset
527 (handler-bind . let) (restart-bind . let)
29797
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
528 (locally 1)
43859
e8da4031d520 (lisp-loop-keyword-indentation)
Gerd Moellmann <gerd@gnu.org>
parents: 42252
diff changeset
529 ;(loop lisp-indent-loop)
37764
b1fec0dc2aa1 (toplevel): indent the :method sub-form of `defgeneric' correctly.
Sam Steingold <sds@gnu.org>
parents: 37389
diff changeset
530 (:method (&lambda &body)) ; in `defgeneric'
30651
61c2f9fcb8f6 * emacs-lisp/cl-indent.el (toplevel): Indent `defclass',
Sam Steingold <sds@gnu.org>
parents: 29797
diff changeset
531 (multiple-value-bind ((&whole 6 &rest 1) 4 &body))
61c2f9fcb8f6 * emacs-lisp/cl-indent.el (toplevel): Indent `defclass',
Sam Steingold <sds@gnu.org>
parents: 29797
diff changeset
532 (multiple-value-call (4 &body))
29797
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
533 (multiple-value-prog1 1)
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
534 (multiple-value-setq (4 2))
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
535 (multiple-value-setf . multiple-value-setq)
27872
277f4365f2fa Indent `pprint-logical-block' properly.
Gerd Moellmann <gerd@gnu.org>
parents: 27802
diff changeset
536 (pprint-logical-block (4 2))
29797
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
537 (print-unreadable-object ((&whole 4 1 &rest 1) &body))
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
538 ;; Combines the worst features of BLOCK, LET and TAGBODY
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
539 (prog (&lambda &rest lisp-indent-tagbody))
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
540 (prog* . prog)
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
541 (prog1 1)
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
542 (prog2 2)
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
543 (progn 0)
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
544 (progv (4 4 &body))
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
545 (return 0)
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
546 (return-from (nil &body))
50700
ad311d8949c4 `symbol-macrolet' is similar to `let', not `multiple-value-bind'.
Sam Steingold <sds@gnu.org>
parents: 49598
diff changeset
547 (symbol-macrolet . let)
29797
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
548 (tagbody lisp-indent-tagbody)
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
549 (throw 1)
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
550 (unless 1)
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
551 (unwind-protect (5 &body))
22180
485917486caf Indent `with-standard-io-syntax' correctly.
Richard M. Stallman <rms@gnu.org>
parents: 21750
diff changeset
552 (when 1)
40952
2ca1b56f3bb1 Indent properly `generic-flet', `generic-labels', `with-accessors',
Sam Steingold <sds@gnu.org>
parents: 38826
diff changeset
553 (with-accessors . multiple-value-bind)
2ca1b56f3bb1 Indent properly `generic-flet', `generic-labels', `with-accessors',
Sam Steingold <sds@gnu.org>
parents: 38826
diff changeset
554 (with-condition-restarts . multiple-value-bind)
23725
222d58586999 indent `with-output-to-string' as a CL
Karl Heuer <kwzh@gnu.org>
parents: 22913
diff changeset
555 (with-output-to-string (4 2))
30651
61c2f9fcb8f6 * emacs-lisp/cl-indent.el (toplevel): Indent `defclass',
Sam Steingold <sds@gnu.org>
parents: 29797
diff changeset
556 (with-slots . multiple-value-bind)
22180
485917486caf Indent `with-standard-io-syntax' correctly.
Richard M. Stallman <rms@gnu.org>
parents: 21750
diff changeset
557 (with-standard-io-syntax (2)))))
40952
2ca1b56f3bb1 Indent properly `generic-flet', `generic-labels', `with-accessors',
Sam Steingold <sds@gnu.org>
parents: 38826
diff changeset
558 (dolist (el l)
2ca1b56f3bb1 Indent properly `generic-flet', `generic-labels', `with-accessors',
Sam Steingold <sds@gnu.org>
parents: 38826
diff changeset
559 (put (car el) 'common-lisp-indent-function
2ca1b56f3bb1 Indent properly `generic-flet', `generic-labels', `with-accessors',
Sam Steingold <sds@gnu.org>
parents: 38826
diff changeset
560 (if (symbolp (cdr el))
2ca1b56f3bb1 Indent properly `generic-flet', `generic-labels', `with-accessors',
Sam Steingold <sds@gnu.org>
parents: 38826
diff changeset
561 (get (cdr el) 'common-lisp-indent-function)
2ca1b56f3bb1 Indent properly `generic-flet', `generic-labels', `with-accessors',
Sam Steingold <sds@gnu.org>
parents: 38826
diff changeset
562 (car (cdr el))))))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
563
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
564
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
565 ;(defun foo (x)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
566 ; (tagbody
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
567 ; foo
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
568 ; (bar)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
569 ; baz
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
570 ; (when (losing)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
571 ; (with-big-loser
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
572 ; (yow)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
573 ; ((lambda ()
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
574 ; foo)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
575 ; big)))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
576 ; (flet ((foo (bar baz zap)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
577 ; (zip))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
578 ; (zot ()
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
579 ; quux))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
580 ; (do ()
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
581 ; ((lose)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
582 ; (foo 1))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
583 ; (quux)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
584 ; foo
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
585 ; (lose))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
586 ; (cond ((x)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
587 ; (win 1 2
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
588 ; (foo)))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
589 ; (t
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
590 ; (lose
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
591 ; 3))))))
29797
3bf98b923af0 handle print-unreadable-object
Sam Steingold <sds@gnu.org>
parents: 27872
diff changeset
592
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
593
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
594 ;(put 'while 'common-lisp-indent-function 1)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
595 ;(put 'defwrapper'common-lisp-indent-function ...)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
596 ;(put 'def 'common-lisp-indent-function ...)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
597 ;(put 'defflavor 'common-lisp-indent-function ...)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
598 ;(put 'defsubst 'common-lisp-indent-function ...)
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
599
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
600 ;(put 'with-restart 'common-lisp-indent-function '((1 4 ((* 1))) (2 &body)))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
601 ;(put 'restart-case 'common-lisp-indent-function '((1 4) (* 2 ((0 1) (* 1)))))
34187
e2fb02d21aee Remove erroneous spec for condition-case.
Dave Love <fx@gnu.org>
parents: 30651
diff changeset
602 ;(put 'define-condition 'common-lisp-indent-function '((1 6) (2 6 ((&whole 1))) (3 4 ((&whole 1))) (4 &body)))
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
603 ;(put 'with-condition-handler 'common-lisp-indent-function '((1 4 ((* 1))) (2 &body)))
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
604 ;(put 'condition-case 'common-lisp-indent-function '((1 4) (* 2 ((0 1) (1 3) (2 &body)))))
34187
e2fb02d21aee Remove erroneous spec for condition-case.
Dave Love <fx@gnu.org>
parents: 30651
diff changeset
605 ;(put 'defclass 'common-lisp-indent-function '((&whole 2 &rest (&whole 2 &rest 1) &rest (&whole 2 &rest 1)))
e2fb02d21aee Remove erroneous spec for condition-case.
Dave Love <fx@gnu.org>
parents: 30651
diff changeset
606 ;(put 'defgeneric 'common-lisp-indent-function 'defun)
257
e5ba2ba35226 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
607
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 257
diff changeset
608 ;;; cl-indent.el ends here