annotate lisp/emacs-lisp/lisp-mode.el @ 18092:8428d56cd207

(smtpmail-via-smtp): Recognize XVRB as a synonym for VERB and XONE as a synonym for ONEX. (smtpmail-read-response): Add "%s" to `message' calls to avoid problems with percent signs in strings. (smtpmail-read-response): Return all lines of the response text as a list of strings. Formerly only the first line was returned. This is insufficient when one wants to parse e.g. an EHLO response. Ignore responses starting with "0". This is necessary to support the VERB SMTP extension. (smtpmail-via-smtp): Try EHLO and find out which SMTP service extensions the receiving mailer supports. Issue the ONEX and XUSR commands if the corresponding extensions are supported. Issue VERB if supported and `smtpmail-debug-info' is non-nil. Add SIZE attribute to MAIL FROM: command if SIZE extension is supported. Add code that could set the BODY= attribute to MAIL FROM: if the receiving mailer supports 8BITMIME. This is currently disabled, since doing it right might involve adding MIME headers to, and in some cases reencoding, the message.
author Richard M. Stallman <rms@gnu.org>
date Sun, 01 Jun 1997 22:24:22 +0000
parents 71db8e3ee12f
children b1251bcaaa0e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
1 ;;; lisp-mode.el --- Lisp mode, and its idiosyncratic commands.
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
2
14734
20f4c4a078b2 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 14719
diff changeset
3 ;; Copyright (C) 1985, 1986 Free Software Foundation, Inc.
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 811
diff changeset
4
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 727
diff changeset
5 ;; Maintainer: FSF
811
e694e0879463 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
6 ;; Keywords: lisp, languages
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 727
diff changeset
7
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
9
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
11 ;; 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: 727
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
13 ;; any later version.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
14
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
18 ;; GNU General Public License for more details.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
19
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14116
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14116
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14116
diff changeset
23 ;; Boston, MA 02111-1307, USA.
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
24
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2232
diff changeset
25 ;;; Commentary:
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2232
diff changeset
26
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2232
diff changeset
27 ;; The base major mode for editing Lisp code (used also for Emacs Lisp).
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2232
diff changeset
28 ;; This mode is documented in the Emacs manual
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2232
diff changeset
29
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2232
diff changeset
30 ;;; Code:
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2232
diff changeset
31
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
32 (defvar lisp-mode-syntax-table nil "")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
33 (defvar emacs-lisp-mode-syntax-table nil "")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
34 (defvar lisp-mode-abbrev-table nil "")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
35
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
36 (if (not emacs-lisp-mode-syntax-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
37 (let ((i 0))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
38 (setq emacs-lisp-mode-syntax-table (make-syntax-table))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
39 (while (< i ?0)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
40 (modify-syntax-entry i "_ " emacs-lisp-mode-syntax-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
41 (setq i (1+ i)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
42 (setq i (1+ ?9))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
43 (while (< i ?A)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
44 (modify-syntax-entry i "_ " emacs-lisp-mode-syntax-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
45 (setq i (1+ i)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
46 (setq i (1+ ?Z))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
47 (while (< i ?a)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
48 (modify-syntax-entry i "_ " emacs-lisp-mode-syntax-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
49 (setq i (1+ i)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
50 (setq i (1+ ?z))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
51 (while (< i 128)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
52 (modify-syntax-entry i "_ " emacs-lisp-mode-syntax-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
53 (setq i (1+ i)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
54 (modify-syntax-entry ? " " emacs-lisp-mode-syntax-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
55 (modify-syntax-entry ?\t " " emacs-lisp-mode-syntax-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
56 (modify-syntax-entry ?\n "> " emacs-lisp-mode-syntax-table)
8325
2c8b3c988b10 (emacs-lisp-mode-syntax-table): Give RET the same syntax as newline.
Richard M. Stallman <rms@gnu.org>
parents: 7301
diff changeset
57 ;; Give CR the same syntax as newline, for selective-display.
2c8b3c988b10 (emacs-lisp-mode-syntax-table): Give RET the same syntax as newline.
Richard M. Stallman <rms@gnu.org>
parents: 7301
diff changeset
58 (modify-syntax-entry ?\^m "> " emacs-lisp-mode-syntax-table)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
59 (modify-syntax-entry ?\; "< " emacs-lisp-mode-syntax-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
60 (modify-syntax-entry ?` "' " emacs-lisp-mode-syntax-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
61 (modify-syntax-entry ?' "' " emacs-lisp-mode-syntax-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
62 (modify-syntax-entry ?, "' " emacs-lisp-mode-syntax-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
63 ;; Used to be singlequote; changed for flonums.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
64 (modify-syntax-entry ?. "_ " emacs-lisp-mode-syntax-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
65 (modify-syntax-entry ?# "' " emacs-lisp-mode-syntax-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
66 (modify-syntax-entry ?\" "\" " emacs-lisp-mode-syntax-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
67 (modify-syntax-entry ?\\ "\\ " emacs-lisp-mode-syntax-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
68 (modify-syntax-entry ?\( "() " emacs-lisp-mode-syntax-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
69 (modify-syntax-entry ?\) ")( " emacs-lisp-mode-syntax-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
70 (modify-syntax-entry ?\[ "(] " emacs-lisp-mode-syntax-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
71 (modify-syntax-entry ?\] ")[ " emacs-lisp-mode-syntax-table)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
72
285
adb31fcccc2b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 255
diff changeset
73 (if (not lisp-mode-syntax-table)
adb31fcccc2b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 255
diff changeset
74 (progn (setq lisp-mode-syntax-table
adb31fcccc2b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 255
diff changeset
75 (copy-syntax-table emacs-lisp-mode-syntax-table))
adb31fcccc2b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 255
diff changeset
76 (modify-syntax-entry ?\| "\" " lisp-mode-syntax-table)
adb31fcccc2b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 255
diff changeset
77 (modify-syntax-entry ?\[ "_ " lisp-mode-syntax-table)
adb31fcccc2b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 255
diff changeset
78 (modify-syntax-entry ?\] "_ " lisp-mode-syntax-table)))
adb31fcccc2b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 255
diff changeset
79
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
80 (define-abbrev-table 'lisp-mode-abbrev-table ())
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
81
12701
c50826e44362 (lisp-imenu-generic-expression): Var defined.
Karl Heuer <kwzh@gnu.org>
parents: 12682
diff changeset
82 (defvar lisp-imenu-generic-expression
c50826e44362 (lisp-imenu-generic-expression): Var defined.
Karl Heuer <kwzh@gnu.org>
parents: 12682
diff changeset
83 '(
c50826e44362 (lisp-imenu-generic-expression): Var defined.
Karl Heuer <kwzh@gnu.org>
parents: 12682
diff changeset
84 (nil
17144
1b3723c744f5 (lisp-imenu-generic-expression): Accept `*', `|',
Karl Heuer <kwzh@gnu.org>
parents: 17066
diff changeset
85 "^\\s-*(def\\(un\\|subst\\|macro\\|advice\\)\\s-+\\([-A-Za-z0-9+*|:]+\\)" 2)
12701
c50826e44362 (lisp-imenu-generic-expression): Var defined.
Karl Heuer <kwzh@gnu.org>
parents: 12682
diff changeset
86 ("Variables"
17144
1b3723c744f5 (lisp-imenu-generic-expression): Accept `*', `|',
Karl Heuer <kwzh@gnu.org>
parents: 17066
diff changeset
87 "^\\s-*(def\\(var\\|const\\)\\s-+\\([-A-Za-z0-9+*|:]+\\)" 2)
12701
c50826e44362 (lisp-imenu-generic-expression): Var defined.
Karl Heuer <kwzh@gnu.org>
parents: 12682
diff changeset
88 ("Types"
17144
1b3723c744f5 (lisp-imenu-generic-expression): Accept `*', `|',
Karl Heuer <kwzh@gnu.org>
parents: 17066
diff changeset
89 "^\\s-*(def\\(type\\|struct\\|class\\|ine-condition\\)\\s-+\\([-A-Za-z0-9+*|:]+\\)"
12701
c50826e44362 (lisp-imenu-generic-expression): Var defined.
Karl Heuer <kwzh@gnu.org>
parents: 12682
diff changeset
90 2))
c50826e44362 (lisp-imenu-generic-expression): Var defined.
Karl Heuer <kwzh@gnu.org>
parents: 12682
diff changeset
91
c50826e44362 (lisp-imenu-generic-expression): Var defined.
Karl Heuer <kwzh@gnu.org>
parents: 12682
diff changeset
92 "Imenu generic expression for Lisp mode. See `imenu-generic-expression'.")
c50826e44362 (lisp-imenu-generic-expression): Var defined.
Karl Heuer <kwzh@gnu.org>
parents: 12682
diff changeset
93
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
94 (defun lisp-mode-variables (lisp-syntax)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
95 (cond (lisp-syntax
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
96 (set-syntax-table lisp-mode-syntax-table)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
97 (setq local-abbrev-table lisp-mode-abbrev-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
98 (make-local-variable 'paragraph-start)
13504
1319330ca7ff (lisp-mode-variables, lisp-fill-paragraph): Remove
Richard M. Stallman <rms@gnu.org>
parents: 12701
diff changeset
99 (setq paragraph-start (concat page-delimiter "\\|$" ))
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
100 (make-local-variable 'paragraph-separate)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
101 (setq paragraph-separate paragraph-start)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
102 (make-local-variable 'paragraph-ignore-fill-prefix)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
103 (setq paragraph-ignore-fill-prefix t)
10628
04591bafb562 (shared-lisp-mode-map): Don't bind M-q.
Richard M. Stallman <rms@gnu.org>
parents: 10594
diff changeset
104 (make-local-variable 'fill-paragraph-function)
04591bafb562 (shared-lisp-mode-map): Don't bind M-q.
Richard M. Stallman <rms@gnu.org>
parents: 10594
diff changeset
105 (setq fill-paragraph-function 'lisp-fill-paragraph)
14495
fc4be3d538e0 (lisp-mode-variables): Locally clear adaptive-fill-mode.
Richard M. Stallman <rms@gnu.org>
parents: 14379
diff changeset
106 ;; Adaptive fill mode gets in the way of auto-fill,
fc4be3d538e0 (lisp-mode-variables): Locally clear adaptive-fill-mode.
Richard M. Stallman <rms@gnu.org>
parents: 14379
diff changeset
107 ;; and should make no difference for explicit fill
fc4be3d538e0 (lisp-mode-variables): Locally clear adaptive-fill-mode.
Richard M. Stallman <rms@gnu.org>
parents: 14379
diff changeset
108 ;; because lisp-fill-paragraph should do the job.
fc4be3d538e0 (lisp-mode-variables): Locally clear adaptive-fill-mode.
Richard M. Stallman <rms@gnu.org>
parents: 14379
diff changeset
109 (make-local-variable 'adaptive-fill-mode)
fc4be3d538e0 (lisp-mode-variables): Locally clear adaptive-fill-mode.
Richard M. Stallman <rms@gnu.org>
parents: 14379
diff changeset
110 (setq adaptive-fill-mode nil)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
111 (make-local-variable 'indent-line-function)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
112 (setq indent-line-function 'lisp-indent-line)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
113 (make-local-variable 'indent-region-function)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
114 (setq indent-region-function 'lisp-indent-region)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
115 (make-local-variable 'parse-sexp-ignore-comments)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
116 (setq parse-sexp-ignore-comments t)
6076
4f76564fc2cd (lisp-mode-variables): Set outline-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 5103
diff changeset
117 (make-local-variable 'outline-regexp)
7301
edad1db699ab (lisp-mode-variables): Added missing backslash to outline-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 7170
diff changeset
118 (setq outline-regexp ";;; \\|(....")
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
119 (make-local-variable 'comment-start)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
120 (setq comment-start ";")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
121 (make-local-variable 'comment-start-skip)
15597
ca84d7021f4e (lisp-mode-variables): Set comment-start-skip to ignore backslash-quoted
Miles Bader <miles@gnu.org>
parents: 14817
diff changeset
122 ;; Look within the line for a ; following an even number of backslashes
ca84d7021f4e (lisp-mode-variables): Set comment-start-skip to ignore backslash-quoted
Miles Bader <miles@gnu.org>
parents: 14817
diff changeset
123 ;; after either a non-backslash or the line beginning.
ca84d7021f4e (lisp-mode-variables): Set comment-start-skip to ignore backslash-quoted
Miles Bader <miles@gnu.org>
parents: 14817
diff changeset
124 (setq comment-start-skip "\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\);+ *")
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
125 (make-local-variable 'comment-column)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
126 (setq comment-column 40)
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2232
diff changeset
127 (make-local-variable 'comment-indent-function)
12701
c50826e44362 (lisp-imenu-generic-expression): Var defined.
Karl Heuer <kwzh@gnu.org>
parents: 12682
diff changeset
128 (setq comment-indent-function 'lisp-comment-indent)
c50826e44362 (lisp-imenu-generic-expression): Var defined.
Karl Heuer <kwzh@gnu.org>
parents: 12682
diff changeset
129 (make-local-variable 'imenu-generic-expression)
c50826e44362 (lisp-imenu-generic-expression): Var defined.
Karl Heuer <kwzh@gnu.org>
parents: 12682
diff changeset
130 (setq imenu-generic-expression lisp-imenu-generic-expression))
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
131
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
132 (defvar shared-lisp-mode-map ()
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
133 "Keymap for commands shared by all sorts of Lisp modes.")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
134
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
135 (if shared-lisp-mode-map
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
136 ()
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
137 (setq shared-lisp-mode-map (make-sparse-keymap))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
138 (define-key shared-lisp-mode-map "\e\C-q" 'indent-sexp)
12682
66b3d052d4fe (shared-lisp-mode-map): Don't bind TAB, just set indent-line-function.
Richard M. Stallman <rms@gnu.org>
parents: 12352
diff changeset
139 (define-key shared-lisp-mode-map "\177" 'backward-delete-char-untabify))
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
140
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
141 (defvar emacs-lisp-mode-map ()
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
142 "Keymap for Emacs Lisp mode.
12682
66b3d052d4fe (shared-lisp-mode-map): Don't bind TAB, just set indent-line-function.
Richard M. Stallman <rms@gnu.org>
parents: 12352
diff changeset
143 All commands in `shared-lisp-mode-map' are inherited by this map.")
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
144
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
145 (if emacs-lisp-mode-map
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
146 ()
12035
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
147 (let ((map (make-sparse-keymap "Emacs-Lisp")))
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
148 (setq emacs-lisp-mode-map
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
149 (nconc (make-sparse-keymap) shared-lisp-mode-map))
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
150 (define-key emacs-lisp-mode-map "\e\t" 'lisp-complete-symbol)
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
151 (define-key emacs-lisp-mode-map "\e\C-x" 'eval-defun)
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
152 (define-key emacs-lisp-mode-map [menu-bar] (make-sparse-keymap))
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
153 (define-key emacs-lisp-mode-map [menu-bar emacs-lisp]
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
154 (cons "Emacs-Lisp" map))
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
155 (define-key map [edebug-defun]
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
156 '("Instrument Function for Debugging" . edebug-defun))
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
157 (define-key map [byte-recompile]
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
158 '("Byte-recompile Directory..." . byte-recompile-directory))
14290
fc9c72889fec (emacs-lisp-mode-map): Avoid duplicate in menu bindings.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
159 (define-key map [emacs-byte-compile-and-load]
14719
d477c6f756df Save if reqd in emacs-lisp-byte-compile-and-load.
Simon Marshall <simon@gnu.org>
parents: 14628
diff changeset
160 '("Byte-compile And Load" . emacs-lisp-byte-compile-and-load))
14116
5f985037b64f (emacs-lisp-byte-compile): Fix error message.
Karl Heuer <kwzh@gnu.org>
parents: 13802
diff changeset
161 (define-key map [byte-compile]
12035
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
162 '("Byte-compile This File" . emacs-lisp-byte-compile))
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
163 (define-key map [separator-eval] '("--"))
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
164 (define-key map [eval-buffer] '("Evaluate Buffer" . eval-current-buffer))
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
165 (define-key map [eval-region] '("Evaluate Region" . eval-region))
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
166 (define-key map [eval-sexp] '("Evaluate Last S-expression" . eval-last-sexp))
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
167 (define-key map [separator-format] '("--"))
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
168 (define-key map [comment-region] '("Comment Out Region" . comment-region))
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
169 (define-key map [indent-region] '("Indent Region" . indent-region))
12218
a4f383dd5adb Put mark-active for menu-enable property on eval-region, comment-region, and indent-region symbols.
Simon Marshall <simon@gnu.org>
parents: 12035
diff changeset
170 (define-key map [indent-line] '("Indent Line" . lisp-indent-line))
a4f383dd5adb Put mark-active for menu-enable property on eval-region, comment-region, and indent-region symbols.
Simon Marshall <simon@gnu.org>
parents: 12035
diff changeset
171 (put 'eval-region 'menu-enable 'mark-active)
a4f383dd5adb Put mark-active for menu-enable property on eval-region, comment-region, and indent-region symbols.
Simon Marshall <simon@gnu.org>
parents: 12035
diff changeset
172 (put 'comment-region 'menu-enable 'mark-active)
a4f383dd5adb Put mark-active for menu-enable property on eval-region, comment-region, and indent-region symbols.
Simon Marshall <simon@gnu.org>
parents: 12035
diff changeset
173 (put 'indent-region 'menu-enable 'mark-active)))
12035
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
174
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
175 (defun emacs-lisp-byte-compile ()
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
176 "Byte compile the file containing the current buffer."
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
177 (interactive)
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
178 (if buffer-file-name
c3747e64cff0 (emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents: 10968
diff changeset
179 (byte-compile-file buffer-file-name)
14116
5f985037b64f (emacs-lisp-byte-compile): Fix error message.
Karl Heuer <kwzh@gnu.org>
parents: 13802
diff changeset
180 (error "The buffer must be saved in a file first")))
5f985037b64f (emacs-lisp-byte-compile): Fix error message.
Karl Heuer <kwzh@gnu.org>
parents: 13802
diff changeset
181
14719
d477c6f756df Save if reqd in emacs-lisp-byte-compile-and-load.
Simon Marshall <simon@gnu.org>
parents: 14628
diff changeset
182 (defun emacs-lisp-byte-compile-and-load ()
14116
5f985037b64f (emacs-lisp-byte-compile): Fix error message.
Karl Heuer <kwzh@gnu.org>
parents: 13802
diff changeset
183 "Byte-compile the current file (if it has changed), then load compiled code."
5f985037b64f (emacs-lisp-byte-compile): Fix error message.
Karl Heuer <kwzh@gnu.org>
parents: 13802
diff changeset
184 (interactive)
5f985037b64f (emacs-lisp-byte-compile): Fix error message.
Karl Heuer <kwzh@gnu.org>
parents: 13802
diff changeset
185 (or buffer-file-name
5f985037b64f (emacs-lisp-byte-compile): Fix error message.
Karl Heuer <kwzh@gnu.org>
parents: 13802
diff changeset
186 (error "The buffer must be saved in a file first"))
5f985037b64f (emacs-lisp-byte-compile): Fix error message.
Karl Heuer <kwzh@gnu.org>
parents: 13802
diff changeset
187 (require 'bytecomp)
5f985037b64f (emacs-lisp-byte-compile): Fix error message.
Karl Heuer <kwzh@gnu.org>
parents: 13802
diff changeset
188 ;; Recompile if file or buffer has changed since last compilation.
14719
d477c6f756df Save if reqd in emacs-lisp-byte-compile-and-load.
Simon Marshall <simon@gnu.org>
parents: 14628
diff changeset
189 (if (and (buffer-modified-p)
d477c6f756df Save if reqd in emacs-lisp-byte-compile-and-load.
Simon Marshall <simon@gnu.org>
parents: 14628
diff changeset
190 (y-or-n-p (format "save buffer %s first? " (buffer-name))))
d477c6f756df Save if reqd in emacs-lisp-byte-compile-and-load.
Simon Marshall <simon@gnu.org>
parents: 14628
diff changeset
191 (save-buffer))
d477c6f756df Save if reqd in emacs-lisp-byte-compile-and-load.
Simon Marshall <simon@gnu.org>
parents: 14628
diff changeset
192 (let ((compiled-file-name (byte-compile-dest-file buffer-file-name)))
d477c6f756df Save if reqd in emacs-lisp-byte-compile-and-load.
Simon Marshall <simon@gnu.org>
parents: 14628
diff changeset
193 (if (file-newer-than-file-p compiled-file-name buffer-file-name)
d477c6f756df Save if reqd in emacs-lisp-byte-compile-and-load.
Simon Marshall <simon@gnu.org>
parents: 14628
diff changeset
194 (load-file compiled-file-name)
d477c6f756df Save if reqd in emacs-lisp-byte-compile-and-load.
Simon Marshall <simon@gnu.org>
parents: 14628
diff changeset
195 (byte-compile-file buffer-file-name t))))
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
196
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
197 (defun emacs-lisp-mode ()
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
198 "Major mode for editing Lisp code to run in Emacs.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
199 Commands:
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
200 Delete converts tabs to spaces as it moves back.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
201 Blank lines separate paragraphs. Semicolons start comments.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
202 \\{emacs-lisp-mode-map}
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
203 Entry to this mode calls the value of `emacs-lisp-mode-hook'
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
204 if that value is non-nil."
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
205 (interactive)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
206 (kill-all-local-variables)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
207 (use-local-map emacs-lisp-mode-map)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
208 (set-syntax-table emacs-lisp-mode-syntax-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
209 (setq major-mode 'emacs-lisp-mode)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
210 (setq mode-name "Emacs-Lisp")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
211 (lisp-mode-variables nil)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
212 (run-hooks 'emacs-lisp-mode-hook))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
214 (defvar lisp-mode-map ()
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
215 "Keymap for ordinary Lisp mode.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
216 All commands in `shared-lisp-mode-map' are inherited by this map.")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
217
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
218 (if lisp-mode-map
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
219 ()
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
220 (setq lisp-mode-map
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
221 (nconc (make-sparse-keymap) shared-lisp-mode-map))
5103
40b068fb4c37 (lisp-eval-defun): Renamed from lisp-send-defun.
Richard M. Stallman <rms@gnu.org>
parents: 3638
diff changeset
222 (define-key lisp-mode-map "\e\C-x" 'lisp-eval-defun)
40b068fb4c37 (lisp-eval-defun): Renamed from lisp-send-defun.
Richard M. Stallman <rms@gnu.org>
parents: 3638
diff changeset
223 (define-key lisp-mode-map "\C-c\C-z" 'run-lisp))
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
224
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
225 (defun lisp-mode ()
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
226 "Major mode for editing Lisp code for Lisps other than GNU Emacs Lisp.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
227 Commands:
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
228 Delete converts tabs to spaces as it moves back.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
229 Blank lines separate paragraphs. Semicolons start comments.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
230 \\{lisp-mode-map}
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
231 Note that `run-lisp' may be used either to start an inferior Lisp job
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
232 or to switch back to an existing one.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
233
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
234 Entry to this mode calls the value of `lisp-mode-hook'
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
235 if that value is non-nil."
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
236 (interactive)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
237 (kill-all-local-variables)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
238 (use-local-map lisp-mode-map)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
239 (setq major-mode 'lisp-mode)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
240 (setq mode-name "Lisp")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
241 (lisp-mode-variables t)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
242 (set-syntax-table lisp-mode-syntax-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
243 (run-hooks 'lisp-mode-hook))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
244
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
245 ;; This will do unless shell.el is loaded.
5103
40b068fb4c37 (lisp-eval-defun): Renamed from lisp-send-defun.
Richard M. Stallman <rms@gnu.org>
parents: 3638
diff changeset
246 (defun lisp-eval-defun nil
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
247 "Send the current defun to the Lisp process made by \\[run-lisp]."
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
248 (interactive)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
249 (error "Process lisp does not exist"))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
250
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
251 (defvar lisp-interaction-mode-map ()
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
252 "Keymap for Lisp Interaction moe.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
253 All commands in `shared-lisp-mode-map' are inherited by this map.")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
254
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
255 (if lisp-interaction-mode-map
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
256 ()
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
257 (setq lisp-interaction-mode-map
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
258 (nconc (make-sparse-keymap) shared-lisp-mode-map))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
259 (define-key lisp-interaction-mode-map "\e\C-x" 'eval-defun)
878
5b1c5b4286e7 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
260 (define-key lisp-interaction-mode-map "\e\t" 'lisp-complete-symbol)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
261 (define-key lisp-interaction-mode-map "\n" 'eval-print-last-sexp))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
262
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
263 (defun lisp-interaction-mode ()
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
264 "Major mode for typing and evaluating Lisp forms.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
265 Like Lisp mode except that \\[eval-print-last-sexp] evals the Lisp expression
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
266 before point, and prints its value into the buffer, advancing point.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
267
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
268 Commands:
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
269 Delete converts tabs to spaces as it moves back.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
270 Paragraphs are separated only by blank lines.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
271 Semicolons start comments.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
272 \\{lisp-interaction-mode-map}
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
273 Entry to this mode calls the value of `lisp-interaction-mode-hook'
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
274 if that value is non-nil."
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
275 (interactive)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
276 (kill-all-local-variables)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
277 (use-local-map lisp-interaction-mode-map)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
278 (setq major-mode 'lisp-interaction-mode)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
279 (setq mode-name "Lisp Interaction")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
280 (set-syntax-table emacs-lisp-mode-syntax-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
281 (lisp-mode-variables nil)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
282 (run-hooks 'lisp-interaction-mode-hook))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
283
248
287cf3ae183a *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 214
diff changeset
284 (defun eval-print-last-sexp ()
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
285 "Evaluate sexp before point; print value into current buffer."
248
287cf3ae183a *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 214
diff changeset
286 (interactive)
422
5abb8aac7c6b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
287 (let ((standard-output (current-buffer)))
5abb8aac7c6b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
288 (terpri)
5abb8aac7c6b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
289 (eval-last-sexp t)
5abb8aac7c6b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
290 (terpri)))
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
291
2450
17d258d8e8e4 (eval-defun): Rename argument to avoid collision.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
292 (defun eval-last-sexp (eval-last-sexp-arg-internal)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
293 "Evaluate sexp before point; print value in minibuffer.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
294 With argument, print output into current buffer."
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
295 (interactive "P")
17066
852e90e67fff (eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
296 (let ((standard-output (if eval-last-sexp-arg-internal (current-buffer) t)))
852e90e67fff (eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
297 (prin1 (eval (let ((stab (syntax-table))
852e90e67fff (eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
298 (opoint (point))
852e90e67fff (eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
299 expr)
852e90e67fff (eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
300 (unwind-protect
249
43cdaf2db624 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 248
diff changeset
301 (save-excursion
43cdaf2db624 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 248
diff changeset
302 (set-syntax-table emacs-lisp-mode-syntax-table)
43cdaf2db624 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 248
diff changeset
303 (forward-sexp -1)
1163
c205d560cc22 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 878
diff changeset
304 (save-restriction
c205d560cc22 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 878
diff changeset
305 (narrow-to-region (point-min) opoint)
17066
852e90e67fff (eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
306 (setq expr (read (current-buffer)))
852e90e67fff (eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
307 ;; If it's an (interactive ...) form, it's more
852e90e67fff (eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
308 ;; useful to show how an interactive call would
852e90e67fff (eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
309 ;; use it.
852e90e67fff (eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
310 (and (consp expr)
852e90e67fff (eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
311 (eq (car expr) 'interactive)
852e90e67fff (eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
312 (setq expr
852e90e67fff (eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
313 (list 'call-interactively
852e90e67fff (eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
314 (list 'quote
852e90e67fff (eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
315 (list 'lambda
852e90e67fff (eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
316 '(&rest args)
852e90e67fff (eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
317 expr
852e90e67fff (eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
318 'args)))))
852e90e67fff (eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
319 expr))
249
43cdaf2db624 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 248
diff changeset
320 (set-syntax-table stab)))))))
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
321
2450
17d258d8e8e4 (eval-defun): Rename argument to avoid collision.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
322 (defun eval-defun (eval-defun-arg-internal)
248
287cf3ae183a *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 214
diff changeset
323 "Evaluate defun that point is in or before.
287cf3ae183a *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 214
diff changeset
324 Print value in minibuffer.
287cf3ae183a *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 214
diff changeset
325 With argument, insert value in current buffer after the defun."
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
326 (interactive "P")
10968
bea3ee51b843 (eval-defun): Convert defvar to defconst.
Richard M. Stallman <rms@gnu.org>
parents: 10629
diff changeset
327 (let ((standard-output (if eval-defun-arg-internal (current-buffer) t))
bea3ee51b843 (eval-defun): Convert defvar to defconst.
Richard M. Stallman <rms@gnu.org>
parents: 10629
diff changeset
328 (form (save-excursion
bea3ee51b843 (eval-defun): Convert defvar to defconst.
Richard M. Stallman <rms@gnu.org>
parents: 10629
diff changeset
329 (end-of-defun)
bea3ee51b843 (eval-defun): Convert defvar to defconst.
Richard M. Stallman <rms@gnu.org>
parents: 10629
diff changeset
330 (beginning-of-defun)
bea3ee51b843 (eval-defun): Convert defvar to defconst.
Richard M. Stallman <rms@gnu.org>
parents: 10629
diff changeset
331 (read (current-buffer)))))
17353
71db8e3ee12f (eval-defun): For defcustom, always set the value.
Richard M. Stallman <rms@gnu.org>
parents: 17308
diff changeset
332 (cond ((and (eq (car form) 'defvar)
71db8e3ee12f (eval-defun): For defcustom, always set the value.
Richard M. Stallman <rms@gnu.org>
parents: 17308
diff changeset
333 (cdr-safe (cdr-safe form)))
71db8e3ee12f (eval-defun): For defcustom, always set the value.
Richard M. Stallman <rms@gnu.org>
parents: 17308
diff changeset
334 ;; Force variable to be bound.
71db8e3ee12f (eval-defun): For defcustom, always set the value.
Richard M. Stallman <rms@gnu.org>
parents: 17308
diff changeset
335 (setq form (cons 'defconst (cdr form))))
71db8e3ee12f (eval-defun): For defcustom, always set the value.
Richard M. Stallman <rms@gnu.org>
parents: 17308
diff changeset
336 ((and (eq (car form) 'defcustom)
71db8e3ee12f (eval-defun): For defcustom, always set the value.
Richard M. Stallman <rms@gnu.org>
parents: 17308
diff changeset
337 (default-boundp (nth 1 form)))
71db8e3ee12f (eval-defun): For defcustom, always set the value.
Richard M. Stallman <rms@gnu.org>
parents: 17308
diff changeset
338 ;; Force variable to be bound.
71db8e3ee12f (eval-defun): For defcustom, always set the value.
Richard M. Stallman <rms@gnu.org>
parents: 17308
diff changeset
339 (set-default (nth 1 form) (eval (nth 2 form)))))
10968
bea3ee51b843 (eval-defun): Convert defvar to defconst.
Richard M. Stallman <rms@gnu.org>
parents: 10629
diff changeset
340 (prin1 (eval form))))
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
341
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
342 (defun lisp-comment-indent ()
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
343 (if (looking-at "\\s<\\s<\\s<")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
344 (current-column)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
345 (if (looking-at "\\s<\\s<")
17308
e52fa60d97e8 (indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents: 17144
diff changeset
346 (let ((tem (or (calculate-lisp-indent) (current-column))))
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
347 (if (listp tem) (car tem) tem))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
348 (skip-chars-backward " \t")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
349 (max (if (bolp) 0 (1+ (current-column)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
350 comment-column))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
351
16687
049c87a96dca Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents: 16563
diff changeset
352 (defvar lisp-indent-offset nil "")
049c87a96dca Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents: 16563
diff changeset
353 (defvar lisp-indent-function 'lisp-indent-function "")
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
354
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
355 (defun lisp-indent-line (&optional whole-exp)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
356 "Indent current line as Lisp code.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
357 With argument, indent any additional lines of the same expression
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
358 rigidly along with this one."
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
359 (interactive "P")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
360 (let ((indent (calculate-lisp-indent)) shift-amt beg end
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
361 (pos (- (point-max) (point))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
362 (beginning-of-line)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
363 (setq beg (point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
364 (skip-chars-forward " \t")
17308
e52fa60d97e8 (indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents: 17144
diff changeset
365 (if (or (null indent) (looking-at "\\s<\\s<\\s<"))
e52fa60d97e8 (indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents: 17144
diff changeset
366 ;; Don't alter indentation of a ;;; comment line
e52fa60d97e8 (indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents: 17144
diff changeset
367 ;; or a line that starts in a string.
677
7a9b4ea68565 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 659
diff changeset
368 (goto-char (- (point-max) pos))
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
369 (if (and (looking-at "\\s<") (not (looking-at "\\s<\\s<")))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
370 ;; Single-semicolon comment lines should be indented
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
371 ;; as comment lines, not as code.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
372 (progn (indent-for-comment) (forward-char -1))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
373 (if (listp indent) (setq indent (car indent)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
374 (setq shift-amt (- indent (current-column)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
375 (if (zerop shift-amt)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
376 nil
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
377 (delete-region beg (point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
378 (indent-to indent)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
379 ;; If initial point was within line's indentation,
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
380 ;; position after the indentation. Else stay at same point in text.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
381 (if (> (- (point-max) pos) (point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
382 (goto-char (- (point-max) pos)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
383 ;; If desired, shift remaining lines of expression the same amount.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
384 (and whole-exp (not (zerop shift-amt))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
385 (save-excursion
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
386 (goto-char beg)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
387 (forward-sexp 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
388 (setq end (point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
389 (goto-char beg)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
390 (forward-line 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
391 (setq beg (point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
392 (> end beg))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
393 (indent-code-rigidly beg end shift-amt)))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
394
9424
738999b0296f Fix typo in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 9423
diff changeset
395 (defvar calculate-lisp-indent-last-sexp)
9423
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
396
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
397 (defun calculate-lisp-indent (&optional parse-start)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
398 "Return appropriate indentation for current line as Lisp code.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
399 In usual case returns an integer: the column to indent to.
17308
e52fa60d97e8 (indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents: 17144
diff changeset
400 If the value is nil, that means don't change the indentation
e52fa60d97e8 (indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents: 17144
diff changeset
401 because the line starts inside a string.
e52fa60d97e8 (indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents: 17144
diff changeset
402
e52fa60d97e8 (indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents: 17144
diff changeset
403 The value can also be a list of the form (COLUMN CONTAINING-SEXP-START).
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
404 This means that following lines at the same level of indentation
17308
e52fa60d97e8 (indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents: 17144
diff changeset
405 should not necessarily be indented the same as this line.
e52fa60d97e8 (indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents: 17144
diff changeset
406 Then COLUMN is the column to indent to, and CONTAINING-SEXP-START
e52fa60d97e8 (indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents: 17144
diff changeset
407 is the buffer position of the start of the containing expression."
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
408 (save-excursion
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
409 (beginning-of-line)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
410 (let ((indent-point (point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
411 state paren-depth
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
412 ;; setting this to a number inhibits calling hook
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
413 (desired-indent nil)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
414 (retry t)
9423
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
415 calculate-lisp-indent-last-sexp containing-sexp)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
416 (if parse-start
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
417 (goto-char parse-start)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
418 (beginning-of-defun))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
419 ;; Find outermost containing sexp
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
420 (while (< (point) indent-point)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
421 (setq state (parse-partial-sexp (point) indent-point 0)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
422 ;; Find innermost containing sexp
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
423 (while (and retry
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
424 state
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
425 (> (setq paren-depth (elt state 0)) 0))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
426 (setq retry nil)
9423
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
427 (setq calculate-lisp-indent-last-sexp (elt state 2))
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
428 (setq containing-sexp (elt state 1))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
429 ;; Position following last unclosed open.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
430 (goto-char (1+ containing-sexp))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
431 ;; Is there a complete sexp since then?
9423
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
432 (if (and calculate-lisp-indent-last-sexp
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
433 (> calculate-lisp-indent-last-sexp (point)))
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
434 ;; Yes, but is there a containing sexp after that?
9423
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
435 (let ((peek (parse-partial-sexp calculate-lisp-indent-last-sexp
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
436 indent-point 0)))
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
437 (if (setq retry (car (cdr peek))) (setq state peek)))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
438 (if retry
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
439 nil
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
440 ;; Innermost containing sexp found
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
441 (goto-char (1+ containing-sexp))
9423
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
442 (if (not calculate-lisp-indent-last-sexp)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
443 ;; indent-point immediately follows open paren.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
444 ;; Don't call hook.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
445 (setq desired-indent (current-column))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
446 ;; Find the start of first element of containing sexp.
9423
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
447 (parse-partial-sexp (point) calculate-lisp-indent-last-sexp 0 t)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
448 (cond ((looking-at "\\s(")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
449 ;; First element of containing sexp is a list.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
450 ;; Indent under that list.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
451 )
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
452 ((> (save-excursion (forward-line 1) (point))
9423
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
453 calculate-lisp-indent-last-sexp)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
454 ;; This is the first line to start within the containing sexp.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
455 ;; It's almost certainly a function call.
9423
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
456 (if (= (point) calculate-lisp-indent-last-sexp)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
457 ;; Containing sexp has nothing before this line
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
458 ;; except the first element. Indent under that element.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
459 nil
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
460 ;; Skip the first element, find start of second (the first
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
461 ;; argument of the function call) and indent under.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
462 (progn (forward-sexp 1)
9423
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
463 (parse-partial-sexp (point)
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
464 calculate-lisp-indent-last-sexp
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
465 0 t)))
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
466 (backward-prefix-chars))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
467 (t
9423
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
468 ;; Indent beneath first sexp on same line as
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
469 ;; calculate-lisp-indent-last-sexp. Again, it's
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
470 ;; almost certainly a function call.
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
471 (goto-char calculate-lisp-indent-last-sexp)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
472 (beginning-of-line)
9423
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
473 (parse-partial-sexp (point) calculate-lisp-indent-last-sexp
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
474 0 t)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
475 (backward-prefix-chars)))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
476 ;; Point is at the point to indent under unless we are inside a string.
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3241
diff changeset
477 ;; Call indentation hook except when overridden by lisp-indent-offset
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
478 ;; or if the desired indentation has already been computed.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
479 (let ((normal-indent (current-column)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
480 (cond ((elt state 3)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
481 ;; Inside a string, don't change indentation.
17308
e52fa60d97e8 (indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents: 17144
diff changeset
482 nil)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
483 ((and (integerp lisp-indent-offset) containing-sexp)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
484 ;; Indent by constant offset
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
485 (goto-char containing-sexp)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
486 (+ (current-column) lisp-indent-offset))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
487 (desired-indent)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
488 ((and (boundp 'lisp-indent-function)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
489 lisp-indent-function
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
490 (not retry))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
491 (or (funcall lisp-indent-function indent-point state)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
492 normal-indent))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
493 (t
214
a1430f8459e5 *** empty log message ***
Brian Preble <rassilon@gnu.org>
parents: 213
diff changeset
494 normal-indent))))))
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
495
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
496 (defun lisp-indent-function (indent-point state)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
497 (let ((normal-indent (current-column)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
498 (goto-char (1+ (elt state 1)))
9423
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
499 (parse-partial-sexp (point) calculate-lisp-indent-last-sexp 0 t)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
500 (if (and (elt state 2)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
501 (not (looking-at "\\sw\\|\\s_")))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
502 ;; car of form doesn't seem to be a a symbol
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
503 (progn
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
504 (if (not (> (save-excursion (forward-line 1) (point))
9423
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
505 calculate-lisp-indent-last-sexp))
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
506 (progn (goto-char calculate-lisp-indent-last-sexp)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
507 (beginning-of-line)
9423
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
508 (parse-partial-sexp (point)
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
509 calculate-lisp-indent-last-sexp 0 t)))
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
510 ;; Indent under the list or under the first sexp on the same
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
511 ;; line as calculate-lisp-indent-last-sexp. Note that first
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
512 ;; thing on that line has to be complete sexp since we are
9076245a9fed (calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents: 9415
diff changeset
513 ;; inside the innermost containing sexp.
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
514 (backward-prefix-chars)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
515 (current-column))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
516 (let ((function (buffer-substring (point)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
517 (progn (forward-sexp 1) (point))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
518 method)
3638
45169f86d3a4 (lisp-indent-function): Look for either
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
519 (setq method (or (get (intern-soft function) 'lisp-indent-function)
45169f86d3a4 (lisp-indent-function): Look for either
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
520 (get (intern-soft function) 'lisp-indent-hook)))
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
521 (cond ((or (eq method 'defun)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
522 (and (null method)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
523 (> (length function) 3)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
524 (string-match "\\`def" function)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
525 (lisp-indent-defform state indent-point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
526 ((integerp method)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
527 (lisp-indent-specform method state
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
528 indent-point normal-indent))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
529 (method
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
530 (funcall method state indent-point)))))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
531
16687
049c87a96dca Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents: 16563
diff changeset
532 (defvar lisp-body-indent 2
2933
420dfaaacfc5 (lisp-body-indent): Add doc.
Richard M. Stallman <rms@gnu.org>
parents: 2450
diff changeset
533 "Number of columns to indent the second line of a `(def...)' form.")
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
534
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
535 (defun lisp-indent-specform (count state indent-point normal-indent)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
536 (let ((containing-form-start (elt state 1))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
537 (i count)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
538 body-indent containing-form-column)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
539 ;; Move to the start of containing form, calculate indentation
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
540 ;; to use for non-distinguished forms (> count), and move past the
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
541 ;; function symbol. lisp-indent-function guarantees that there is at
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
542 ;; least one word or symbol character following open paren of containing
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
543 ;; form.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
544 (goto-char containing-form-start)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
545 (setq containing-form-column (current-column))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
546 (setq body-indent (+ lisp-body-indent containing-form-column))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
547 (forward-char 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
548 (forward-sexp 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
549 ;; Now find the start of the last form.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
550 (parse-partial-sexp (point) indent-point 1 t)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
551 (while (and (< (point) indent-point)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
552 (condition-case ()
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
553 (progn
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
554 (setq count (1- count))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
555 (forward-sexp 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
556 (parse-partial-sexp (point) indent-point 1 t))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
557 (error nil))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
558 ;; Point is sitting on first character of last (or count) sexp.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
559 (if (> count 0)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
560 ;; A distinguished form. If it is the first or second form use double
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
561 ;; lisp-body-indent, else normal indent. With lisp-body-indent bound
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
562 ;; to 2 (the default), this just happens to work the same with if as
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
563 ;; the older code, but it makes unwind-protect, condition-case,
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
564 ;; with-output-to-temp-buffer, et. al. much more tasteful. The older,
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
565 ;; less hacked, behavior can be obtained by replacing below with
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
566 ;; (list normal-indent containing-form-start).
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
567 (if (<= (- i count) 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
568 (list (+ containing-form-column (* 2 lisp-body-indent))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
569 containing-form-start)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
570 (list normal-indent containing-form-start))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
571 ;; A non-distinguished form. Use body-indent if there are no
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
572 ;; distinguished forms and this is the first undistinguished form,
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
573 ;; or if this is the first undistinguished form and the preceding
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
574 ;; distinguished form has indentation at least as great as body-indent.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
575 (if (or (and (= i 0) (= count 0))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
576 (and (= count 0) (<= body-indent normal-indent)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
577 body-indent
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
578 normal-indent))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
579
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
580 (defun lisp-indent-defform (state indent-point)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
581 (goto-char (car (cdr state)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
582 (forward-line 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
583 (if (> (point) (car (cdr (cdr state))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
584 (progn
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
585 (goto-char (car (cdr state)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
586 (+ lisp-body-indent (current-column)))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
587
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
588
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
589 ;; (put 'progn 'lisp-indent-function 0), say, causes progn to be indented
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
590 ;; like defun if the first form is placed on the next line, otherwise
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
591 ;; it is indented like any other form (i.e. forms line up under first).
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
592
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
593 (put 'lambda 'lisp-indent-function 'defun)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
594 (put 'autoload 'lisp-indent-function 'defun)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
595 (put 'progn 'lisp-indent-function 0)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
596 (put 'prog1 'lisp-indent-function 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
597 (put 'prog2 'lisp-indent-function 2)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
598 (put 'save-excursion 'lisp-indent-function 0)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
599 (put 'save-window-excursion 'lisp-indent-function 0)
12218
a4f383dd5adb Put mark-active for menu-enable property on eval-region, comment-region, and indent-region symbols.
Simon Marshall <simon@gnu.org>
parents: 12035
diff changeset
600 (put 'save-selected-window 'lisp-indent-function 0)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
601 (put 'save-restriction 'lisp-indent-function 0)
1163
c205d560cc22 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 878
diff changeset
602 (put 'save-match-data 'lisp-indent-function 0)
16354
b8f9fd9e47fa (save-current-buffer, with-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents: 15597
diff changeset
603 (put 'save-current-buffer 'lisp-indent-function 0)
16406
da03658014e3 (with-current-buffer): Correct indentation property.
Erik Naggum <erik@naggum.no>
parents: 16381
diff changeset
604 (put 'with-current-buffer 'lisp-indent-function 1)
16563
41bbec0cc4c6 (combine-after-change-calls): The first form is not special.
Erik Naggum <erik@naggum.no>
parents: 16551
diff changeset
605 (put 'combine-after-change-calls 'lisp-indent-function 0)
16354
b8f9fd9e47fa (save-current-buffer, with-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents: 15597
diff changeset
606 (put 'with-output-to-string 'lisp-indent-function 0)
16360
25f58ad01b11 (with-temp-file): Add lisp-indent-function property.
Richard M. Stallman <rms@gnu.org>
parents: 16354
diff changeset
607 (put 'with-temp-file 'lisp-indent-function 1)
16380
aee74c21dfee (with-temp-buffer): Add indentation property.
Erik Naggum <erik@naggum.no>
parents: 16360
diff changeset
608 (put 'with-temp-buffer 'lisp-indent-function 0)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
609 (put 'let 'lisp-indent-function 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
610 (put 'let* 'lisp-indent-function 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
611 (put 'while 'lisp-indent-function 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
612 (put 'if 'lisp-indent-function 2)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
613 (put 'catch 'lisp-indent-function 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
614 (put 'condition-case 'lisp-indent-function 2)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
615 (put 'unwind-protect 'lisp-indent-function 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
616 (put 'with-output-to-temp-buffer 'lisp-indent-function 1)
16381
badca394f979 (eval-after-load): Add lisp-indent-function for it.
Richard M. Stallman <rms@gnu.org>
parents: 16380
diff changeset
617 (put 'eval-after-load 'lisp-indent-function 1)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
618
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
619 (defun indent-sexp (&optional endpos)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
620 "Indent each line of the list starting just after point.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
621 If optional arg ENDPOS is given, indent each line, stopping when
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
622 ENDPOS is encountered."
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
623 (interactive)
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 677
diff changeset
624 (let ((indent-stack (list nil))
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 677
diff changeset
625 (next-depth 0)
10594
aadef46f00f7 (lisp-indent-region): Set endmark before indenting first line.
Richard M. Stallman <rms@gnu.org>
parents: 9424
diff changeset
626 ;; If ENDPOS is non-nil, use nil as STARTING-POINT
aadef46f00f7 (lisp-indent-region): Set endmark before indenting first line.
Richard M. Stallman <rms@gnu.org>
parents: 9424
diff changeset
627 ;; so that calculate-lisp-indent will find the beginning of
aadef46f00f7 (lisp-indent-region): Set endmark before indenting first line.
Richard M. Stallman <rms@gnu.org>
parents: 9424
diff changeset
628 ;; the defun we are in.
aadef46f00f7 (lisp-indent-region): Set endmark before indenting first line.
Richard M. Stallman <rms@gnu.org>
parents: 9424
diff changeset
629 ;; If ENDPOS is nil, it is safe not to scan before point
aadef46f00f7 (lisp-indent-region): Set endmark before indenting first line.
Richard M. Stallman <rms@gnu.org>
parents: 9424
diff changeset
630 ;; since every line we indent is more deeply nested than point is.
aadef46f00f7 (lisp-indent-region): Set endmark before indenting first line.
Richard M. Stallman <rms@gnu.org>
parents: 9424
diff changeset
631 (starting-point (if endpos nil (point)))
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 677
diff changeset
632 (last-point (point))
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 677
diff changeset
633 last-depth bol outer-loop-done inner-loop-done state this-indent)
10594
aadef46f00f7 (lisp-indent-region): Set endmark before indenting first line.
Richard M. Stallman <rms@gnu.org>
parents: 9424
diff changeset
634 (or endpos
aadef46f00f7 (lisp-indent-region): Set endmark before indenting first line.
Richard M. Stallman <rms@gnu.org>
parents: 9424
diff changeset
635 ;; Get error now if we don't have a complete sexp after point.
aadef46f00f7 (lisp-indent-region): Set endmark before indenting first line.
Richard M. Stallman <rms@gnu.org>
parents: 9424
diff changeset
636 (save-excursion (forward-sexp 1)))
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
637 (save-excursion
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
638 (setq outer-loop-done nil)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
639 (while (if endpos (< (point) endpos)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
640 (not outer-loop-done))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
641 (setq last-depth next-depth
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
642 inner-loop-done nil)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
643 ;; Parse this line so we can learn the state
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
644 ;; to indent the next line.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
645 ;; This inner loop goes through only once
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
646 ;; unless a line ends inside a string.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
647 (while (and (not inner-loop-done)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
648 (not (setq outer-loop-done (eobp))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
649 (setq state (parse-partial-sexp (point) (progn (end-of-line) (point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
650 nil nil state))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
651 (setq next-depth (car state))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
652 ;; If the line contains a comment other than the sort
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
653 ;; that is indented like code,
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
654 ;; indent it now with indent-for-comment.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
655 ;; Comments indented like code are right already.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
656 ;; In any case clear the in-comment flag in the state
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
657 ;; because parse-partial-sexp never sees the newlines.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
658 (if (car (nthcdr 4 state))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
659 (progn (indent-for-comment)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
660 (end-of-line)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
661 (setcar (nthcdr 4 state) nil)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
662 ;; If this line ends inside a string,
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
663 ;; go straight to next line, remaining within the inner loop,
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
664 ;; and turn off the \-flag.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
665 (if (car (nthcdr 3 state))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
666 (progn
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
667 (forward-line 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
668 (setcar (nthcdr 5 state) nil))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
669 (setq inner-loop-done t)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
670 (and endpos
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 677
diff changeset
671 (<= next-depth 0)
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 677
diff changeset
672 (progn
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 677
diff changeset
673 (setq indent-stack (append indent-stack
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 677
diff changeset
674 (make-list (- next-depth) nil))
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 677
diff changeset
675 last-depth (- last-depth next-depth)
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 677
diff changeset
676 next-depth 0)))
10594
aadef46f00f7 (lisp-indent-region): Set endmark before indenting first line.
Richard M. Stallman <rms@gnu.org>
parents: 9424
diff changeset
677 (or outer-loop-done endpos
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
678 (setq outer-loop-done (<= next-depth 0)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
679 (if outer-loop-done
3241
6c9b5f6dca70 (indent-sexp): Even if outer-loop-done is t, still move down one line.
Richard M. Stallman <rms@gnu.org>
parents: 2933
diff changeset
680 (forward-line 1)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
681 (while (> last-depth next-depth)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
682 (setq indent-stack (cdr indent-stack)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
683 last-depth (1- last-depth)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
684 (while (< last-depth next-depth)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
685 (setq indent-stack (cons nil indent-stack)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
686 last-depth (1+ last-depth)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
687 ;; Now go to the next line and indent it according
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
688 ;; to what we learned from parsing the previous one.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
689 (forward-line 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
690 (setq bol (point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
691 (skip-chars-forward " \t")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
692 ;; But not if the line is blank, or just a comment
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
693 ;; (except for double-semi comments; indent them as usual).
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
694 (if (or (eobp) (looking-at "\\s<\\|\n"))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
695 nil
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
696 (if (and (car indent-stack)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
697 (>= (car indent-stack) 0))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
698 (setq this-indent (car indent-stack))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
699 (let ((val (calculate-lisp-indent
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
700 (if (car indent-stack) (- (car indent-stack))
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 677
diff changeset
701 starting-point))))
17308
e52fa60d97e8 (indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents: 17144
diff changeset
702 (if (null val)
e52fa60d97e8 (indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents: 17144
diff changeset
703 (setq this-indent val)
e52fa60d97e8 (indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents: 17144
diff changeset
704 (if (integerp val)
e52fa60d97e8 (indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents: 17144
diff changeset
705 (setcar indent-stack
e52fa60d97e8 (indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents: 17144
diff changeset
706 (setq this-indent val))
e52fa60d97e8 (indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents: 17144
diff changeset
707 (setcar indent-stack (- (car (cdr val))))
e52fa60d97e8 (indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents: 17144
diff changeset
708 (setq this-indent (car val))))))
e52fa60d97e8 (indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents: 17144
diff changeset
709 (if (and this-indent (/= (current-column) this-indent))
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
710 (progn (delete-region bol (point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
711 (indent-to this-indent)))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
712 (or outer-loop-done
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
713 (setq outer-loop-done (= (point) last-point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
714 (setq last-point (point)))))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
715
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
716 ;; Indent every line whose first char is between START and END inclusive.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
717 (defun lisp-indent-region (start end)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
718 (save-excursion
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
719 (let ((endmark (copy-marker end)))
10594
aadef46f00f7 (lisp-indent-region): Set endmark before indenting first line.
Richard M. Stallman <rms@gnu.org>
parents: 9424
diff changeset
720 (goto-char start)
aadef46f00f7 (lisp-indent-region): Set endmark before indenting first line.
Richard M. Stallman <rms@gnu.org>
parents: 9424
diff changeset
721 (and (bolp) (not (eolp))
aadef46f00f7 (lisp-indent-region): Set endmark before indenting first line.
Richard M. Stallman <rms@gnu.org>
parents: 9424
diff changeset
722 (lisp-indent-line))
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
723 (indent-sexp endmark)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
724 (set-marker endmark nil))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
725
1865
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
726 ;;;; Lisp paragraph filling commands.
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
727
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
728 (defun lisp-fill-paragraph (&optional justify)
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
729 "Like \\[fill-paragraph], but handle Emacs Lisp comments.
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
730 If any of the current line is a comment, fill the comment or the
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
731 paragraph of it that point is in, preserving the comment's indentation
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
732 and initial semicolons."
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
733 (interactive "P")
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
734 (let (
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
735 ;; Non-nil if the current line contains a comment.
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
736 has-comment
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
737
14817
cdd8a024f000 (lisp-fill-paragraph): Treat code-and-comment case specially.
Richard M. Stallman <rms@gnu.org>
parents: 14734
diff changeset
738 ;; Non-nil if the current line contains code and a comment.
cdd8a024f000 (lisp-fill-paragraph): Treat code-and-comment case specially.
Richard M. Stallman <rms@gnu.org>
parents: 14734
diff changeset
739 has-code-and-comment
cdd8a024f000 (lisp-fill-paragraph): Treat code-and-comment case specially.
Richard M. Stallman <rms@gnu.org>
parents: 14734
diff changeset
740
1865
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
741 ;; If has-comment, the appropriate fill-prefix for the comment.
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
742 comment-fill-prefix
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
743 )
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
744
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
745 ;; Figure out what kind of comment we are looking at.
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
746 (save-excursion
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
747 (beginning-of-line)
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
748 (cond
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
749
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
750 ;; A line with nothing but a comment on it?
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
751 ((looking-at "[ \t]*;[; \t]*")
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
752 (setq has-comment t
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
753 comment-fill-prefix (buffer-substring (match-beginning 0)
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
754 (match-end 0))))
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
755
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
756 ;; A line with some code, followed by a comment? Remember that the
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
757 ;; semi which starts the comment shouldn't be part of a string or
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
758 ;; character.
13802
8107433d6a22 (lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents: 13504
diff changeset
759 ((condition-case nil
8107433d6a22 (lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents: 13504
diff changeset
760 (save-restriction
8107433d6a22 (lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents: 13504
diff changeset
761 (narrow-to-region (point-min)
8107433d6a22 (lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents: 13504
diff changeset
762 (save-excursion (end-of-line) (point)))
8107433d6a22 (lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents: 13504
diff changeset
763 (while (not (looking-at ";\\|$"))
8107433d6a22 (lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents: 13504
diff changeset
764 (skip-chars-forward "^;\n\"\\\\?")
8107433d6a22 (lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents: 13504
diff changeset
765 (cond
8107433d6a22 (lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents: 13504
diff changeset
766 ((eq (char-after (point)) ?\\) (forward-char 2))
8107433d6a22 (lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents: 13504
diff changeset
767 ((memq (char-after (point)) '(?\" ??)) (forward-sexp 1))))
8107433d6a22 (lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents: 13504
diff changeset
768 (looking-at ";+[\t ]*"))
8107433d6a22 (lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents: 13504
diff changeset
769 (error nil))
14817
cdd8a024f000 (lisp-fill-paragraph): Treat code-and-comment case specially.
Richard M. Stallman <rms@gnu.org>
parents: 14734
diff changeset
770 (setq has-comment t has-code-and-comment t)
1865
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
771 (setq comment-fill-prefix
13802
8107433d6a22 (lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents: 13504
diff changeset
772 (concat (make-string (/ (current-column) 8) ?\t)
8107433d6a22 (lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents: 13504
diff changeset
773 (make-string (% (current-column) 8) ?\ )
1865
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
774 (buffer-substring (match-beginning 0) (match-end 0)))))))
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
775
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
776 (if (not has-comment)
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
777 (fill-paragraph justify)
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
778
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
779 ;; Narrow to include only the comment, and then fill the region.
14628
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
780 (save-excursion
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
781 (save-restriction
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
782 (beginning-of-line)
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
783 (narrow-to-region
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
784 ;; Find the first line we should include in the region to fill.
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
785 (save-excursion
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
786 (while (and (zerop (forward-line -1))
1865
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
787 (looking-at "^[ \t]*;")))
14628
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
788 ;; We may have gone too far. Go forward again.
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
789 (or (looking-at ".*;")
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
790 (forward-line 1))
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
791 (point))
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
792 ;; Find the beginning of the first line past the region to fill.
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
793 (save-excursion
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
794 (while (progn (forward-line 1)
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
795 (looking-at "^[ \t]*;")))
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
796 (point)))
1865
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
797
14628
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
798 ;; Lines with only semicolons on them can be paragraph boundaries.
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
799 (let* ((paragraph-start (concat paragraph-start "\\|[ \t;]*$"))
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
800 (paragraph-separate (concat paragraph-start "\\|[ \t;]*$"))
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
801 (paragraph-ignore-fill-prefix nil)
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
802 (fill-prefix comment-fill-prefix)
14817
cdd8a024f000 (lisp-fill-paragraph): Treat code-and-comment case specially.
Richard M. Stallman <rms@gnu.org>
parents: 14734
diff changeset
803 (after-line (if has-code-and-comment
cdd8a024f000 (lisp-fill-paragraph): Treat code-and-comment case specially.
Richard M. Stallman <rms@gnu.org>
parents: 14734
diff changeset
804 (save-excursion
cdd8a024f000 (lisp-fill-paragraph): Treat code-and-comment case specially.
Richard M. Stallman <rms@gnu.org>
parents: 14734
diff changeset
805 (forward-line 1) (point))))
14628
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
806 (end (progn
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
807 (forward-paragraph)
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
808 (or (bolp) (newline 1))
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
809 (point)))
14817
cdd8a024f000 (lisp-fill-paragraph): Treat code-and-comment case specially.
Richard M. Stallman <rms@gnu.org>
parents: 14734
diff changeset
810 ;; If this comment starts on a line with code,
cdd8a024f000 (lisp-fill-paragraph): Treat code-and-comment case specially.
Richard M. Stallman <rms@gnu.org>
parents: 14734
diff changeset
811 ;; include that like in the filling.
cdd8a024f000 (lisp-fill-paragraph): Treat code-and-comment case specially.
Richard M. Stallman <rms@gnu.org>
parents: 14734
diff changeset
812 (beg (progn (backward-paragraph)
cdd8a024f000 (lisp-fill-paragraph): Treat code-and-comment case specially.
Richard M. Stallman <rms@gnu.org>
parents: 14734
diff changeset
813 (if (eq (point) after-line)
cdd8a024f000 (lisp-fill-paragraph): Treat code-and-comment case specially.
Richard M. Stallman <rms@gnu.org>
parents: 14734
diff changeset
814 (forward-line -1))
cdd8a024f000 (lisp-fill-paragraph): Treat code-and-comment case specially.
Richard M. Stallman <rms@gnu.org>
parents: 14734
diff changeset
815 (point))))
14628
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
816 (fill-region-as-paragraph beg end
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
817 justify nil
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
818 (save-excursion
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
819 (goto-char beg)
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
820 (if (looking-at fill-prefix)
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
821 nil
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
822 (re-search-forward comment-start-skip)
c932ad13ccd9 (lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents: 14495
diff changeset
823 (point))))))))
10629
2c9bdcab7052 (lisp-fill-paragraph): Return t.
Richard M. Stallman <rms@gnu.org>
parents: 10628
diff changeset
824 t))
1865
05be3e0c082f * lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents: 1163
diff changeset
825
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
826 (defun indent-code-rigidly (start end arg &optional nochange-regexp)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
827 "Indent all lines of code, starting in the region, sideways by ARG columns.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
828 Does not affect lines starting inside comments or strings, assuming that
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
829 the start of the region is not inside them.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
830
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
831 Called from a program, takes args START, END, COLUMNS and NOCHANGE-REGEXP.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
832 The last is a regexp which, if matched at the beginning of a line,
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
833 means don't indent that line."
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
834 (interactive "r\np")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
835 (let (state)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
836 (save-excursion
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
837 (goto-char end)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
838 (setq end (point-marker))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
839 (goto-char start)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
840 (or (bolp)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
841 (setq state (parse-partial-sexp (point)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
842 (progn
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
843 (forward-line 1) (point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
844 nil nil state)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
845 (while (< (point) end)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
846 (or (car (nthcdr 3 state))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
847 (and nochange-regexp
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
848 (looking-at nochange-regexp))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
849 ;; If line does not start in string, indent it
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
850 (let ((indent (current-indentation)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
851 (delete-region (point) (progn (skip-chars-forward " \t") (point)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
852 (or (eolp)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
853 (indent-to (max 0 (+ indent arg)) 0))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
854 (setq state (parse-partial-sexp (point)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
855 (progn
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
856 (forward-line 1) (point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
857 nil nil state))))))
584
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 422
diff changeset
858
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 422
diff changeset
859 (provide 'lisp-mode)
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 422
diff changeset
860
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
861 ;;; lisp-mode.el ends here