Mercurial > emacs
annotate lisp/emacs-lisp/lisp-mode.el @ 30408:e3e2c9051c5f
Got rid of all byte-compiler warnings on Emacs.
Add to the menu when the file is loaded, not in ada-mode-hook.
Add -toolbar to the default ddd command Switches moved from
ada-prj-default-comp-cmd and ada-prj-default-make-cmd to
ada-prj-default-comp-opt
(ada-add-ada-menu): Remove the map and name parameters Add the Ada
Reference Manual to the menu
(ada-check-current): rewritten as a call to ada-compile-current
(ada-compile): Removed.
(ada-compile-application, ada-compile-current, ada-check-current):
Set the compilation-search-path so that compile.el automatically
finds the sources in src_dir. Automatic scrollong of the
compilation buffer. C-uC-cC-c asks for confirmation before
compiling
(ada-compile-current): New parameter, prj-field
(ada-complete-identifier): Load the .ali file before doing
processing
(ada-find-ali-file-in-dir): prepend build_dir to obj_dir to
conform to gnatmake's behavior.
(ada-find-file-in-dir): New function
(ada-find-references): Set the environment variables for gnatfind
(ada-find-src-file-in-dir): New function.
(ada-first-non-nil): Removed
(ada-gdb-application): Add support for jdb, the java debugger.
(ada-get-ada-file-name): Load the original-file first if not done
yet.
(ada-get-all-references): Handles the new ali syntax (parent types
are found between <>).
(ada-initialize-runtime-library): New function
(ada-mode-hook): Always load a project file when a file is opened,
so that the casing exceptions are correctly read.
(ada-operator-re): Add all missing operators ("abs", "rem", "**").
(ada-parse-prj-file): Use find-file-noselect instead of find-file
to open the project file, since the latter does not work with
speedbar Get default values before loading the prj file, or the
default executable file name is wrong. Use the absolute value of
src_dir to initialize ada-search-directories and
compilation-search-path,... Add the standard runtime library to
the search path for find-file.
(ada-prj-default-debugger): Was missing an opening '{'
(ada-prj-default-bind-opt, ada-prj-default-link-opt): New
variables.
(ada-prj-default-gnatmake-opt): New variable
(ada-prj-find-prj-file): Handles non-file buffers For non-Ada
buffers, the project file is the default one Save the windows
configuration before displaying the menu.
(ada-prj-src-dir, ada-prj-obj-dir, ada-prj-comp-opt,...): Removed
(ada-read-identifier): Fix xrefs on operators (for "mod", "and",
...) regexp-quote identifiers names to support operators +,
-,... in regexps.
(ada-remote): New function.
(ada-run-application): Erase the output buffer before starting the
run Support remote execution of the application. Use
call-process, or the arguments are incorrectly parsed
(ada-set-default-project-file): Reread the content of the active
project file, not the one from the current buffer When a project
file is set as the default project, all directories are
automatically associated with it.
(ada-set-environment): New function
(ada-treat-cmd-string): New special variable ${current}
(ada-treat-cmd-string): Revised. The substitution is now done for
any ${...} substring
(ada-xref-current): If no body was found, compiles the spec
instead. Setup ADA_{SOURCE,OBJECTS}_PATH before running the
compiler to get rid of command line length limitations.
(ada-xref-get-project-field): New function
(ada-xref-project-files): New variable
(ada-xref-runtime-library-specs-path)
(ada-xref-runtime-library-ali-path): New variables
(ada-xref-set-default-prj-values): Default run command now does a
cd to the build directory. New field: main_unit Provide a default
file name even if the current buffer has no prj file.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Mon, 24 Jul 2000 11:13:11 +0000 |
parents | 16e560dd4ab8 |
children | d470d496fd53 |
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 |
27809 | 3 ;; Copyright (C) 1985, 1986, 1999, 2000 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 | 8 ;; This file is part of GNU Emacs. |
9 | |
10 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
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 | 13 ;; any later version. |
14 | |
15 ;; GNU Emacs is distributed in the hope that it will be useful, | |
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 ;; GNU General Public License for more details. | |
19 | |
20 ;; You should have received a copy of the GNU General Public License | |
14169 | 21 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
23 ;; Boston, MA 02111-1307, USA. | |
213 | 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). |
27809 | 28 ;; This mode is documented in the Emacs manual. |
2307
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 |
27809 | 32 (defvar lisp-mode-abbrev-table nil) |
213 | 33 |
27809 | 34 (defvar emacs-lisp-mode-syntax-table |
35 (let ((table (make-syntax-table))) | |
213 | 36 (let ((i 0)) |
37 (while (< i ?0) | |
27809 | 38 (modify-syntax-entry i "_ " table) |
213 | 39 (setq i (1+ i))) |
40 (setq i (1+ ?9)) | |
41 (while (< i ?A) | |
27809 | 42 (modify-syntax-entry i "_ " table) |
213 | 43 (setq i (1+ i))) |
44 (setq i (1+ ?Z)) | |
45 (while (< i ?a) | |
27809 | 46 (modify-syntax-entry i "_ " table) |
213 | 47 (setq i (1+ i))) |
48 (setq i (1+ ?z)) | |
49 (while (< i 128) | |
27809 | 50 (modify-syntax-entry i "_ " table) |
213 | 51 (setq i (1+ i))) |
27809 | 52 (modify-syntax-entry ? " " table) |
53 (modify-syntax-entry ?\t " " table) | |
54 (modify-syntax-entry ?\f " " table) | |
55 (modify-syntax-entry ?\n "> " 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
|
56 ;; Give CR the same syntax as newline, for selective-display. |
27809 | 57 (modify-syntax-entry ?\^m "> " table) |
58 (modify-syntax-entry ?\; "< " table) | |
59 (modify-syntax-entry ?` "' " table) | |
60 (modify-syntax-entry ?' "' " table) | |
61 (modify-syntax-entry ?, "' " table) | |
213 | 62 ;; Used to be singlequote; changed for flonums. |
27809 | 63 (modify-syntax-entry ?. "_ " table) |
64 (modify-syntax-entry ?# "' " table) | |
65 (modify-syntax-entry ?\" "\" " table) | |
66 (modify-syntax-entry ?\\ "\\ " table) | |
67 (modify-syntax-entry ?\( "() " table) | |
68 (modify-syntax-entry ?\) ")( " table) | |
69 (modify-syntax-entry ?\[ "(] " table) | |
27814
f2abbe1d6b47
Don't change syntax of multibyte
Kenichi Handa <handa@m17n.org>
parents:
27809
diff
changeset
|
70 (modify-syntax-entry ?\] ")[ " table)) |
27809 | 71 table)) |
213 | 72 |
27809 | 73 (defvar lisp-mode-syntax-table |
74 (let ((table (copy-syntax-table emacs-lisp-mode-syntax-table))) | |
75 (modify-syntax-entry ?\[ "_ " table) | |
76 (modify-syntax-entry ?\] "_ " table) | |
77 (modify-syntax-entry ?# "' 14bn" table) | |
27934
8c28c1c31e9b
(lisp-mode-syntax-table): Fix syntax of |.
Dave Love <fx@gnu.org>
parents:
27814
diff
changeset
|
78 (modify-syntax-entry ?| "\" 23b" table) |
27809 | 79 table)) |
285 | 80 |
213 | 81 (define-abbrev-table 'lisp-mode-abbrev-table ()) |
82 | |
12701
c50826e44362
(lisp-imenu-generic-expression): Var defined.
Karl Heuer <kwzh@gnu.org>
parents:
12682
diff
changeset
|
83 (defvar lisp-imenu-generic-expression |
27809 | 84 (list |
85 (list nil | |
86 (purecopy "^\\s-*(def\\(un\\|subst\\|macro\\|advice\\|\ | |
87 ine-skeleton\\|ine-minor-mode\\)\\s-+\\(\\sw\\(\\sw\\|\\s_\\)+\\)") 2) | |
88 (list (purecopy "Variables") | |
89 (purecopy "^\\s-*(def\\(var\\|const\\|custom\\)\\s-+\ | |
90 \\(\\sw\\(\\sw\\|\\s_\\)+\\)") 2) | |
91 (list (purecopy "Types") | |
92 (purecopy "^\\s-*(def\\(group\\|type\\|struct\\|class\\|\ | |
93 ine-condition\\|ine-widget\\|face\\)\\s-+'?\\(\\sw\\(\\sw\\|\\s_\\)+\\)") | |
12701
c50826e44362
(lisp-imenu-generic-expression): Var defined.
Karl Heuer <kwzh@gnu.org>
parents:
12682
diff
changeset
|
94 2)) |
c50826e44362
(lisp-imenu-generic-expression): Var defined.
Karl Heuer <kwzh@gnu.org>
parents:
12682
diff
changeset
|
95 |
c50826e44362
(lisp-imenu-generic-expression): Var defined.
Karl Heuer <kwzh@gnu.org>
parents:
12682
diff
changeset
|
96 "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
|
97 |
213 | 98 (defun lisp-mode-variables (lisp-syntax) |
99 (cond (lisp-syntax | |
100 (set-syntax-table lisp-mode-syntax-table))) | |
101 (setq local-abbrev-table lisp-mode-abbrev-table) | |
102 (make-local-variable 'paragraph-start) | |
13504
1319330ca7ff
(lisp-mode-variables, lisp-fill-paragraph): Remove
Richard M. Stallman <rms@gnu.org>
parents:
12701
diff
changeset
|
103 (setq paragraph-start (concat page-delimiter "\\|$" )) |
213 | 104 (make-local-variable 'paragraph-separate) |
105 (setq paragraph-separate paragraph-start) | |
106 (make-local-variable 'paragraph-ignore-fill-prefix) | |
107 (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
|
108 (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
|
109 (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
|
110 ;; 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
|
111 ;; 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
|
112 ;; 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
|
113 (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
|
114 (setq adaptive-fill-mode nil) |
20333
3627bd4b83d9
(lisp-mode-auto-fill): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20013
diff
changeset
|
115 (make-local-variable 'normal-auto-fill-function) |
3627bd4b83d9
(lisp-mode-auto-fill): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20013
diff
changeset
|
116 (setq normal-auto-fill-function 'lisp-mode-auto-fill) |
213 | 117 (make-local-variable 'indent-line-function) |
118 (setq indent-line-function 'lisp-indent-line) | |
119 (make-local-variable 'indent-region-function) | |
120 (setq indent-region-function 'lisp-indent-region) | |
121 (make-local-variable 'parse-sexp-ignore-comments) | |
122 (setq parse-sexp-ignore-comments t) | |
6076
4f76564fc2cd
(lisp-mode-variables): Set outline-regexp.
Richard M. Stallman <rms@gnu.org>
parents:
5103
diff
changeset
|
123 (make-local-variable 'outline-regexp) |
26682
57098e9f96e8
(lisp-mode-variables): Change
Gerd Moellmann <gerd@gnu.org>
parents:
25723
diff
changeset
|
124 (setq outline-regexp ";;;;* \\|(") |
57098e9f96e8
(lisp-mode-variables): Change
Gerd Moellmann <gerd@gnu.org>
parents:
25723
diff
changeset
|
125 (make-local-variable 'outline-level) |
57098e9f96e8
(lisp-mode-variables): Change
Gerd Moellmann <gerd@gnu.org>
parents:
25723
diff
changeset
|
126 (setq outline-level 'lisp-outline-level) |
213 | 127 (make-local-variable 'comment-start) |
128 (setq comment-start ";") | |
129 (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
|
130 ;; 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
|
131 ;; 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
|
132 (setq comment-start-skip "\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\);+ *") |
28994
0388cb689633
(lisp-mode-variables): Set comment-add.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28324
diff
changeset
|
133 (make-local-variable 'comment-add) |
0388cb689633
(lisp-mode-variables): Set comment-add.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28324
diff
changeset
|
134 (setq comment-add 1) ;default to `;;' in comment-region |
213 | 135 (make-local-variable 'comment-column) |
136 (setq comment-column 40) | |
2307
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2232
diff
changeset
|
137 (make-local-variable 'comment-indent-function) |
12701
c50826e44362
(lisp-imenu-generic-expression): Var defined.
Karl Heuer <kwzh@gnu.org>
parents:
12682
diff
changeset
|
138 (setq comment-indent-function 'lisp-comment-indent) |
c50826e44362
(lisp-imenu-generic-expression): Var defined.
Karl Heuer <kwzh@gnu.org>
parents:
12682
diff
changeset
|
139 (make-local-variable 'imenu-generic-expression) |
27814
f2abbe1d6b47
Don't change syntax of multibyte
Kenichi Handa <handa@m17n.org>
parents:
27809
diff
changeset
|
140 (setq imenu-generic-expression lisp-imenu-generic-expression) |
f2abbe1d6b47
Don't change syntax of multibyte
Kenichi Handa <handa@m17n.org>
parents:
27809
diff
changeset
|
141 (make-local-variable 'multibyte-syntax-as-symbol) |
f2abbe1d6b47
Don't change syntax of multibyte
Kenichi Handa <handa@m17n.org>
parents:
27809
diff
changeset
|
142 (setq multibyte-syntax-as-symbol t)) |
26682
57098e9f96e8
(lisp-mode-variables): Change
Gerd Moellmann <gerd@gnu.org>
parents:
25723
diff
changeset
|
143 |
57098e9f96e8
(lisp-mode-variables): Change
Gerd Moellmann <gerd@gnu.org>
parents:
25723
diff
changeset
|
144 (defun lisp-outline-level () |
57098e9f96e8
(lisp-mode-variables): Change
Gerd Moellmann <gerd@gnu.org>
parents:
25723
diff
changeset
|
145 "Lisp mode `outline-level' function." |
57098e9f96e8
(lisp-mode-variables): Change
Gerd Moellmann <gerd@gnu.org>
parents:
25723
diff
changeset
|
146 (if (looking-at "(") |
57098e9f96e8
(lisp-mode-variables): Change
Gerd Moellmann <gerd@gnu.org>
parents:
25723
diff
changeset
|
147 1000 |
57098e9f96e8
(lisp-mode-variables): Change
Gerd Moellmann <gerd@gnu.org>
parents:
25723
diff
changeset
|
148 (looking-at outline-regexp) |
57098e9f96e8
(lisp-mode-variables): Change
Gerd Moellmann <gerd@gnu.org>
parents:
25723
diff
changeset
|
149 (- (match-end 0) (match-beginning 0)))) |
57098e9f96e8
(lisp-mode-variables): Change
Gerd Moellmann <gerd@gnu.org>
parents:
25723
diff
changeset
|
150 |
213 | 151 |
152 (defvar shared-lisp-mode-map () | |
153 "Keymap for commands shared by all sorts of Lisp modes.") | |
154 | |
155 (if shared-lisp-mode-map | |
156 () | |
157 (setq shared-lisp-mode-map (make-sparse-keymap)) | |
158 (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
|
159 (define-key shared-lisp-mode-map "\177" 'backward-delete-char-untabify)) |
213 | 160 |
161 (defvar emacs-lisp-mode-map () | |
162 "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
|
163 All commands in `shared-lisp-mode-map' are inherited by this map.") |
213 | 164 |
165 (if emacs-lisp-mode-map | |
166 () | |
12035
c3747e64cff0
(emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents:
10968
diff
changeset
|
167 (let ((map (make-sparse-keymap "Emacs-Lisp"))) |
21116
ccf251830c66
(lisp-interaction-mode-map)
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
168 (setq emacs-lisp-mode-map (make-sparse-keymap)) |
ccf251830c66
(lisp-interaction-mode-map)
Richard M. Stallman <rms@gnu.org>
parents:
20459
diff
changeset
|
169 (set-keymap-parent emacs-lisp-mode-map shared-lisp-mode-map) |
12035
c3747e64cff0
(emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents:
10968
diff
changeset
|
170 (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
|
171 (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
|
172 (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
|
173 (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
|
174 (cons "Emacs-Lisp" map)) |
c3747e64cff0
(emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents:
10968
diff
changeset
|
175 (define-key map [edebug-defun] |
c3747e64cff0
(emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents:
10968
diff
changeset
|
176 '("Instrument Function for Debugging" . edebug-defun)) |
c3747e64cff0
(emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents:
10968
diff
changeset
|
177 (define-key map [byte-recompile] |
c3747e64cff0
(emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents:
10968
diff
changeset
|
178 '("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
|
179 (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
|
180 '("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
|
181 (define-key map [byte-compile] |
12035
c3747e64cff0
(emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents:
10968
diff
changeset
|
182 '("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
|
183 (define-key map [separator-eval] '("--")) |
c3747e64cff0
(emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents:
10968
diff
changeset
|
184 (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
|
185 (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
|
186 (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
|
187 (define-key map [separator-format] '("--")) |
c3747e64cff0
(emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents:
10968
diff
changeset
|
188 (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
|
189 (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
|
190 (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
|
191 (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
|
192 (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
|
193 (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
|
194 |
c3747e64cff0
(emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents:
10968
diff
changeset
|
195 (defun emacs-lisp-byte-compile () |
c3747e64cff0
(emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents:
10968
diff
changeset
|
196 "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
|
197 (interactive) |
c3747e64cff0
(emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents:
10968
diff
changeset
|
198 (if buffer-file-name |
c3747e64cff0
(emacs-lisp-mode-map): Add a menu.
Karl Heuer <kwzh@gnu.org>
parents:
10968
diff
changeset
|
199 (byte-compile-file buffer-file-name) |
14116
5f985037b64f
(emacs-lisp-byte-compile): Fix error message.
Karl Heuer <kwzh@gnu.org>
parents:
13802
diff
changeset
|
200 (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
|
201 |
14719
d477c6f756df
Save if reqd in emacs-lisp-byte-compile-and-load.
Simon Marshall <simon@gnu.org>
parents:
14628
diff
changeset
|
202 (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
|
203 "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
|
204 (interactive) |
5f985037b64f
(emacs-lisp-byte-compile): Fix error message.
Karl Heuer <kwzh@gnu.org>
parents:
13802
diff
changeset
|
205 (or buffer-file-name |
5f985037b64f
(emacs-lisp-byte-compile): Fix error message.
Karl Heuer <kwzh@gnu.org>
parents:
13802
diff
changeset
|
206 (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
|
207 (require 'bytecomp) |
5f985037b64f
(emacs-lisp-byte-compile): Fix error message.
Karl Heuer <kwzh@gnu.org>
parents:
13802
diff
changeset
|
208 ;; 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
|
209 (if (and (buffer-modified-p) |
27809 | 210 (y-or-n-p (format "Save buffer %s first? " (buffer-name)))) |
14719
d477c6f756df
Save if reqd in emacs-lisp-byte-compile-and-load.
Simon Marshall <simon@gnu.org>
parents:
14628
diff
changeset
|
211 (save-buffer)) |
d477c6f756df
Save if reqd in emacs-lisp-byte-compile-and-load.
Simon Marshall <simon@gnu.org>
parents:
14628
diff
changeset
|
212 (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
|
213 (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
|
214 (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
|
215 (byte-compile-file buffer-file-name t)))) |
213 | 216 |
25630
4feb8ce584a5
(lisp-imenu-generic-expression): Recognize define-widget.
Dave Love <fx@gnu.org>
parents:
25434
diff
changeset
|
217 (defcustom emacs-lisp-mode-hook nil |
4feb8ce584a5
(lisp-imenu-generic-expression): Recognize define-widget.
Dave Love <fx@gnu.org>
parents:
25434
diff
changeset
|
218 "Hook run when entering Emacs Lisp mode." |
27809 | 219 :options '(turn-on-eldoc-mode imenu-add-menubar-index checkdoc-minor-mode) |
25630
4feb8ce584a5
(lisp-imenu-generic-expression): Recognize define-widget.
Dave Love <fx@gnu.org>
parents:
25434
diff
changeset
|
220 :type 'hook |
4feb8ce584a5
(lisp-imenu-generic-expression): Recognize define-widget.
Dave Love <fx@gnu.org>
parents:
25434
diff
changeset
|
221 :group 'lisp) |
4feb8ce584a5
(lisp-imenu-generic-expression): Recognize define-widget.
Dave Love <fx@gnu.org>
parents:
25434
diff
changeset
|
222 |
4feb8ce584a5
(lisp-imenu-generic-expression): Recognize define-widget.
Dave Love <fx@gnu.org>
parents:
25434
diff
changeset
|
223 (defcustom lisp-mode-hook nil |
4feb8ce584a5
(lisp-imenu-generic-expression): Recognize define-widget.
Dave Love <fx@gnu.org>
parents:
25434
diff
changeset
|
224 "Hook run when entering Lisp mode." |
4feb8ce584a5
(lisp-imenu-generic-expression): Recognize define-widget.
Dave Love <fx@gnu.org>
parents:
25434
diff
changeset
|
225 :options '(imenu-add-menubar-index) |
4feb8ce584a5
(lisp-imenu-generic-expression): Recognize define-widget.
Dave Love <fx@gnu.org>
parents:
25434
diff
changeset
|
226 :type 'hook |
4feb8ce584a5
(lisp-imenu-generic-expression): Recognize define-widget.
Dave Love <fx@gnu.org>
parents:
25434
diff
changeset
|
227 :group 'lisp) |
4feb8ce584a5
(lisp-imenu-generic-expression): Recognize define-widget.
Dave Love <fx@gnu.org>
parents:
25434
diff
changeset
|
228 |
4feb8ce584a5
(lisp-imenu-generic-expression): Recognize define-widget.
Dave Love <fx@gnu.org>
parents:
25434
diff
changeset
|
229 (defcustom lisp-interaction-mode-hook nil |
4feb8ce584a5
(lisp-imenu-generic-expression): Recognize define-widget.
Dave Love <fx@gnu.org>
parents:
25434
diff
changeset
|
230 "Hook run when entering Lisp Interaction mode." |
4feb8ce584a5
(lisp-imenu-generic-expression): Recognize define-widget.
Dave Love <fx@gnu.org>
parents:
25434
diff
changeset
|
231 :options '(turn-on-eldoc-mode) |
4feb8ce584a5
(lisp-imenu-generic-expression): Recognize define-widget.
Dave Love <fx@gnu.org>
parents:
25434
diff
changeset
|
232 :type 'hook |
4feb8ce584a5
(lisp-imenu-generic-expression): Recognize define-widget.
Dave Love <fx@gnu.org>
parents:
25434
diff
changeset
|
233 :group 'lisp) |
4feb8ce584a5
(lisp-imenu-generic-expression): Recognize define-widget.
Dave Love <fx@gnu.org>
parents:
25434
diff
changeset
|
234 |
213 | 235 (defun emacs-lisp-mode () |
236 "Major mode for editing Lisp code to run in Emacs. | |
237 Commands: | |
238 Delete converts tabs to spaces as it moves back. | |
239 Blank lines separate paragraphs. Semicolons start comments. | |
240 \\{emacs-lisp-mode-map} | |
241 Entry to this mode calls the value of `emacs-lisp-mode-hook' | |
242 if that value is non-nil." | |
243 (interactive) | |
244 (kill-all-local-variables) | |
245 (use-local-map emacs-lisp-mode-map) | |
246 (set-syntax-table emacs-lisp-mode-syntax-table) | |
247 (setq major-mode 'emacs-lisp-mode) | |
248 (setq mode-name "Emacs-Lisp") | |
249 (lisp-mode-variables nil) | |
20459 | 250 (setq imenu-case-fold-search nil) |
213 | 251 (run-hooks 'emacs-lisp-mode-hook)) |
252 | |
27809 | 253 (defvar lisp-mode-map |
254 (let ((map (make-sparse-keymap))) | |
255 (set-keymap-parent map shared-lisp-mode-map) | |
256 (define-key map "\e\C-x" 'lisp-eval-defun) | |
257 (define-key map "\C-c\C-z" 'run-lisp) | |
258 map) | |
213 | 259 "Keymap for ordinary Lisp mode. |
260 All commands in `shared-lisp-mode-map' are inherited by this map.") | |
261 | |
262 (defun lisp-mode () | |
263 "Major mode for editing Lisp code for Lisps other than GNU Emacs Lisp. | |
264 Commands: | |
265 Delete converts tabs to spaces as it moves back. | |
266 Blank lines separate paragraphs. Semicolons start comments. | |
267 \\{lisp-mode-map} | |
268 Note that `run-lisp' may be used either to start an inferior Lisp job | |
269 or to switch back to an existing one. | |
270 | |
271 Entry to this mode calls the value of `lisp-mode-hook' | |
272 if that value is non-nil." | |
273 (interactive) | |
274 (kill-all-local-variables) | |
275 (use-local-map lisp-mode-map) | |
276 (setq major-mode 'lisp-mode) | |
277 (setq mode-name "Lisp") | |
278 (lisp-mode-variables t) | |
20459 | 279 (setq imenu-case-fold-search t) |
213 | 280 (set-syntax-table lisp-mode-syntax-table) |
281 (run-hooks 'lisp-mode-hook)) | |
282 | |
28324
979a905864ab
(lisp-eval-defun): Make arglist compatible with inf-lisp version.
Dave Love <fx@gnu.org>
parents:
27934
diff
changeset
|
283 ;; This will do unless inf-lisp.el is loaded. |
979a905864ab
(lisp-eval-defun): Make arglist compatible with inf-lisp version.
Dave Love <fx@gnu.org>
parents:
27934
diff
changeset
|
284 (defun lisp-eval-defun (&optional and-go) |
213 | 285 "Send the current defun to the Lisp process made by \\[run-lisp]." |
286 (interactive) | |
287 (error "Process lisp does not exist")) | |
288 | |
27809 | 289 (defvar lisp-interaction-mode-map |
290 (let ((map (make-sparse-keymap))) | |
291 (set-keymap-parent map shared-lisp-mode-map) | |
292 (define-key map "\e\C-x" 'eval-defun) | |
293 (define-key map "\e\t" 'lisp-complete-symbol) | |
294 (define-key map "\n" 'eval-print-last-sexp) | |
295 map) | |
23738
2ef2813414b6
(lisp-interaction-mode-map): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23723
diff
changeset
|
296 "Keymap for Lisp Interaction mode. |
213 | 297 All commands in `shared-lisp-mode-map' are inherited by this map.") |
298 | |
299 (defun lisp-interaction-mode () | |
300 "Major mode for typing and evaluating Lisp forms. | |
301 Like Lisp mode except that \\[eval-print-last-sexp] evals the Lisp expression | |
302 before point, and prints its value into the buffer, advancing point. | |
303 | |
304 Commands: | |
305 Delete converts tabs to spaces as it moves back. | |
306 Paragraphs are separated only by blank lines. | |
307 Semicolons start comments. | |
308 \\{lisp-interaction-mode-map} | |
309 Entry to this mode calls the value of `lisp-interaction-mode-hook' | |
310 if that value is non-nil." | |
311 (interactive) | |
312 (kill-all-local-variables) | |
313 (use-local-map lisp-interaction-mode-map) | |
314 (setq major-mode 'lisp-interaction-mode) | |
315 (setq mode-name "Lisp Interaction") | |
316 (set-syntax-table emacs-lisp-mode-syntax-table) | |
317 (lisp-mode-variables nil) | |
318 (run-hooks 'lisp-interaction-mode-hook)) | |
319 | |
248 | 320 (defun eval-print-last-sexp () |
213 | 321 "Evaluate sexp before point; print value into current buffer." |
248 | 322 (interactive) |
422 | 323 (let ((standard-output (current-buffer))) |
324 (terpri) | |
325 (eval-last-sexp t) | |
326 (terpri))) | |
213 | 327 |
27303
6af9b684a1a0
(eval-last-sexp-1): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
27300
diff
changeset
|
328 (defun eval-last-sexp-1 (eval-last-sexp-arg-internal) |
213 | 329 "Evaluate sexp before point; print value in minibuffer. |
330 With argument, print output into current buffer." | |
27303
6af9b684a1a0
(eval-last-sexp-1): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
27300
diff
changeset
|
331 (let ((standard-output (if eval-last-sexp-arg-internal (current-buffer) t))) |
25703
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
332 (let ((value |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
333 (eval (let ((stab (syntax-table)) |
17066
852e90e67fff
(eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents:
16687
diff
changeset
|
334 (opoint (point)) |
19057
b1251bcaaa0e
(eval-last-sexp): Ignore `...' around sexp.
Richard M. Stallman <rms@gnu.org>
parents:
17353
diff
changeset
|
335 ignore-quotes |
17066
852e90e67fff
(eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents:
16687
diff
changeset
|
336 expr) |
852e90e67fff
(eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents:
16687
diff
changeset
|
337 (unwind-protect |
249 | 338 (save-excursion |
339 (set-syntax-table emacs-lisp-mode-syntax-table) | |
19057
b1251bcaaa0e
(eval-last-sexp): Ignore `...' around sexp.
Richard M. Stallman <rms@gnu.org>
parents:
17353
diff
changeset
|
340 ;; If this sexp appears to be enclosed in `...' |
b1251bcaaa0e
(eval-last-sexp): Ignore `...' around sexp.
Richard M. Stallman <rms@gnu.org>
parents:
17353
diff
changeset
|
341 ;; then ignore the surrounding quotes. |
b1251bcaaa0e
(eval-last-sexp): Ignore `...' around sexp.
Richard M. Stallman <rms@gnu.org>
parents:
17353
diff
changeset
|
342 (setq ignore-quotes |
b1251bcaaa0e
(eval-last-sexp): Ignore `...' around sexp.
Richard M. Stallman <rms@gnu.org>
parents:
17353
diff
changeset
|
343 (or (eq (following-char) ?\') |
b1251bcaaa0e
(eval-last-sexp): Ignore `...' around sexp.
Richard M. Stallman <rms@gnu.org>
parents:
17353
diff
changeset
|
344 (eq (preceding-char) ?\'))) |
249 | 345 (forward-sexp -1) |
25642
556711217681
(eval-last-sexp): If after ?\LETTER, use all of that as the sexp.
Richard M. Stallman <rms@gnu.org>
parents:
25630
diff
changeset
|
346 ;; If we were after `?\e' (or similar case), |
556711217681
(eval-last-sexp): If after ?\LETTER, use all of that as the sexp.
Richard M. Stallman <rms@gnu.org>
parents:
25630
diff
changeset
|
347 ;; use the whole thing, not just the `e'. |
556711217681
(eval-last-sexp): If after ?\LETTER, use all of that as the sexp.
Richard M. Stallman <rms@gnu.org>
parents:
25630
diff
changeset
|
348 (when (eq (preceding-char) ?\\) |
556711217681
(eval-last-sexp): If after ?\LETTER, use all of that as the sexp.
Richard M. Stallman <rms@gnu.org>
parents:
25630
diff
changeset
|
349 (forward-char -1) |
556711217681
(eval-last-sexp): If after ?\LETTER, use all of that as the sexp.
Richard M. Stallman <rms@gnu.org>
parents:
25630
diff
changeset
|
350 (when (eq (preceding-char) ??) |
556711217681
(eval-last-sexp): If after ?\LETTER, use all of that as the sexp.
Richard M. Stallman <rms@gnu.org>
parents:
25630
diff
changeset
|
351 (forward-char -1))) |
1163 | 352 (save-restriction |
19057
b1251bcaaa0e
(eval-last-sexp): Ignore `...' around sexp.
Richard M. Stallman <rms@gnu.org>
parents:
17353
diff
changeset
|
353 ;; vladimir@cs.ualberta.ca 30-Jul-1997: skip ` in |
b1251bcaaa0e
(eval-last-sexp): Ignore `...' around sexp.
Richard M. Stallman <rms@gnu.org>
parents:
17353
diff
changeset
|
354 ;; `variable' so that the value is returned, not the |
b1251bcaaa0e
(eval-last-sexp): Ignore `...' around sexp.
Richard M. Stallman <rms@gnu.org>
parents:
17353
diff
changeset
|
355 ;; name |
b1251bcaaa0e
(eval-last-sexp): Ignore `...' around sexp.
Richard M. Stallman <rms@gnu.org>
parents:
17353
diff
changeset
|
356 (if (and ignore-quotes |
b1251bcaaa0e
(eval-last-sexp): Ignore `...' around sexp.
Richard M. Stallman <rms@gnu.org>
parents:
17353
diff
changeset
|
357 (eq (following-char) ?`)) |
b1251bcaaa0e
(eval-last-sexp): Ignore `...' around sexp.
Richard M. Stallman <rms@gnu.org>
parents:
17353
diff
changeset
|
358 (forward-char)) |
1163 | 359 (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
|
360 (setq expr (read (current-buffer))) |
852e90e67fff
(eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents:
16687
diff
changeset
|
361 ;; 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
|
362 ;; 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
|
363 ;; use it. |
852e90e67fff
(eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents:
16687
diff
changeset
|
364 (and (consp expr) |
852e90e67fff
(eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents:
16687
diff
changeset
|
365 (eq (car expr) 'interactive) |
852e90e67fff
(eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents:
16687
diff
changeset
|
366 (setq expr |
852e90e67fff
(eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents:
16687
diff
changeset
|
367 (list 'call-interactively |
852e90e67fff
(eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents:
16687
diff
changeset
|
368 (list 'quote |
852e90e67fff
(eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents:
16687
diff
changeset
|
369 (list 'lambda |
852e90e67fff
(eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents:
16687
diff
changeset
|
370 '(&rest args) |
852e90e67fff
(eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents:
16687
diff
changeset
|
371 expr |
852e90e67fff
(eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents:
16687
diff
changeset
|
372 'args))))) |
852e90e67fff
(eval-last-sexp): Allow let-bindings to terminate
Karl Heuer <kwzh@gnu.org>
parents:
16687
diff
changeset
|
373 expr)) |
25703
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
374 (set-syntax-table stab)))))) |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
375 (let ((print-length eval-expression-print-length) |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
376 (print-level eval-expression-print-level)) |
25723
5984b9cfea66
(eval-last-sexp): Use prin1 instead of print.
Gerd Moellmann <gerd@gnu.org>
parents:
25703
diff
changeset
|
377 (prin1 value))))) |
213 | 378 |
27303
6af9b684a1a0
(eval-last-sexp-1): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
27300
diff
changeset
|
379 (defun eval-last-sexp (eval-last-sexp-arg-internal) |
6af9b684a1a0
(eval-last-sexp-1): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
27300
diff
changeset
|
380 "Evaluate sexp before point; print value in minibuffer. |
6af9b684a1a0
(eval-last-sexp-1): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
27300
diff
changeset
|
381 With argument, print output into current buffer." |
6af9b684a1a0
(eval-last-sexp-1): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
27300
diff
changeset
|
382 (interactive "P") |
6af9b684a1a0
(eval-last-sexp-1): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
27300
diff
changeset
|
383 (if (null eval-expression-debug-on-error) |
6af9b684a1a0
(eval-last-sexp-1): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
27300
diff
changeset
|
384 (eval-last-sexp-1 eval-last-sexp-arg-internal) |
6af9b684a1a0
(eval-last-sexp-1): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
27300
diff
changeset
|
385 (let ((old-value (make-symbol "t")) new-value value) |
6af9b684a1a0
(eval-last-sexp-1): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
27300
diff
changeset
|
386 (let ((debug-on-error old-value)) |
6af9b684a1a0
(eval-last-sexp-1): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
27300
diff
changeset
|
387 (setq value (eval-last-sexp-1 eval-last-sexp-arg-internal)) |
6af9b684a1a0
(eval-last-sexp-1): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
27300
diff
changeset
|
388 (setq new-value debug-on-error)) |
6af9b684a1a0
(eval-last-sexp-1): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
27300
diff
changeset
|
389 (unless (eq old-value new-value) |
6af9b684a1a0
(eval-last-sexp-1): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
27300
diff
changeset
|
390 (setq debug-on-error new-value)) |
6af9b684a1a0
(eval-last-sexp-1): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
27300
diff
changeset
|
391 value))) |
6af9b684a1a0
(eval-last-sexp-1): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
27300
diff
changeset
|
392 |
25434
9a7891b32d1a
(eval-defun): Expand macros,
Richard M. Stallman <rms@gnu.org>
parents:
25109
diff
changeset
|
393 ;; Change defvar into defconst within FORM, |
9a7891b32d1a
(eval-defun): Expand macros,
Richard M. Stallman <rms@gnu.org>
parents:
25109
diff
changeset
|
394 ;; and likewise for other constructs as necessary. |
9a7891b32d1a
(eval-defun): Expand macros,
Richard M. Stallman <rms@gnu.org>
parents:
25109
diff
changeset
|
395 (defun eval-defun-1 (form) |
9a7891b32d1a
(eval-defun): Expand macros,
Richard M. Stallman <rms@gnu.org>
parents:
25109
diff
changeset
|
396 (cond ((and (eq (car form) 'defvar) |
9a7891b32d1a
(eval-defun): Expand macros,
Richard M. Stallman <rms@gnu.org>
parents:
25109
diff
changeset
|
397 (cdr-safe (cdr-safe form))) |
9a7891b32d1a
(eval-defun): Expand macros,
Richard M. Stallman <rms@gnu.org>
parents:
25109
diff
changeset
|
398 ;; Force variable to be bound. |
9a7891b32d1a
(eval-defun): Expand macros,
Richard M. Stallman <rms@gnu.org>
parents:
25109
diff
changeset
|
399 (cons 'defconst (cdr form))) |
28324
979a905864ab
(lisp-eval-defun): Make arglist compatible with inf-lisp version.
Dave Love <fx@gnu.org>
parents:
27934
diff
changeset
|
400 ;; `defcustom' is now macroexpanded to |
979a905864ab
(lisp-eval-defun): Make arglist compatible with inf-lisp version.
Dave Love <fx@gnu.org>
parents:
27934
diff
changeset
|
401 ;; `custom-declare-variable' with a quoted value arg. |
27809 | 402 ((and (eq (car form) 'custom-declare-variable) |
403 (default-boundp (eval (nth 1 form)))) | |
25434
9a7891b32d1a
(eval-defun): Expand macros,
Richard M. Stallman <rms@gnu.org>
parents:
25109
diff
changeset
|
404 ;; Force variable to be bound. |
28324
979a905864ab
(lisp-eval-defun): Make arglist compatible with inf-lisp version.
Dave Love <fx@gnu.org>
parents:
27934
diff
changeset
|
405 (set-default (eval (nth 1 form)) (eval (nth 1 (nth 2 form)))) |
25434
9a7891b32d1a
(eval-defun): Expand macros,
Richard M. Stallman <rms@gnu.org>
parents:
25109
diff
changeset
|
406 form) |
9a7891b32d1a
(eval-defun): Expand macros,
Richard M. Stallman <rms@gnu.org>
parents:
25109
diff
changeset
|
407 ((eq (car form) 'progn) |
9a7891b32d1a
(eval-defun): Expand macros,
Richard M. Stallman <rms@gnu.org>
parents:
25109
diff
changeset
|
408 (cons 'progn (mapcar 'eval-defun-1 (cdr form)))) |
9a7891b32d1a
(eval-defun): Expand macros,
Richard M. Stallman <rms@gnu.org>
parents:
25109
diff
changeset
|
409 (t form))) |
9a7891b32d1a
(eval-defun): Expand macros,
Richard M. Stallman <rms@gnu.org>
parents:
25109
diff
changeset
|
410 |
30055
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
411 (defun eval-defun-2 () |
248 | 412 "Evaluate defun that point is in or before. |
24895 | 413 The value is displayed in the minibuffer. |
414 If the current defun is actually a call to `defvar', | |
415 then reset the variable using the initial value expression | |
416 even if the variable already has some other value. | |
417 \(Normally `defvar' does not change the variable's value | |
418 if it already has a value.\) | |
419 | |
23388
8aa1f99efb66
(eval-defun): Return the evaluation result.
Karl Heuer <kwzh@gnu.org>
parents:
23191
diff
changeset
|
420 With argument, insert value in current buffer after the defun. |
8aa1f99efb66
(eval-defun): Return the evaluation result.
Karl Heuer <kwzh@gnu.org>
parents:
23191
diff
changeset
|
421 Return the result of evaluation." |
213 | 422 (interactive "P") |
25703
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
423 (let ((debug-on-error eval-expression-debug-on-error) |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
424 (print-length eval-expression-print-length) |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
425 (print-level eval-expression-print-level)) |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
426 (save-excursion |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
427 ;; Arrange for eval-region to "read" the (possibly) altered form. |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
428 ;; eval-region handles recording which file defines a function or |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
429 ;; variable. Re-written using `apply' to avoid capturing |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
430 ;; variables like `end'. |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
431 (apply |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
432 #'eval-region |
30055
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
433 (let ((standard-output t) |
25703
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
434 beg end form) |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
435 ;; Read the form from the buffer, and record where it ends. |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
436 (save-excursion |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
437 (end-of-defun) |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
438 (beginning-of-defun) |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
439 (setq beg (point)) |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
440 (setq form (read (current-buffer))) |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
441 (setq end (point))) |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
442 ;; Alter the form if necessary, changing defvar into defconst, etc. |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
443 (setq form (eval-defun-1 (macroexpand form))) |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
444 (list beg end standard-output |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
445 `(lambda (ignore) |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
446 ;; Skipping to the end of the specified region |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
447 ;; will make eval-region return. |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
448 (goto-char ,end) |
00b4eac00979
(eval-defun, eval-last-sexp):
Richard M. Stallman <rms@gnu.org>
parents:
25642
diff
changeset
|
449 ',form)))))) |
25107 | 450 ;; The result of evaluation has been put onto VALUES. So return it. |
451 (car values)) | |
27303
6af9b684a1a0
(eval-last-sexp-1): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
27300
diff
changeset
|
452 |
30055
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
453 (defun eval-defun (edebug-it) |
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
454 "Evaluate the top-level form containing point, or after point. |
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
455 |
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
456 If the current defun is actually a call to `defvar', then reset the |
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
457 variable using its initial value expression even if the variable |
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
458 already has some other value. (Normally `defvar' does not change the |
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
459 variable's value if it already has a value.) |
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
460 |
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
461 With a prefix argument, instrument the code for Edebug. |
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
462 |
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
463 If acting on a `defun' for FUNCTION, and the function was |
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
464 instrumented, `Edebug: FUNCTION' is printed in the minibuffer. If not |
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
465 instrumented, just FUNCTION is printed. |
27303
6af9b684a1a0
(eval-last-sexp-1): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
27300
diff
changeset
|
466 |
30055
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
467 If not acting on a `defun', the result of evaluation is displayed in |
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
468 the minibuffer." |
27303
6af9b684a1a0
(eval-last-sexp-1): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
27300
diff
changeset
|
469 (interactive "P") |
30055
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
470 (cond (edebug-it |
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
471 (require 'edebug) |
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
472 (eval-defun (not edebug-all-defs))) |
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
473 (t |
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
474 (if (null eval-expression-debug-on-error) |
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
475 (eval-defun-2) |
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
476 (let ((old-value (make-symbol "t")) new-value value) |
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
477 (let ((debug-on-error old-value)) |
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
478 (setq value (eval-defun-2)) |
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
479 (setq new-value debug-on-error)) |
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
480 (unless (eq old-value new-value) |
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
481 (setq debug-on-error new-value)) |
16e560dd4ab8
(eval-defun-2): Remove parameter
Gerd Moellmann <gerd@gnu.org>
parents:
28994
diff
changeset
|
482 value))))) |
27303
6af9b684a1a0
(eval-last-sexp-1): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
27300
diff
changeset
|
483 |
213 | 484 |
485 (defun lisp-comment-indent () | |
486 (if (looking-at "\\s<\\s<\\s<") | |
487 (current-column) | |
488 (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
|
489 (let ((tem (or (calculate-lisp-indent) (current-column)))) |
213 | 490 (if (listp tem) (car tem) tem)) |
491 (skip-chars-backward " \t") | |
492 (max (if (bolp) 0 (1+ (current-column))) | |
493 comment-column)))) | |
494 | |
20333
3627bd4b83d9
(lisp-mode-auto-fill): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20013
diff
changeset
|
495 (defun lisp-mode-auto-fill () |
3627bd4b83d9
(lisp-mode-auto-fill): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20013
diff
changeset
|
496 (if (> (current-column) (current-fill-column)) |
3627bd4b83d9
(lisp-mode-auto-fill): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20013
diff
changeset
|
497 (if (save-excursion |
3627bd4b83d9
(lisp-mode-auto-fill): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20013
diff
changeset
|
498 (nth 4 (parse-partial-sexp (save-excursion |
3627bd4b83d9
(lisp-mode-auto-fill): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20013
diff
changeset
|
499 (beginning-of-defun) |
3627bd4b83d9
(lisp-mode-auto-fill): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20013
diff
changeset
|
500 (point)) |
3627bd4b83d9
(lisp-mode-auto-fill): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20013
diff
changeset
|
501 (point)))) |
3627bd4b83d9
(lisp-mode-auto-fill): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20013
diff
changeset
|
502 (do-auto-fill) |
3627bd4b83d9
(lisp-mode-auto-fill): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20013
diff
changeset
|
503 (let ((comment-start nil) (comment-start-skip nil)) |
3627bd4b83d9
(lisp-mode-auto-fill): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20013
diff
changeset
|
504 (do-auto-fill))))) |
3627bd4b83d9
(lisp-mode-auto-fill): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20013
diff
changeset
|
505 |
27809 | 506 (defvar lisp-indent-offset nil) |
507 (defvar lisp-indent-function 'lisp-indent-function) | |
213 | 508 |
509 (defun lisp-indent-line (&optional whole-exp) | |
510 "Indent current line as Lisp code. | |
511 With argument, indent any additional lines of the same expression | |
512 rigidly along with this one." | |
513 (interactive "P") | |
514 (let ((indent (calculate-lisp-indent)) shift-amt beg end | |
515 (pos (- (point-max) (point)))) | |
516 (beginning-of-line) | |
517 (setq beg (point)) | |
518 (skip-chars-forward " \t") | |
17308
e52fa60d97e8
(indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents:
17144
diff
changeset
|
519 (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
|
520 ;; 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
|
521 ;; or a line that starts in a string. |
677
7a9b4ea68565
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
659
diff
changeset
|
522 (goto-char (- (point-max) pos)) |
213 | 523 (if (and (looking-at "\\s<") (not (looking-at "\\s<\\s<"))) |
524 ;; Single-semicolon comment lines should be indented | |
525 ;; as comment lines, not as code. | |
526 (progn (indent-for-comment) (forward-char -1)) | |
527 (if (listp indent) (setq indent (car indent))) | |
528 (setq shift-amt (- indent (current-column))) | |
529 (if (zerop shift-amt) | |
530 nil | |
531 (delete-region beg (point)) | |
532 (indent-to indent))) | |
533 ;; If initial point was within line's indentation, | |
534 ;; position after the indentation. Else stay at same point in text. | |
535 (if (> (- (point-max) pos) (point)) | |
536 (goto-char (- (point-max) pos))) | |
537 ;; If desired, shift remaining lines of expression the same amount. | |
538 (and whole-exp (not (zerop shift-amt)) | |
539 (save-excursion | |
540 (goto-char beg) | |
541 (forward-sexp 1) | |
542 (setq end (point)) | |
543 (goto-char beg) | |
544 (forward-line 1) | |
545 (setq beg (point)) | |
546 (> end beg)) | |
547 (indent-code-rigidly beg end shift-amt))))) | |
548 | |
9424
738999b0296f
Fix typo in previous change.
Richard M. Stallman <rms@gnu.org>
parents:
9423
diff
changeset
|
549 (defvar calculate-lisp-indent-last-sexp) |
9423
9076245a9fed
(calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents:
9415
diff
changeset
|
550 |
213 | 551 (defun calculate-lisp-indent (&optional parse-start) |
552 "Return appropriate indentation for current line as Lisp code. | |
553 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
|
554 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
|
555 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
|
556 |
e52fa60d97e8
(indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents:
17144
diff
changeset
|
557 The value can also be a list of the form (COLUMN CONTAINING-SEXP-START). |
213 | 558 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
|
559 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
|
560 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
|
561 is the buffer position of the start of the containing expression." |
213 | 562 (save-excursion |
563 (beginning-of-line) | |
564 (let ((indent-point (point)) | |
565 state paren-depth | |
566 ;; setting this to a number inhibits calling hook | |
567 (desired-indent nil) | |
568 (retry t) | |
9423
9076245a9fed
(calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents:
9415
diff
changeset
|
569 calculate-lisp-indent-last-sexp containing-sexp) |
213 | 570 (if parse-start |
571 (goto-char parse-start) | |
572 (beginning-of-defun)) | |
573 ;; Find outermost containing sexp | |
574 (while (< (point) indent-point) | |
575 (setq state (parse-partial-sexp (point) indent-point 0))) | |
576 ;; Find innermost containing sexp | |
577 (while (and retry | |
578 state | |
579 (> (setq paren-depth (elt state 0)) 0)) | |
580 (setq retry nil) | |
9423
9076245a9fed
(calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents:
9415
diff
changeset
|
581 (setq calculate-lisp-indent-last-sexp (elt state 2)) |
213 | 582 (setq containing-sexp (elt state 1)) |
583 ;; Position following last unclosed open. | |
584 (goto-char (1+ containing-sexp)) | |
585 ;; Is there a complete sexp since then? | |
9423
9076245a9fed
(calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents:
9415
diff
changeset
|
586 (if (and calculate-lisp-indent-last-sexp |
9076245a9fed
(calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents:
9415
diff
changeset
|
587 (> calculate-lisp-indent-last-sexp (point))) |
213 | 588 ;; 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
|
589 (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
|
590 indent-point 0))) |
213 | 591 (if (setq retry (car (cdr peek))) (setq state peek))))) |
592 (if retry | |
593 nil | |
594 ;; Innermost containing sexp found | |
595 (goto-char (1+ containing-sexp)) | |
9423
9076245a9fed
(calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents:
9415
diff
changeset
|
596 (if (not calculate-lisp-indent-last-sexp) |
213 | 597 ;; indent-point immediately follows open paren. |
598 ;; Don't call hook. | |
599 (setq desired-indent (current-column)) | |
600 ;; 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
|
601 (parse-partial-sexp (point) calculate-lisp-indent-last-sexp 0 t) |
213 | 602 (cond ((looking-at "\\s(") |
603 ;; First element of containing sexp is a list. | |
604 ;; Indent under that list. | |
605 ) | |
606 ((> (save-excursion (forward-line 1) (point)) | |
9423
9076245a9fed
(calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents:
9415
diff
changeset
|
607 calculate-lisp-indent-last-sexp) |
213 | 608 ;; This is the first line to start within the containing sexp. |
609 ;; It's almost certainly a function call. | |
9423
9076245a9fed
(calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents:
9415
diff
changeset
|
610 (if (= (point) calculate-lisp-indent-last-sexp) |
213 | 611 ;; Containing sexp has nothing before this line |
612 ;; except the first element. Indent under that element. | |
613 nil | |
614 ;; Skip the first element, find start of second (the first | |
615 ;; argument of the function call) and indent under. | |
616 (progn (forward-sexp 1) | |
9423
9076245a9fed
(calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents:
9415
diff
changeset
|
617 (parse-partial-sexp (point) |
9076245a9fed
(calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents:
9415
diff
changeset
|
618 calculate-lisp-indent-last-sexp |
9076245a9fed
(calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents:
9415
diff
changeset
|
619 0 t))) |
213 | 620 (backward-prefix-chars)) |
621 (t | |
9423
9076245a9fed
(calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents:
9415
diff
changeset
|
622 ;; Indent beneath first sexp on same line as |
27809 | 623 ;; `calculate-lisp-indent-last-sexp'. Again, it's |
9423
9076245a9fed
(calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents:
9415
diff
changeset
|
624 ;; almost certainly a function call. |
9076245a9fed
(calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents:
9415
diff
changeset
|
625 (goto-char calculate-lisp-indent-last-sexp) |
213 | 626 (beginning-of-line) |
9423
9076245a9fed
(calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents:
9415
diff
changeset
|
627 (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
|
628 0 t) |
213 | 629 (backward-prefix-chars))))) |
630 ;; 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
|
631 ;; Call indentation hook except when overridden by lisp-indent-offset |
213 | 632 ;; or if the desired indentation has already been computed. |
633 (let ((normal-indent (current-column))) | |
634 (cond ((elt state 3) | |
635 ;; 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
|
636 nil) |
213 | 637 ((and (integerp lisp-indent-offset) containing-sexp) |
638 ;; Indent by constant offset | |
639 (goto-char containing-sexp) | |
640 (+ (current-column) lisp-indent-offset)) | |
641 (desired-indent) | |
642 ((and (boundp 'lisp-indent-function) | |
643 lisp-indent-function | |
644 (not retry)) | |
645 (or (funcall lisp-indent-function indent-point state) | |
646 normal-indent)) | |
647 (t | |
214 | 648 normal-indent)))))) |
213 | 649 |
650 (defun lisp-indent-function (indent-point state) | |
651 (let ((normal-indent (current-column))) | |
652 (goto-char (1+ (elt state 1))) | |
9423
9076245a9fed
(calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents:
9415
diff
changeset
|
653 (parse-partial-sexp (point) calculate-lisp-indent-last-sexp 0 t) |
213 | 654 (if (and (elt state 2) |
655 (not (looking-at "\\sw\\|\\s_"))) | |
656 ;; car of form doesn't seem to be a a symbol | |
657 (progn | |
658 (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
|
659 calculate-lisp-indent-last-sexp)) |
9076245a9fed
(calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents:
9415
diff
changeset
|
660 (progn (goto-char calculate-lisp-indent-last-sexp) |
213 | 661 (beginning-of-line) |
9423
9076245a9fed
(calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents:
9415
diff
changeset
|
662 (parse-partial-sexp (point) |
9076245a9fed
(calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents:
9415
diff
changeset
|
663 calculate-lisp-indent-last-sexp 0 t))) |
9076245a9fed
(calculate-lisp-indent): Local var
Richard M. Stallman <rms@gnu.org>
parents:
9415
diff
changeset
|
664 ;; 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
|
665 ;; 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
|
666 ;; 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
|
667 ;; inside the innermost containing sexp. |
213 | 668 (backward-prefix-chars) |
669 (current-column)) | |
670 (let ((function (buffer-substring (point) | |
671 (progn (forward-sexp 1) (point)))) | |
672 method) | |
3638
45169f86d3a4
(lisp-indent-function): Look for either
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
673 (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
|
674 (get (intern-soft function) 'lisp-indent-hook))) |
213 | 675 (cond ((or (eq method 'defun) |
676 (and (null method) | |
677 (> (length function) 3) | |
678 (string-match "\\`def" function))) | |
679 (lisp-indent-defform state indent-point)) | |
680 ((integerp method) | |
681 (lisp-indent-specform method state | |
682 indent-point normal-indent)) | |
683 (method | |
684 (funcall method state indent-point))))))) | |
685 | |
16687
049c87a96dca
Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents:
16563
diff
changeset
|
686 (defvar lisp-body-indent 2 |
2933
420dfaaacfc5
(lisp-body-indent): Add doc.
Richard M. Stallman <rms@gnu.org>
parents:
2450
diff
changeset
|
687 "Number of columns to indent the second line of a `(def...)' form.") |
213 | 688 |
689 (defun lisp-indent-specform (count state indent-point normal-indent) | |
690 (let ((containing-form-start (elt state 1)) | |
691 (i count) | |
692 body-indent containing-form-column) | |
693 ;; Move to the start of containing form, calculate indentation | |
694 ;; to use for non-distinguished forms (> count), and move past the | |
695 ;; function symbol. lisp-indent-function guarantees that there is at | |
696 ;; least one word or symbol character following open paren of containing | |
697 ;; form. | |
698 (goto-char containing-form-start) | |
699 (setq containing-form-column (current-column)) | |
700 (setq body-indent (+ lisp-body-indent containing-form-column)) | |
701 (forward-char 1) | |
702 (forward-sexp 1) | |
703 ;; Now find the start of the last form. | |
704 (parse-partial-sexp (point) indent-point 1 t) | |
705 (while (and (< (point) indent-point) | |
706 (condition-case () | |
707 (progn | |
708 (setq count (1- count)) | |
709 (forward-sexp 1) | |
710 (parse-partial-sexp (point) indent-point 1 t)) | |
711 (error nil)))) | |
712 ;; Point is sitting on first character of last (or count) sexp. | |
713 (if (> count 0) | |
714 ;; A distinguished form. If it is the first or second form use double | |
715 ;; lisp-body-indent, else normal indent. With lisp-body-indent bound | |
716 ;; to 2 (the default), this just happens to work the same with if as | |
717 ;; the older code, but it makes unwind-protect, condition-case, | |
718 ;; with-output-to-temp-buffer, et. al. much more tasteful. The older, | |
719 ;; less hacked, behavior can be obtained by replacing below with | |
720 ;; (list normal-indent containing-form-start). | |
721 (if (<= (- i count) 1) | |
722 (list (+ containing-form-column (* 2 lisp-body-indent)) | |
723 containing-form-start) | |
724 (list normal-indent containing-form-start)) | |
725 ;; A non-distinguished form. Use body-indent if there are no | |
726 ;; distinguished forms and this is the first undistinguished form, | |
727 ;; or if this is the first undistinguished form and the preceding | |
728 ;; distinguished form has indentation at least as great as body-indent. | |
729 (if (or (and (= i 0) (= count 0)) | |
730 (and (= count 0) (<= body-indent normal-indent))) | |
731 body-indent | |
732 normal-indent)))) | |
733 | |
734 (defun lisp-indent-defform (state indent-point) | |
735 (goto-char (car (cdr state))) | |
736 (forward-line 1) | |
737 (if (> (point) (car (cdr (cdr state)))) | |
738 (progn | |
739 (goto-char (car (cdr state))) | |
740 (+ lisp-body-indent (current-column))))) | |
741 | |
742 | |
743 ;; (put 'progn 'lisp-indent-function 0), say, causes progn to be indented | |
744 ;; like defun if the first form is placed on the next line, otherwise | |
745 ;; it is indented like any other form (i.e. forms line up under first). | |
746 | |
747 (put 'lambda 'lisp-indent-function 'defun) | |
748 (put 'autoload 'lisp-indent-function 'defun) | |
749 (put 'progn 'lisp-indent-function 0) | |
750 (put 'prog1 'lisp-indent-function 1) | |
751 (put 'prog2 'lisp-indent-function 2) | |
752 (put 'save-excursion 'lisp-indent-function 0) | |
753 (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
|
754 (put 'save-selected-window 'lisp-indent-function 0) |
213 | 755 (put 'save-restriction 'lisp-indent-function 0) |
1163 | 756 (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
|
757 (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
|
758 (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
|
759 (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
|
760 (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
|
761 (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
|
762 (put 'with-temp-buffer 'lisp-indent-function 0) |
23738
2ef2813414b6
(lisp-interaction-mode-map): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23723
diff
changeset
|
763 (put 'with-temp-message 'lisp-indent-function 1) |
27300
baffb2de5ce9
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
26682
diff
changeset
|
764 (put 'with-syntax-table 'lisp-indent-function 1) |
213 | 765 (put 'let 'lisp-indent-function 1) |
766 (put 'let* 'lisp-indent-function 1) | |
767 (put 'while 'lisp-indent-function 1) | |
768 (put 'if 'lisp-indent-function 2) | |
769 (put 'catch 'lisp-indent-function 1) | |
770 (put 'condition-case 'lisp-indent-function 2) | |
771 (put 'unwind-protect 'lisp-indent-function 1) | |
772 (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
|
773 (put 'eval-after-load 'lisp-indent-function 1) |
27484
a681b4de47a1
Add indent specs for dolist, dotimes, when, unless.
Dave Love <fx@gnu.org>
parents:
27303
diff
changeset
|
774 (put 'dolist 'lisp-indent-function 1) |
a681b4de47a1
Add indent specs for dolist, dotimes, when, unless.
Dave Love <fx@gnu.org>
parents:
27303
diff
changeset
|
775 (put 'dotimes 'lisp-indent-function 1) |
a681b4de47a1
Add indent specs for dolist, dotimes, when, unless.
Dave Love <fx@gnu.org>
parents:
27303
diff
changeset
|
776 (put 'when 'lisp-indent-function 1) |
a681b4de47a1
Add indent specs for dolist, dotimes, when, unless.
Dave Love <fx@gnu.org>
parents:
27303
diff
changeset
|
777 (put 'unless 'lisp-indent-function 1) |
213 | 778 |
779 (defun indent-sexp (&optional endpos) | |
780 "Indent each line of the list starting just after point. | |
781 If optional arg ENDPOS is given, indent each line, stopping when | |
782 ENDPOS is encountered." | |
783 (interactive) | |
727 | 784 (let ((indent-stack (list nil)) |
785 (next-depth 0) | |
10594
aadef46f00f7
(lisp-indent-region): Set endmark before indenting first line.
Richard M. Stallman <rms@gnu.org>
parents:
9424
diff
changeset
|
786 ;; 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
|
787 ;; 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
|
788 ;; 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
|
789 ;; 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
|
790 ;; 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
|
791 (starting-point (if endpos nil (point))) |
727 | 792 (last-point (point)) |
793 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
|
794 (or endpos |
aadef46f00f7
(lisp-indent-region): Set endmark before indenting first line.
Richard M. Stallman <rms@gnu.org>
parents:
9424
diff
changeset
|
795 ;; 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
|
796 (save-excursion (forward-sexp 1))) |
213 | 797 (save-excursion |
798 (setq outer-loop-done nil) | |
799 (while (if endpos (< (point) endpos) | |
800 (not outer-loop-done)) | |
801 (setq last-depth next-depth | |
802 inner-loop-done nil) | |
803 ;; Parse this line so we can learn the state | |
804 ;; to indent the next line. | |
805 ;; This inner loop goes through only once | |
806 ;; unless a line ends inside a string. | |
807 (while (and (not inner-loop-done) | |
808 (not (setq outer-loop-done (eobp)))) | |
809 (setq state (parse-partial-sexp (point) (progn (end-of-line) (point)) | |
810 nil nil state)) | |
811 (setq next-depth (car state)) | |
812 ;; If the line contains a comment other than the sort | |
813 ;; that is indented like code, | |
814 ;; indent it now with indent-for-comment. | |
815 ;; Comments indented like code are right already. | |
816 ;; In any case clear the in-comment flag in the state | |
817 ;; because parse-partial-sexp never sees the newlines. | |
818 (if (car (nthcdr 4 state)) | |
819 (progn (indent-for-comment) | |
820 (end-of-line) | |
821 (setcar (nthcdr 4 state) nil))) | |
822 ;; If this line ends inside a string, | |
823 ;; go straight to next line, remaining within the inner loop, | |
824 ;; and turn off the \-flag. | |
825 (if (car (nthcdr 3 state)) | |
826 (progn | |
827 (forward-line 1) | |
828 (setcar (nthcdr 5 state) nil)) | |
829 (setq inner-loop-done t))) | |
830 (and endpos | |
727 | 831 (<= next-depth 0) |
832 (progn | |
833 (setq indent-stack (append indent-stack | |
834 (make-list (- next-depth) nil)) | |
835 last-depth (- last-depth next-depth) | |
836 next-depth 0))) | |
10594
aadef46f00f7
(lisp-indent-region): Set endmark before indenting first line.
Richard M. Stallman <rms@gnu.org>
parents:
9424
diff
changeset
|
837 (or outer-loop-done endpos |
213 | 838 (setq outer-loop-done (<= next-depth 0))) |
839 (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
|
840 (forward-line 1) |
213 | 841 (while (> last-depth next-depth) |
842 (setq indent-stack (cdr indent-stack) | |
843 last-depth (1- last-depth))) | |
844 (while (< last-depth next-depth) | |
845 (setq indent-stack (cons nil indent-stack) | |
846 last-depth (1+ last-depth))) | |
847 ;; Now go to the next line and indent it according | |
848 ;; to what we learned from parsing the previous one. | |
849 (forward-line 1) | |
850 (setq bol (point)) | |
851 (skip-chars-forward " \t") | |
852 ;; But not if the line is blank, or just a comment | |
853 ;; (except for double-semi comments; indent them as usual). | |
854 (if (or (eobp) (looking-at "\\s<\\|\n")) | |
855 nil | |
856 (if (and (car indent-stack) | |
857 (>= (car indent-stack) 0)) | |
858 (setq this-indent (car indent-stack)) | |
859 (let ((val (calculate-lisp-indent | |
860 (if (car indent-stack) (- (car indent-stack)) | |
727 | 861 starting-point)))) |
17308
e52fa60d97e8
(indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents:
17144
diff
changeset
|
862 (if (null val) |
e52fa60d97e8
(indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents:
17144
diff
changeset
|
863 (setq this-indent val) |
e52fa60d97e8
(indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents:
17144
diff
changeset
|
864 (if (integerp val) |
e52fa60d97e8
(indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents:
17144
diff
changeset
|
865 (setcar indent-stack |
e52fa60d97e8
(indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents:
17144
diff
changeset
|
866 (setq this-indent val)) |
e52fa60d97e8
(indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents:
17144
diff
changeset
|
867 (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
|
868 (setq this-indent (car val)))))) |
e52fa60d97e8
(indent-sexp): If calculate-lisp-indent returns nil,
Richard M. Stallman <rms@gnu.org>
parents:
17144
diff
changeset
|
869 (if (and this-indent (/= (current-column) this-indent)) |
213 | 870 (progn (delete-region bol (point)) |
871 (indent-to this-indent))))) | |
872 (or outer-loop-done | |
873 (setq outer-loop-done (= (point) last-point)) | |
874 (setq last-point (point))))))) | |
875 | |
876 (defun lisp-indent-region (start end) | |
27809 | 877 "Indent every line whose first char is between START and END inclusive." |
213 | 878 (save-excursion |
879 (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
|
880 (goto-char start) |
aadef46f00f7
(lisp-indent-region): Set endmark before indenting first line.
Richard M. Stallman <rms@gnu.org>
parents:
9424
diff
changeset
|
881 (and (bolp) (not (eolp)) |
aadef46f00f7
(lisp-indent-region): Set endmark before indenting first line.
Richard M. Stallman <rms@gnu.org>
parents:
9424
diff
changeset
|
882 (lisp-indent-line)) |
213 | 883 (indent-sexp endmark) |
884 (set-marker endmark nil)))) | |
885 | |
1865
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
886 ;;;; Lisp paragraph filling commands. |
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
887 |
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
888 (defun lisp-fill-paragraph (&optional justify) |
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
889 "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
|
890 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
|
891 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
|
892 and initial semicolons." |
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
893 (interactive "P") |
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
894 (let ( |
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
895 ;; 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
|
896 has-comment |
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
897 |
14817
cdd8a024f000
(lisp-fill-paragraph): Treat code-and-comment case specially.
Richard M. Stallman <rms@gnu.org>
parents:
14734
diff
changeset
|
898 ;; 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
|
899 has-code-and-comment |
cdd8a024f000
(lisp-fill-paragraph): Treat code-and-comment case specially.
Richard M. Stallman <rms@gnu.org>
parents:
14734
diff
changeset
|
900 |
1865
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
901 ;; 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
|
902 comment-fill-prefix |
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
903 ) |
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
904 |
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
905 ;; 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
|
906 (save-excursion |
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
907 (beginning-of-line) |
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
908 (cond |
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
909 |
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
910 ;; 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
|
911 ((looking-at "[ \t]*;[; \t]*") |
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
912 (setq has-comment t |
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
913 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
|
914 (match-end 0)))) |
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
915 |
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
916 ;; 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
|
917 ;; 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
|
918 ;; character. |
13802
8107433d6a22
(lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents:
13504
diff
changeset
|
919 ((condition-case nil |
8107433d6a22
(lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents:
13504
diff
changeset
|
920 (save-restriction |
8107433d6a22
(lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents:
13504
diff
changeset
|
921 (narrow-to-region (point-min) |
8107433d6a22
(lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents:
13504
diff
changeset
|
922 (save-excursion (end-of-line) (point))) |
8107433d6a22
(lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents:
13504
diff
changeset
|
923 (while (not (looking-at ";\\|$")) |
8107433d6a22
(lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents:
13504
diff
changeset
|
924 (skip-chars-forward "^;\n\"\\\\?") |
8107433d6a22
(lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents:
13504
diff
changeset
|
925 (cond |
8107433d6a22
(lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents:
13504
diff
changeset
|
926 ((eq (char-after (point)) ?\\) (forward-char 2)) |
8107433d6a22
(lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents:
13504
diff
changeset
|
927 ((memq (char-after (point)) '(?\" ??)) (forward-sexp 1)))) |
8107433d6a22
(lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents:
13504
diff
changeset
|
928 (looking-at ";+[\t ]*")) |
8107433d6a22
(lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents:
13504
diff
changeset
|
929 (error nil)) |
14817
cdd8a024f000
(lisp-fill-paragraph): Treat code-and-comment case specially.
Richard M. Stallman <rms@gnu.org>
parents:
14734
diff
changeset
|
930 (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
|
931 (setq comment-fill-prefix |
13802
8107433d6a22
(lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents:
13504
diff
changeset
|
932 (concat (make-string (/ (current-column) 8) ?\t) |
8107433d6a22
(lisp-fill-paragraph): Several changes.
Karl Heuer <kwzh@gnu.org>
parents:
13504
diff
changeset
|
933 (make-string (% (current-column) 8) ?\ ) |
1865
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
934 (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
|
935 |
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
936 (if (not has-comment) |
21213 | 937 ;; `paragraph-start' is set here (not in the buffer-local |
938 ;; variable so that `forward-paragraph' et al work as | |
939 ;; expected) so that filling (doc) strings works sensibly. | |
940 ;; Adding the opening paren to avoid the following sexp being | |
941 ;; filled means that sexps generally aren't filled as normal | |
942 ;; text, which is probably sensible. The `;' and `:' stop the | |
943 ;; filled para at following comment lines and keywords | |
944 ;; (typically in `defcustom'). | |
945 (let ((paragraph-start (concat paragraph-start | |
946 "\\|\\s-*[\(;:\"]"))) | |
947 (fill-paragraph justify)) | |
1865
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
948 |
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
949 ;; 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
|
950 (save-excursion |
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
951 (save-restriction |
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
952 (beginning-of-line) |
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
953 (narrow-to-region |
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
954 ;; 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
|
955 (save-excursion |
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
956 (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
|
957 (looking-at "^[ \t]*;"))) |
14628
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
958 ;; 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
|
959 (or (looking-at ".*;") |
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
960 (forward-line 1)) |
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
961 (point)) |
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
962 ;; 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
|
963 (save-excursion |
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
964 (while (progn (forward-line 1) |
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
965 (looking-at "^[ \t]*;"))) |
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
966 (point))) |
1865
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
967 |
14628
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
968 ;; 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
|
969 (let* ((paragraph-start (concat paragraph-start "\\|[ \t;]*$")) |
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
970 (paragraph-separate (concat paragraph-start "\\|[ \t;]*$")) |
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
971 (paragraph-ignore-fill-prefix nil) |
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
972 (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
|
973 (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
|
974 (save-excursion |
cdd8a024f000
(lisp-fill-paragraph): Treat code-and-comment case specially.
Richard M. Stallman <rms@gnu.org>
parents:
14734
diff
changeset
|
975 (forward-line 1) (point)))) |
14628
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
976 (end (progn |
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
977 (forward-paragraph) |
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
978 (or (bolp) (newline 1)) |
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
979 (point))) |
14817
cdd8a024f000
(lisp-fill-paragraph): Treat code-and-comment case specially.
Richard M. Stallman <rms@gnu.org>
parents:
14734
diff
changeset
|
980 ;; 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
|
981 ;; 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
|
982 (beg (progn (backward-paragraph) |
cdd8a024f000
(lisp-fill-paragraph): Treat code-and-comment case specially.
Richard M. Stallman <rms@gnu.org>
parents:
14734
diff
changeset
|
983 (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
|
984 (forward-line -1)) |
cdd8a024f000
(lisp-fill-paragraph): Treat code-and-comment case specially.
Richard M. Stallman <rms@gnu.org>
parents:
14734
diff
changeset
|
985 (point)))) |
14628
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
986 (fill-region-as-paragraph beg end |
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
987 justify nil |
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
988 (save-excursion |
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
989 (goto-char beg) |
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
990 (if (looking-at fill-prefix) |
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
991 nil |
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
992 (re-search-forward comment-start-skip) |
c932ad13ccd9
(lisp-fill-paragraph): When filling a comment,
Karl Heuer <kwzh@gnu.org>
parents:
14495
diff
changeset
|
993 (point)))))))) |
10629
2c9bdcab7052
(lisp-fill-paragraph): Return t.
Richard M. Stallman <rms@gnu.org>
parents:
10628
diff
changeset
|
994 t)) |
1865
05be3e0c082f
* lisp-mode.el (lisp-fill-paragraph): New function.
Jim Blandy <jimb@redhat.com>
parents:
1163
diff
changeset
|
995 |
213 | 996 (defun indent-code-rigidly (start end arg &optional nochange-regexp) |
997 "Indent all lines of code, starting in the region, sideways by ARG columns. | |
998 Does not affect lines starting inside comments or strings, assuming that | |
999 the start of the region is not inside them. | |
1000 | |
1001 Called from a program, takes args START, END, COLUMNS and NOCHANGE-REGEXP. | |
1002 The last is a regexp which, if matched at the beginning of a line, | |
1003 means don't indent that line." | |
1004 (interactive "r\np") | |
1005 (let (state) | |
1006 (save-excursion | |
1007 (goto-char end) | |
1008 (setq end (point-marker)) | |
1009 (goto-char start) | |
1010 (or (bolp) | |
1011 (setq state (parse-partial-sexp (point) | |
1012 (progn | |
1013 (forward-line 1) (point)) | |
1014 nil nil state))) | |
1015 (while (< (point) end) | |
1016 (or (car (nthcdr 3 state)) | |
1017 (and nochange-regexp | |
1018 (looking-at nochange-regexp)) | |
1019 ;; If line does not start in string, indent it | |
1020 (let ((indent (current-indentation))) | |
1021 (delete-region (point) (progn (skip-chars-forward " \t") (point))) | |
1022 (or (eolp) | |
1023 (indent-to (max 0 (+ indent arg)) 0)))) | |
1024 (setq state (parse-partial-sexp (point) | |
1025 (progn | |
1026 (forward-line 1) (point)) | |
1027 nil nil state)))))) | |
584 | 1028 |
1029 (provide 'lisp-mode) | |
1030 | |
659
505130d1ddf8
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
584
diff
changeset
|
1031 ;;; lisp-mode.el ends here |