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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
1 ;;; lisp-mode.el --- Lisp mode, and its idiosyncratic commands.
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
2
27809
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
9
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 727
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
13 ;; any later version.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
14
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
18 ;; GNU General Public License for more details.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
19
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14116
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14116
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14116
diff changeset
23 ;; Boston, MA 02111-1307, USA.
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
24
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2232
diff changeset
25 ;;; Commentary:
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2232
diff changeset
26
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2232
diff changeset
27 ;; The base major mode for editing Lisp code (used also for Emacs Lisp).
27809
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
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
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
32 (defvar lisp-mode-abbrev-table nil)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
33
27809
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
34 (defvar emacs-lisp-mode-syntax-table
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
35 (let ((table (make-syntax-table)))
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
36 (let ((i 0))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
37 (while (< i ?0)
27809
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
38 (modify-syntax-entry i "_ " table)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
39 (setq i (1+ i)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
40 (setq i (1+ ?9))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
41 (while (< i ?A)
27809
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
42 (modify-syntax-entry i "_ " table)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
43 (setq i (1+ i)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
44 (setq i (1+ ?Z))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
45 (while (< i ?a)
27809
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
46 (modify-syntax-entry i "_ " table)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
47 (setq i (1+ i)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
48 (setq i (1+ ?z))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
49 (while (< i 128)
27809
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
50 (modify-syntax-entry i "_ " table)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
51 (setq i (1+ i)))
27809
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
52 (modify-syntax-entry ? " " table)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
53 (modify-syntax-entry ?\t " " table)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
54 (modify-syntax-entry ?\f " " table)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
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
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
57 (modify-syntax-entry ?\^m "> " table)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
58 (modify-syntax-entry ?\; "< " table)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
59 (modify-syntax-entry ?` "' " table)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
60 (modify-syntax-entry ?' "' " table)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
61 (modify-syntax-entry ?, "' " table)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
62 ;; Used to be singlequote; changed for flonums.
27809
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
63 (modify-syntax-entry ?. "_ " table)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
64 (modify-syntax-entry ?# "' " table)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
65 (modify-syntax-entry ?\" "\" " table)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
66 (modify-syntax-entry ?\\ "\\ " table)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
67 (modify-syntax-entry ?\( "() " table)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
68 (modify-syntax-entry ?\) ")( " table)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
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
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
71 table))
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
72
27809
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
73 (defvar lisp-mode-syntax-table
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
74 (let ((table (copy-syntax-table emacs-lisp-mode-syntax-table)))
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
75 (modify-syntax-entry ?\[ "_ " table)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
76 (modify-syntax-entry ?\] "_ " table)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
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
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
79 table))
285
adb31fcccc2b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 255
diff changeset
80
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
81 (define-abbrev-table 'lisp-mode-abbrev-table ())
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
84 (list
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
85 (list nil
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
86 (purecopy "^\\s-*(def\\(un\\|subst\\|macro\\|advice\\|\
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
87 ine-skeleton\\|ine-minor-mode\\)\\s-+\\(\\sw\\(\\sw\\|\\s_\\)+\\)") 2)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
88 (list (purecopy "Variables")
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
89 (purecopy "^\\s-*(def\\(var\\|const\\|custom\\)\\s-+\
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
90 \\(\\sw\\(\\sw\\|\\s_\\)+\\)") 2)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
91 (list (purecopy "Types")
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
92 (purecopy "^\\s-*(def\\(group\\|type\\|struct\\|class\\|\
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
98 (defun lisp-mode-variables (lisp-syntax)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
99 (cond (lisp-syntax
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
100 (set-syntax-table lisp-mode-syntax-table)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
101 (setq local-abbrev-table lisp-mode-abbrev-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
104 (make-local-variable 'paragraph-separate)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
105 (setq paragraph-separate paragraph-start)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
106 (make-local-variable 'paragraph-ignore-fill-prefix)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
117 (make-local-variable 'indent-line-function)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
118 (setq indent-line-function 'lisp-indent-line)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
119 (make-local-variable 'indent-region-function)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
120 (setq indent-region-function 'lisp-indent-region)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
121 (make-local-variable 'parse-sexp-ignore-comments)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
127 (make-local-variable 'comment-start)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
128 (setq comment-start ";")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
135 (make-local-variable 'comment-column)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
151
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
152 (defvar shared-lisp-mode-map ()
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
153 "Keymap for commands shared by all sorts of Lisp modes.")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
154
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
155 (if shared-lisp-mode-map
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
156 ()
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
157 (setq shared-lisp-mode-map (make-sparse-keymap))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
160
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
161 (defvar emacs-lisp-mode-map ()
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
164
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
165 (if emacs-lisp-mode-map
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
235 (defun emacs-lisp-mode ()
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
236 "Major mode for editing Lisp code to run in Emacs.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
237 Commands:
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
238 Delete converts tabs to spaces as it moves back.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
239 Blank lines separate paragraphs. Semicolons start comments.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
240 \\{emacs-lisp-mode-map}
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
241 Entry to this mode calls the value of `emacs-lisp-mode-hook'
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
242 if that value is non-nil."
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
243 (interactive)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
244 (kill-all-local-variables)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
245 (use-local-map emacs-lisp-mode-map)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
246 (set-syntax-table emacs-lisp-mode-syntax-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
247 (setq major-mode 'emacs-lisp-mode)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
248 (setq mode-name "Emacs-Lisp")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
249 (lisp-mode-variables nil)
20459
90f306f86f5d Use imenu-case-fold-search.
Dave Love <fx@gnu.org>
parents: 20333
diff changeset
250 (setq imenu-case-fold-search nil)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
251 (run-hooks 'emacs-lisp-mode-hook))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
252
27809
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
253 (defvar lisp-mode-map
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
254 (let ((map (make-sparse-keymap)))
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
255 (set-keymap-parent map shared-lisp-mode-map)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
256 (define-key map "\e\C-x" 'lisp-eval-defun)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
257 (define-key map "\C-c\C-z" 'run-lisp)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
258 map)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
259 "Keymap for ordinary Lisp mode.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
260 All commands in `shared-lisp-mode-map' are inherited by this map.")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
261
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
262 (defun lisp-mode ()
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
263 "Major mode for editing Lisp code for Lisps other than GNU Emacs Lisp.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
264 Commands:
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
265 Delete converts tabs to spaces as it moves back.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
266 Blank lines separate paragraphs. Semicolons start comments.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
267 \\{lisp-mode-map}
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
268 Note that `run-lisp' may be used either to start an inferior Lisp job
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
269 or to switch back to an existing one.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
270
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
271 Entry to this mode calls the value of `lisp-mode-hook'
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
272 if that value is non-nil."
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
273 (interactive)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
274 (kill-all-local-variables)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
275 (use-local-map lisp-mode-map)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
276 (setq major-mode 'lisp-mode)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
277 (setq mode-name "Lisp")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
278 (lisp-mode-variables t)
20459
90f306f86f5d Use imenu-case-fold-search.
Dave Love <fx@gnu.org>
parents: 20333
diff changeset
279 (setq imenu-case-fold-search t)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
280 (set-syntax-table lisp-mode-syntax-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
281 (run-hooks 'lisp-mode-hook))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
285 "Send the current defun to the Lisp process made by \\[run-lisp]."
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
286 (interactive)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
287 (error "Process lisp does not exist"))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
288
27809
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
289 (defvar lisp-interaction-mode-map
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
290 (let ((map (make-sparse-keymap)))
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
291 (set-keymap-parent map shared-lisp-mode-map)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
292 (define-key map "\e\C-x" 'eval-defun)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
293 (define-key map "\e\t" 'lisp-complete-symbol)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
294 (define-key map "\n" 'eval-print-last-sexp)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
297 All commands in `shared-lisp-mode-map' are inherited by this map.")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
298
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
299 (defun lisp-interaction-mode ()
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
300 "Major mode for typing and evaluating Lisp forms.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
301 Like Lisp mode except that \\[eval-print-last-sexp] evals the Lisp expression
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
302 before point, and prints its value into the buffer, advancing point.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
303
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
304 Commands:
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
305 Delete converts tabs to spaces as it moves back.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
306 Paragraphs are separated only by blank lines.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
307 Semicolons start comments.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
308 \\{lisp-interaction-mode-map}
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
309 Entry to this mode calls the value of `lisp-interaction-mode-hook'
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
310 if that value is non-nil."
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
311 (interactive)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
312 (kill-all-local-variables)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
313 (use-local-map lisp-interaction-mode-map)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
314 (setq major-mode 'lisp-interaction-mode)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
315 (setq mode-name "Lisp Interaction")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
316 (set-syntax-table emacs-lisp-mode-syntax-table)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
317 (lisp-mode-variables nil)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
318 (run-hooks 'lisp-interaction-mode-hook))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
319
248
287cf3ae183a *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 214
diff changeset
320 (defun eval-print-last-sexp ()
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
321 "Evaluate sexp before point; print value into current buffer."
248
287cf3ae183a *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 214
diff changeset
322 (interactive)
422
5abb8aac7c6b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
323 (let ((standard-output (current-buffer)))
5abb8aac7c6b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
324 (terpri)
5abb8aac7c6b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
325 (eval-last-sexp t)
5abb8aac7c6b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
326 (terpri)))
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
329 "Evaluate sexp before point; print value in minibuffer.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
43cdaf2db624 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 248
diff changeset
338 (save-excursion
43cdaf2db624 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 248
diff changeset
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
43cdaf2db624 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 248
diff changeset
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
c205d560cc22 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 878
diff changeset
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
c205d560cc22 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 878
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
402 ((and (eq (car form) 'custom-declare-variable)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
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
287cf3ae183a *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 214
diff changeset
412 "Evaluate defun that point is in or before.
24895
485668a57232 (eval-defun): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 23738
diff changeset
413 The value is displayed in the minibuffer.
485668a57232 (eval-defun): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 23738
diff changeset
414 If the current defun is actually a call to `defvar',
485668a57232 (eval-defun): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 23738
diff changeset
415 then reset the variable using the initial value expression
485668a57232 (eval-defun): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 23738
diff changeset
416 even if the variable already has some other value.
485668a57232 (eval-defun): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 23738
diff changeset
417 \(Normally `defvar' does not change the variable's value
485668a57232 (eval-defun): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 23738
diff changeset
418 if it already has a value.\)
485668a57232 (eval-defun): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 23738
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
2aa414a532f2 (eval-defun): Re-written to avoid
Dave Love <fx@gnu.org>
parents: 24895
diff changeset
450 ;; The result of evaluation has been put onto VALUES. So return it.
2aa414a532f2 (eval-defun): Re-written to avoid
Dave Love <fx@gnu.org>
parents: 24895
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
484
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
485 (defun lisp-comment-indent ()
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
486 (if (looking-at "\\s<\\s<\\s<")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
487 (current-column)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
490 (if (listp tem) (car tem) tem))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
491 (skip-chars-backward " \t")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
492 (max (if (bolp) 0 (1+ (current-column)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
493 comment-column))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
506 (defvar lisp-indent-offset nil)
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
507 (defvar lisp-indent-function 'lisp-indent-function)
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
508
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
509 (defun lisp-indent-line (&optional whole-exp)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
510 "Indent current line as Lisp code.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
511 With argument, indent any additional lines of the same expression
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
512 rigidly along with this one."
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
513 (interactive "P")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
514 (let ((indent (calculate-lisp-indent)) shift-amt beg end
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
515 (pos (- (point-max) (point))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
516 (beginning-of-line)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
517 (setq beg (point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
523 (if (and (looking-at "\\s<") (not (looking-at "\\s<\\s<")))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
524 ;; Single-semicolon comment lines should be indented
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
525 ;; as comment lines, not as code.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
526 (progn (indent-for-comment) (forward-char -1))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
527 (if (listp indent) (setq indent (car indent)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
528 (setq shift-amt (- indent (current-column)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
529 (if (zerop shift-amt)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
530 nil
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
531 (delete-region beg (point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
532 (indent-to indent)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
533 ;; If initial point was within line's indentation,
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
534 ;; position after the indentation. Else stay at same point in text.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
535 (if (> (- (point-max) pos) (point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
536 (goto-char (- (point-max) pos)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
537 ;; If desired, shift remaining lines of expression the same amount.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
538 (and whole-exp (not (zerop shift-amt))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
539 (save-excursion
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
540 (goto-char beg)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
541 (forward-sexp 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
542 (setq end (point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
543 (goto-char beg)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
544 (forward-line 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
545 (setq beg (point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
546 (> end beg))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
547 (indent-code-rigidly beg end shift-amt)))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
551 (defun calculate-lisp-indent (&optional parse-start)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
552 "Return appropriate indentation for current line as Lisp code.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
562 (save-excursion
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
563 (beginning-of-line)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
564 (let ((indent-point (point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
565 state paren-depth
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
566 ;; setting this to a number inhibits calling hook
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
567 (desired-indent nil)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
570 (if parse-start
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
571 (goto-char parse-start)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
572 (beginning-of-defun))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
573 ;; Find outermost containing sexp
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
574 (while (< (point) indent-point)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
575 (setq state (parse-partial-sexp (point) indent-point 0)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
576 ;; Find innermost containing sexp
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
577 (while (and retry
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
578 state
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
579 (> (setq paren-depth (elt state 0)) 0))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
582 (setq containing-sexp (elt state 1))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
583 ;; Position following last unclosed open.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
584 (goto-char (1+ containing-sexp))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
591 (if (setq retry (car (cdr peek))) (setq state peek)))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
592 (if retry
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
593 nil
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
594 ;; Innermost containing sexp found
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
597 ;; indent-point immediately follows open paren.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
598 ;; Don't call hook.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
599 (setq desired-indent (current-column))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
602 (cond ((looking-at "\\s(")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
603 ;; First element of containing sexp is a list.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
604 ;; Indent under that list.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
605 )
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
608 ;; This is the first line to start within the containing sexp.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
611 ;; Containing sexp has nothing before this line
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
612 ;; except the first element. Indent under that element.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
613 nil
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
614 ;; Skip the first element, find start of second (the first
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
615 ;; argument of the function call) and indent under.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
620 (backward-prefix-chars))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
629 (backward-prefix-chars)))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
632 ;; or if the desired indentation has already been computed.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
633 (let ((normal-indent (current-column)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
634 (cond ((elt state 3)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
637 ((and (integerp lisp-indent-offset) containing-sexp)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
638 ;; Indent by constant offset
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
639 (goto-char containing-sexp)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
640 (+ (current-column) lisp-indent-offset))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
641 (desired-indent)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
642 ((and (boundp 'lisp-indent-function)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
643 lisp-indent-function
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
644 (not retry))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
645 (or (funcall lisp-indent-function indent-point state)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
646 normal-indent))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
647 (t
214
a1430f8459e5 *** empty log message ***
Brian Preble <rassilon@gnu.org>
parents: 213
diff changeset
648 normal-indent))))))
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
649
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
650 (defun lisp-indent-function (indent-point state)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
651 (let ((normal-indent (current-column)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
654 (if (and (elt state 2)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
655 (not (looking-at "\\sw\\|\\s_")))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
656 ;; car of form doesn't seem to be a a symbol
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
657 (progn
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
668 (backward-prefix-chars)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
669 (current-column))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
670 (let ((function (buffer-substring (point)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
671 (progn (forward-sexp 1) (point))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
675 (cond ((or (eq method 'defun)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
676 (and (null method)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
677 (> (length function) 3)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
678 (string-match "\\`def" function)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
679 (lisp-indent-defform state indent-point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
680 ((integerp method)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
681 (lisp-indent-specform method state
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
682 indent-point normal-indent))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
683 (method
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
684 (funcall method state indent-point)))))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
688
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
689 (defun lisp-indent-specform (count state indent-point normal-indent)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
690 (let ((containing-form-start (elt state 1))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
691 (i count)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
692 body-indent containing-form-column)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
693 ;; Move to the start of containing form, calculate indentation
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
694 ;; to use for non-distinguished forms (> count), and move past the
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
695 ;; function symbol. lisp-indent-function guarantees that there is at
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
696 ;; least one word or symbol character following open paren of containing
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
697 ;; form.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
698 (goto-char containing-form-start)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
699 (setq containing-form-column (current-column))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
700 (setq body-indent (+ lisp-body-indent containing-form-column))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
701 (forward-char 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
702 (forward-sexp 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
703 ;; Now find the start of the last form.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
704 (parse-partial-sexp (point) indent-point 1 t)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
705 (while (and (< (point) indent-point)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
706 (condition-case ()
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
707 (progn
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
708 (setq count (1- count))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
709 (forward-sexp 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
710 (parse-partial-sexp (point) indent-point 1 t))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
711 (error nil))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
712 ;; Point is sitting on first character of last (or count) sexp.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
713 (if (> count 0)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
714 ;; A distinguished form. If it is the first or second form use double
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
715 ;; lisp-body-indent, else normal indent. With lisp-body-indent bound
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
716 ;; to 2 (the default), this just happens to work the same with if as
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
717 ;; the older code, but it makes unwind-protect, condition-case,
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
718 ;; with-output-to-temp-buffer, et. al. much more tasteful. The older,
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
719 ;; less hacked, behavior can be obtained by replacing below with
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
720 ;; (list normal-indent containing-form-start).
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
721 (if (<= (- i count) 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
722 (list (+ containing-form-column (* 2 lisp-body-indent))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
723 containing-form-start)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
724 (list normal-indent containing-form-start))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
725 ;; A non-distinguished form. Use body-indent if there are no
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
726 ;; distinguished forms and this is the first undistinguished form,
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
727 ;; or if this is the first undistinguished form and the preceding
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
728 ;; distinguished form has indentation at least as great as body-indent.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
729 (if (or (and (= i 0) (= count 0))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
730 (and (= count 0) (<= body-indent normal-indent)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
731 body-indent
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
732 normal-indent))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
733
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
734 (defun lisp-indent-defform (state indent-point)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
735 (goto-char (car (cdr state)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
736 (forward-line 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
737 (if (> (point) (car (cdr (cdr state))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
738 (progn
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
739 (goto-char (car (cdr state)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
740 (+ lisp-body-indent (current-column)))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
741
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
742
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
743 ;; (put 'progn 'lisp-indent-function 0), say, causes progn to be indented
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
744 ;; like defun if the first form is placed on the next line, otherwise
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
745 ;; it is indented like any other form (i.e. forms line up under first).
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
746
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
747 (put 'lambda 'lisp-indent-function 'defun)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
748 (put 'autoload 'lisp-indent-function 'defun)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
749 (put 'progn 'lisp-indent-function 0)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
750 (put 'prog1 'lisp-indent-function 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
751 (put 'prog2 'lisp-indent-function 2)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
752 (put 'save-excursion 'lisp-indent-function 0)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
755 (put 'save-restriction 'lisp-indent-function 0)
1163
c205d560cc22 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 878
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
765 (put 'let 'lisp-indent-function 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
766 (put 'let* 'lisp-indent-function 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
767 (put 'while 'lisp-indent-function 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
768 (put 'if 'lisp-indent-function 2)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
769 (put 'catch 'lisp-indent-function 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
770 (put 'condition-case 'lisp-indent-function 2)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
771 (put 'unwind-protect 'lisp-indent-function 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
778
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
779 (defun indent-sexp (&optional endpos)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
780 "Indent each line of the list starting just after point.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
781 If optional arg ENDPOS is given, indent each line, stopping when
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
782 ENDPOS is encountered."
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
783 (interactive)
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 677
diff changeset
784 (let ((indent-stack (list nil))
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 677
diff changeset
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
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 677
diff changeset
792 (last-point (point))
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 677
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
797 (save-excursion
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
798 (setq outer-loop-done nil)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
799 (while (if endpos (< (point) endpos)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
800 (not outer-loop-done))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
801 (setq last-depth next-depth
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
802 inner-loop-done nil)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
803 ;; Parse this line so we can learn the state
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
804 ;; to indent the next line.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
805 ;; This inner loop goes through only once
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
806 ;; unless a line ends inside a string.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
807 (while (and (not inner-loop-done)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
808 (not (setq outer-loop-done (eobp))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
809 (setq state (parse-partial-sexp (point) (progn (end-of-line) (point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
810 nil nil state))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
811 (setq next-depth (car state))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
812 ;; If the line contains a comment other than the sort
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
813 ;; that is indented like code,
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
814 ;; indent it now with indent-for-comment.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
815 ;; Comments indented like code are right already.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
816 ;; In any case clear the in-comment flag in the state
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
817 ;; because parse-partial-sexp never sees the newlines.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
818 (if (car (nthcdr 4 state))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
819 (progn (indent-for-comment)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
820 (end-of-line)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
821 (setcar (nthcdr 4 state) nil)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
822 ;; If this line ends inside a string,
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
823 ;; go straight to next line, remaining within the inner loop,
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
824 ;; and turn off the \-flag.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
825 (if (car (nthcdr 3 state))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
826 (progn
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
827 (forward-line 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
828 (setcar (nthcdr 5 state) nil))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
829 (setq inner-loop-done t)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
830 (and endpos
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 677
diff changeset
831 (<= next-depth 0)
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 677
diff changeset
832 (progn
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 677
diff changeset
833 (setq indent-stack (append indent-stack
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 677
diff changeset
834 (make-list (- next-depth) nil))
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 677
diff changeset
835 last-depth (- last-depth next-depth)
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 677
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
838 (setq outer-loop-done (<= next-depth 0)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
841 (while (> last-depth next-depth)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
842 (setq indent-stack (cdr indent-stack)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
843 last-depth (1- last-depth)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
844 (while (< last-depth next-depth)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
845 (setq indent-stack (cons nil indent-stack)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
846 last-depth (1+ last-depth)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
847 ;; Now go to the next line and indent it according
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
848 ;; to what we learned from parsing the previous one.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
849 (forward-line 1)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
850 (setq bol (point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
851 (skip-chars-forward " \t")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
852 ;; But not if the line is blank, or just a comment
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
853 ;; (except for double-semi comments; indent them as usual).
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
854 (if (or (eobp) (looking-at "\\s<\\|\n"))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
855 nil
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
856 (if (and (car indent-stack)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
857 (>= (car indent-stack) 0))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
858 (setq this-indent (car indent-stack))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
859 (let ((val (calculate-lisp-indent
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
860 (if (car indent-stack) (- (car indent-stack))
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 677
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
870 (progn (delete-region bol (point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
871 (indent-to this-indent)))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
872 (or outer-loop-done
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
873 (setq outer-loop-done (= (point) last-point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
874 (setq last-point (point)))))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
875
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
876 (defun lisp-indent-region (start end)
27809
46468edab05e (emacs-lisp-mode-syntax-table)
Dave Love <fx@gnu.org>
parents: 27484
diff changeset
877 "Indent every line whose first char is between START and END inclusive."
213
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
878 (save-excursion
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
883 (indent-sexp endmark)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
884 (set-marker endmark nil))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
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
2816d2c192fb (lisp-fill-paragraph): Adjust
Dave Love <fx@gnu.org>
parents: 21116
diff changeset
937 ;; `paragraph-start' is set here (not in the buffer-local
2816d2c192fb (lisp-fill-paragraph): Adjust
Dave Love <fx@gnu.org>
parents: 21116
diff changeset
938 ;; variable so that `forward-paragraph' et al work as
2816d2c192fb (lisp-fill-paragraph): Adjust
Dave Love <fx@gnu.org>
parents: 21116
diff changeset
939 ;; expected) so that filling (doc) strings works sensibly.
2816d2c192fb (lisp-fill-paragraph): Adjust
Dave Love <fx@gnu.org>
parents: 21116
diff changeset
940 ;; Adding the opening paren to avoid the following sexp being
2816d2c192fb (lisp-fill-paragraph): Adjust
Dave Love <fx@gnu.org>
parents: 21116
diff changeset
941 ;; filled means that sexps generally aren't filled as normal
2816d2c192fb (lisp-fill-paragraph): Adjust
Dave Love <fx@gnu.org>
parents: 21116
diff changeset
942 ;; text, which is probably sensible. The `;' and `:' stop the
2816d2c192fb (lisp-fill-paragraph): Adjust
Dave Love <fx@gnu.org>
parents: 21116
diff changeset
943 ;; filled para at following comment lines and keywords
2816d2c192fb (lisp-fill-paragraph): Adjust
Dave Love <fx@gnu.org>
parents: 21116
diff changeset
944 ;; (typically in `defcustom').
2816d2c192fb (lisp-fill-paragraph): Adjust
Dave Love <fx@gnu.org>
parents: 21116
diff changeset
945 (let ((paragraph-start (concat paragraph-start
2816d2c192fb (lisp-fill-paragraph): Adjust
Dave Love <fx@gnu.org>
parents: 21116
diff changeset
946 "\\|\\s-*[\(;:\"]")))
2816d2c192fb (lisp-fill-paragraph): Adjust
Dave Love <fx@gnu.org>
parents: 21116
diff changeset
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
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
996 (defun indent-code-rigidly (start end arg &optional nochange-regexp)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
997 "Indent all lines of code, starting in the region, sideways by ARG columns.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
998 Does not affect lines starting inside comments or strings, assuming that
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
999 the start of the region is not inside them.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1000
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1001 Called from a program, takes args START, END, COLUMNS and NOCHANGE-REGEXP.
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1002 The last is a regexp which, if matched at the beginning of a line,
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1003 means don't indent that line."
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1004 (interactive "r\np")
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1005 (let (state)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1006 (save-excursion
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1007 (goto-char end)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1008 (setq end (point-marker))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1009 (goto-char start)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1010 (or (bolp)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1011 (setq state (parse-partial-sexp (point)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1012 (progn
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1013 (forward-line 1) (point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1014 nil nil state)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1015 (while (< (point) end)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1016 (or (car (nthcdr 3 state))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1017 (and nochange-regexp
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1018 (looking-at nochange-regexp))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1019 ;; If line does not start in string, indent it
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1020 (let ((indent (current-indentation)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1021 (delete-region (point) (progn (skip-chars-forward " \t") (point)))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1022 (or (eolp)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1023 (indent-to (max 0 (+ indent arg)) 0))))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1024 (setq state (parse-partial-sexp (point)
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1025 (progn
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1026 (forward-line 1) (point))
9fa9f6071bc1 Initial revision
Brian Preble <rassilon@gnu.org>
parents:
diff changeset
1027 nil nil state))))))
584
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 422
diff changeset
1028
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 422
diff changeset
1029 (provide 'lisp-mode)
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 422
diff changeset
1030
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
1031 ;;; lisp-mode.el ends here