annotate lisp/emacs-lisp/lisp.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 ed528bfe1b9e
children 72284d9d7a11
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: 215
diff changeset
1 ;;; lisp.el --- Lisp editing commands for Emacs
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 215
diff changeset
2
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
3 ;; Copyright (C) 1985, 1986, 1994, 2000 Free Software Foundation, Inc.
845
213978acbc1e entered into RCS
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: 659
diff changeset
5 ;; Maintainer: FSF
2247
2c7997f249eb Add or correct keywords
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 845
diff changeset
6 ;; Keywords: lisp, languages
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
7
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
9
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
225a5c57fe64 Initial revision
root <root>
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: 659
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
13 ;; any later version.
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
14
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
18 ;; GNU General Public License for more details.
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
19
225a5c57fe64 Initial revision
root <root>
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: 8996
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: 8996
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 8996
diff changeset
23 ;; Boston, MA 02111-1307, USA.
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
24
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
25 ;;; Commentary:
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
26
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 2823
diff changeset
27 ;; Lisp editing commands to go with Lisp major mode.
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
28
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
29 ;;; Code:
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
30
6369
881009b034b3 (defun-prompt-regexp): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6004
diff changeset
31 ;; Note that this variable is used by non-lisp modes too.
17665
b11021ca3525 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16494
diff changeset
32 (defcustom defun-prompt-regexp nil
6369
881009b034b3 (defun-prompt-regexp): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6004
diff changeset
33 "*Non-nil => regexp to ignore, before the character that starts a defun.
881009b034b3 (defun-prompt-regexp): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6004
diff changeset
34 This is only necessary if the opening paren or brace is not in column 0.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
35 See function `beginning-of-defun'."
19831
a517c846d04e (defun-prompt-regexp): Fix customize type.
Richard M. Stallman <rms@gnu.org>
parents: 19781
diff changeset
36 :type '(choice (const nil)
a517c846d04e (defun-prompt-regexp): Fix customize type.
Richard M. Stallman <rms@gnu.org>
parents: 19781
diff changeset
37 regexp)
17665
b11021ca3525 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16494
diff changeset
38 :group 'lisp)
6973
7aa70fb3afa8 (defun-prompt-regexp): Make this variable buffer-local.
Karl Heuer <kwzh@gnu.org>
parents: 6420
diff changeset
39 (make-variable-buffer-local 'defun-prompt-regexp)
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
40
17665
b11021ca3525 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16494
diff changeset
41 (defcustom parens-require-spaces t
b11021ca3525 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16494
diff changeset
42 "Non-nil => `insert-parentheses' should insert whitespace as needed."
b11021ca3525 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16494
diff changeset
43 :type 'boolean
b11021ca3525 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16494
diff changeset
44 :group 'lisp)
3733
c1c105ffdd0c (parens-dont-require-spaces): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
45
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
46 (defun forward-sexp (&optional arg)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
47 "Move forward across one balanced expression (sexp).
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
48 With ARG, do it that many times. Negative arg -N means
215
8b1123702915 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 133
diff changeset
49 move backward across N balanced expressions."
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
50 (interactive "p")
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
51 (or arg (setq arg 1))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
52 (goto-char (or (scan-sexps (point) arg) (buffer-end arg)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
53 (if (< arg 0) (backward-prefix-chars)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
54
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
55 (defun backward-sexp (&optional arg)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
56 "Move backward across one balanced expression (sexp).
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
57 With ARG, do it that many times. Negative arg -N means
215
8b1123702915 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 133
diff changeset
58 move forward across N balanced expressions."
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
59 (interactive "p")
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
60 (or arg (setq arg 1))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
61 (forward-sexp (- arg)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
62
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
63 (defun mark-sexp (arg)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
64 "Set mark ARG sexps from point.
215
8b1123702915 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 133
diff changeset
65 The place mark goes is the same place \\[forward-sexp] would
8b1123702915 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 133
diff changeset
66 move to with the same argument."
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
67 (interactive "p")
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
68 (push-mark
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
69 (save-excursion
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
70 (forward-sexp arg)
2823
8ab0e280fbf0 (mark-sexp, mark-defun): Activate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
71 (point))
8ab0e280fbf0 (mark-sexp, mark-defun): Activate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
72 nil t))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
73
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
74 (defun forward-list (&optional arg)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
75 "Move forward across one balanced group of parentheses.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
76 With ARG, do it that many times.
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
77 Negative arg -N means move backward across N groups of parentheses."
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
78 (interactive "p")
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
79 (or arg (setq arg 1))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
80 (goto-char (or (scan-lists (point) arg 0) (buffer-end arg))))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
81
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
82 (defun backward-list (&optional arg)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
83 "Move backward across one balanced group of parentheses.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
84 With ARG, do it that many times.
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
85 Negative arg -N means move forward across N groups of parentheses."
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
86 (interactive "p")
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
87 (or arg (setq arg 1))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
88 (forward-list (- arg)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
89
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
90 (defun down-list (arg)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
91 "Move forward down one level of parentheses.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
92 With ARG, do this that many times.
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
93 A negative argument means move backward but still go down a level.
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
94 In Lisp programs, an argument is required."
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
95 (interactive "p")
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
96 (let ((inc (if (> arg 0) 1 -1)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
97 (while (/= arg 0)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
98 (goto-char (or (scan-lists (point) inc -1) (buffer-end arg)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
99 (setq arg (- arg inc)))))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
100
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
101 (defun backward-up-list (arg)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
102 "Move backward out of one level of parentheses.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
103 With ARG, do this that many times.
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
104 A negative argument means move forward but still to a less deep spot.
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
105 In Lisp programs, an argument is required."
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
106 (interactive "p")
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
107 (up-list (- arg)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
108
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
109 (defun up-list (arg)
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
110 "Move forward out of one level of parentheses.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
111 With ARG, do this that many times.
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
112 A negative argument means move backward but still to a less deep spot.
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
113 In Lisp programs, an argument is required."
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
114 (interactive "p")
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
115 (let ((inc (if (> arg 0) 1 -1)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
116 (while (/= arg 0)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
117 (goto-char (or (scan-lists (point) inc 1) (buffer-end arg)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
118 (setq arg (- arg inc)))))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
119
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
120 (defun kill-sexp (arg)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
121 "Kill the sexp (balanced expression) following the cursor.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
122 With ARG, kill that many sexps after the cursor.
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
123 Negative arg -N means kill N sexps before the cursor."
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
124 (interactive "p")
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
125 (let ((opoint (point)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
126 (forward-sexp arg)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
127 (kill-region opoint (point))))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
128
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
129 (defun backward-kill-sexp (arg)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
130 "Kill the sexp (balanced expression) preceding the cursor.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
131 With ARG, kill that many sexps before the cursor.
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
132 Negative arg -N means kill N sexps after the cursor."
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
133 (interactive "p")
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
134 (kill-sexp (- arg)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
135
27380
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
136 (defvar beginning-of-defun-function nil
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
137 "If non-nil, function for `beginning-of-defun-raw' to call.
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
138 This is used to find the beginning of the defun instead of using the
27380
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
139 normal recipe (see `beginning-of-defun'). Major modes can define this
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
140 if defining `defun-prompt-regexp' is not sufficient to handle the mode's
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
141 needs.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
142
27380
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
143 The function should go to the line on which the current defun starts,
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
144 and return non-nil, or should return nil if it can't find the beginning.")
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
145
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
146 (defun beginning-of-defun (&optional arg)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
147 "Move backward to the beginning of a defun.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
148 With ARG, do it that many times. Negative arg -N
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
149 means move forward to Nth following beginning of defun.
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
150 Returns t unless search stops due to beginning or end of buffer.
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
151
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
152 Normally a defun starts when there is an char with open-parenthesis
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
153 syntax at the beginning of a line. If `defun-prompt-regexp' is
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
154 non-nil, then a string which matches that regexp may precede the
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
155 open-parenthesis, and point ends up at the beginning of the line.
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
156
27380
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
157 If variable `beginning-of-defun-function' is non-nil, its value
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
158 is called as a function to find the defun's beginning."
6397
70bf65b6aae9 (beginning-of-defun-raw): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6396
diff changeset
159 (interactive "p")
70bf65b6aae9 (beginning-of-defun-raw): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6396
diff changeset
160 (and (beginning-of-defun-raw arg)
70bf65b6aae9 (beginning-of-defun-raw): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6396
diff changeset
161 (progn (beginning-of-line) t)))
70bf65b6aae9 (beginning-of-defun-raw): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6396
diff changeset
162
70bf65b6aae9 (beginning-of-defun-raw): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6396
diff changeset
163 (defun beginning-of-defun-raw (&optional arg)
70bf65b6aae9 (beginning-of-defun-raw): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6396
diff changeset
164 "Move point to the character that starts a defun.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
165 This is identical to function `beginning-of-defun', except that point
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
166 does not move to the beginning of the line when `defun-prompt-regexp'
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
167 is non-nil.
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
168
27380
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
169 If variable `beginning-of-defun-function' is non-nil, its value
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
170 is called as a function to find the defun's beginning."
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
171 (interactive "p")
27380
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
172 (if beginning-of-defun-function
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
173 (funcall beginning-of-defun-function)
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
174 (and arg (< arg 0) (not (eobp)) (forward-char 1))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
175 (and (re-search-backward (if defun-prompt-regexp
28299
ed528bfe1b9e (beginning-of-defun-raw): Add regexp
Gerd Moellmann <gerd@gnu.org>
parents: 27380
diff changeset
176 (concat (if open-paren-in-column-0-is-defun-start
ed528bfe1b9e (beginning-of-defun-raw): Add regexp
Gerd Moellmann <gerd@gnu.org>
parents: 27380
diff changeset
177 "^\\s(\\|" "")
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
178 "\\(" defun-prompt-regexp "\\)\\s(")
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
179 "^\\s(")
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
180 nil 'move (or arg 1))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
181 (progn (goto-char (1- (match-end 0)))) t)))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
182
27380
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
183 (defvar end-of-defun-function nil
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
184 "If non-nil, function for function `end-of-defun' to call.
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
185 This is used to find the end of the defun instead of using the normal
27380
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
186 recipe (see `end-of-defun'). Major modes can define this if the
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
187 normal method is not appropriate.")
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
188
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
189 (defun buffer-end (arg)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
190 (if (> arg 0) (point-max) (point-min)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
191
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
192 (defun end-of-defun (&optional arg)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
193 "Move forward to next end of defun. With argument, do it that many times.
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
194 Negative argument -N means move back to Nth preceding end of defun.
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
195
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
196 An end of a defun occurs right after the close-parenthesis that
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
197 matches the open-parenthesis that starts a defun; see function
27380
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
198 `beginning-of-defun'.
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
199
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
200 If variable `end-of-defun-function' is non-nil, its value
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
201 is called as a function to find the defun's end."
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
202 (interactive "p")
27380
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
203 (if end-of-defun-function
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
204 (funcall end-of-defun-function)
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
205 (if (or (null arg) (= arg 0)) (setq arg 1))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
206 (let ((first t))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
207 (while (and (> arg 0) (< (point) (point-max)))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
208 (let ((pos (point)) npos)
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
209 (while (progn
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
210 (if (and first
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
211 (progn
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
212 (end-of-line 1)
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
213 (beginning-of-defun-raw 1)))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
214 nil
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
215 (or (bobp) (forward-char -1))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
216 (beginning-of-defun-raw -1))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
217 (setq first nil)
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
218 (forward-list 1)
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
219 (skip-chars-forward " \t")
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
220 (if (looking-at "\\s<\\|\n")
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
221 (forward-line 1))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
222 (<= (point) pos))))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
223 (setq arg (1- arg)))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
224 (while (< arg 0)
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
225 (let ((pos (point)))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
226 (beginning-of-defun-raw 1)
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
227 (forward-sexp 1)
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
228 (forward-line 1)
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
229 (if (>= (point) pos)
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
230 (if (beginning-of-defun-raw 2)
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
231 (progn
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
232 (forward-list 1)
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
233 (skip-chars-forward " \t")
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
234 (if (looking-at "\\s<\\|\n")
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
235 (forward-line 1)))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
236 (goto-char (point-min)))))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
237 (setq arg (1+ arg))))))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
238
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
239 (defun mark-defun ()
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
240 "Put mark at end of this defun, point at beginning.
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
241 The defun marked is the one that contains point or follows point."
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
242 (interactive)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
243 (push-mark (point))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
244 (end-of-defun)
2823
8ab0e280fbf0 (mark-sexp, mark-defun): Activate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
245 (push-mark (point) nil t)
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
246 (beginning-of-defun)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
247 (re-search-backward "^\n" (- (point) 1) t))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
248
15971
9e9c14ecf6e1 (narrow-to-defun): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
249 (defun narrow-to-defun (&optional arg)
9e9c14ecf6e1 (narrow-to-defun): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
250 "Make text outside current defun invisible.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
251 The defun visible is the one that contains point or follows point.
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
252 Optional ARG is ignored."
15971
9e9c14ecf6e1 (narrow-to-defun): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
253 (interactive)
9e9c14ecf6e1 (narrow-to-defun): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
254 (save-excursion
9e9c14ecf6e1 (narrow-to-defun): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
255 (widen)
16410
454a13718b1f (narrow-to-defun): Narrow to the same defun that `mark-defun' would make
Erik Naggum <erik@naggum.no>
parents: 15971
diff changeset
256 (end-of-defun)
454a13718b1f (narrow-to-defun): Narrow to the same defun that `mark-defun' would make
Erik Naggum <erik@naggum.no>
parents: 15971
diff changeset
257 (let ((end (point)))
454a13718b1f (narrow-to-defun): Narrow to the same defun that `mark-defun' would make
Erik Naggum <erik@naggum.no>
parents: 15971
diff changeset
258 (beginning-of-defun)
454a13718b1f (narrow-to-defun): Narrow to the same defun that `mark-defun' would make
Erik Naggum <erik@naggum.no>
parents: 15971
diff changeset
259 (narrow-to-region (point) end))))
15971
9e9c14ecf6e1 (narrow-to-defun): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
260
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
261 (defun insert-parentheses (arg)
16410
454a13718b1f (narrow-to-defun): Narrow to the same defun that `mark-defun' would make
Erik Naggum <erik@naggum.no>
parents: 15971
diff changeset
262 "Enclose following ARG sexps in parentheses. Leave point after open-paren.
454a13718b1f (narrow-to-defun): Narrow to the same defun that `mark-defun' would make
Erik Naggum <erik@naggum.no>
parents: 15971
diff changeset
263 A negative ARG encloses the preceding ARG sexps instead.
3733
c1c105ffdd0c (parens-dont-require-spaces): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
264 No argument is equivalent to zero: just insert `()' and leave point between.
5838
1f201e9b48ff (insert-parentheses): Doc mod.
Karl Heuer <kwzh@gnu.org>
parents: 3758
diff changeset
265 If `parens-require-spaces' is non-nil, this command also inserts a space
1f201e9b48ff (insert-parentheses): Doc mod.
Karl Heuer <kwzh@gnu.org>
parents: 3758
diff changeset
266 before and after, depending on the surrounding characters."
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
267 (interactive "P")
133
2f5b3f50773d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 119
diff changeset
268 (if arg (setq arg (prefix-numeric-value arg))
2f5b3f50773d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 119
diff changeset
269 (setq arg 0))
16410
454a13718b1f (narrow-to-defun): Narrow to the same defun that `mark-defun' would make
Erik Naggum <erik@naggum.no>
parents: 15971
diff changeset
270 (cond ((> arg 0) (skip-chars-forward " \t"))
454a13718b1f (narrow-to-defun): Narrow to the same defun that `mark-defun' would make
Erik Naggum <erik@naggum.no>
parents: 15971
diff changeset
271 ((< arg 0) (forward-sexp arg) (setq arg (- arg))))
3758
e212a0863773 (parens-require-spaces): Var renamed and sense changed.
Richard M. Stallman <rms@gnu.org>
parents: 3733
diff changeset
272 (and parens-require-spaces
8996
06a5ceb0fb21 (insert-parentheses): Don't insert spaces at beginning and end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 8205
diff changeset
273 (not (bobp))
3733
c1c105ffdd0c (parens-dont-require-spaces): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
274 (memq (char-syntax (preceding-char)) '(?w ?_ ?\) ))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
275 (insert " "))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
276 (insert ?\()
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
277 (save-excursion
133
2f5b3f50773d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 119
diff changeset
278 (or (eq arg 0) (forward-sexp arg))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
279 (insert ?\))
3758
e212a0863773 (parens-require-spaces): Var renamed and sense changed.
Richard M. Stallman <rms@gnu.org>
parents: 3733
diff changeset
280 (and parens-require-spaces
8996
06a5ceb0fb21 (insert-parentheses): Don't insert spaces at beginning and end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 8205
diff changeset
281 (not (eobp))
3733
c1c105ffdd0c (parens-dont-require-spaces): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
282 (memq (char-syntax (following-char)) '(?w ?_ ?\( ))
133
2f5b3f50773d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 119
diff changeset
283 (insert " "))))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
284
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
285 (defun move-past-close-and-reindent ()
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
286 "Move past next `)', delete indentation before it, then indent after it."
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
287 (interactive)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
288 (up-list 1)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
289 (forward-char -1)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
290 (while (save-excursion ; this is my contribution
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
291 (let ((before-paren (point)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
292 (back-to-indentation)
19781
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
293 (and (= (point) before-paren)
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
294 (progn
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
295 ;; Move to end of previous line.
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
296 (beginning-of-line)
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
297 (forward-char -1)
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
298 ;; Verify it doesn't end within a string or comment.
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
299 (let ((end (point))
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
300 state)
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
301 (beginning-of-line)
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
302 ;; Get state at start of line.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
303 (setq state (list 0 nil nil
19781
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
304 (null (calculate-lisp-indent))
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
305 nil nil nil nil
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
306 nil))
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
307 ;; Parse state across the line to get state at end.
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
308 (setq state (parse-partial-sexp (point) end nil nil
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
309 state))
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
310 ;; Check not in string or comment.
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
311 (and (not (elt state 3)) (not (elt state 4))))))))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
312 (delete-indentation))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
313 (forward-char 1)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
314 (newline-and-indent))
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
315
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
316 (defun check-parens () ; lame name?
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
317 "Check for unbalanced parentheses in the current buffer.
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
318 More accurately, check the narrowed part of the buffer for unbalanced
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
319 expressions (\"sexps\") in general. This is done according to the
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
320 current syntax table and will find unbalanced brackets or quotes as
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
321 appropriate. (See Info node `(emacs)Lists and Sexps'.) If imbalance
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
322 is found, an error is signalled and point is left at the first
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
323 unbalanced character."
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
324 (interactive)
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
325 (condition-case data
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
326 ;; Buffer can't have more than (point-max) sexps.
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
327 (scan-sexps (point-min) (point-max))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
328 (scan-error (goto-char (nth 2 data))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
329 ;; Could print (nth 1 data), which is either
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
330 ;; "Containing expression ends prematurely" or
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
331 ;; "Unbalanced parentheses", but those may not be so
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
332 ;; accurate/helpful, e.g. quotes may actually be
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
333 ;; mismatched.
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
334 (error "Unmatched bracket or quote"))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
335 (error (cond ((eq 'scan-error (car data))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
336 (goto-char (nth 2 data))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
337 (error "Unmatched bracket or quote"))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
338 (t (signal (car data) (cdr data)))))))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
339
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
340 (defun lisp-complete-symbol ()
6004
4fa3d631dae8 (lisp-complete-symbol): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5981
diff changeset
341 "Perform completion on Lisp symbol preceding point.
4fa3d631dae8 (lisp-complete-symbol): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5981
diff changeset
342 Compare that symbol against the known Lisp symbols.
4fa3d631dae8 (lisp-complete-symbol): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5981
diff changeset
343
4fa3d631dae8 (lisp-complete-symbol): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5981
diff changeset
344 The context determines which symbols are considered.
4fa3d631dae8 (lisp-complete-symbol): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5981
diff changeset
345 If the symbol starts just after an open-parenthesis, only symbols
215
8b1123702915 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 133
diff changeset
346 with function definitions are considered. Otherwise, all symbols with
8b1123702915 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 133
diff changeset
347 function definitions, values or properties are considered."
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
348 (interactive)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
349 (let* ((end (point))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
350 (buffer-syntax (syntax-table))
119
7cfabf2a8964 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 84
diff changeset
351 (beg (unwind-protect
7cfabf2a8964 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 84
diff changeset
352 (save-excursion
7cfabf2a8964 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 84
diff changeset
353 (set-syntax-table emacs-lisp-mode-syntax-table)
7cfabf2a8964 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 84
diff changeset
354 (backward-sexp 1)
7cfabf2a8964 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 84
diff changeset
355 (while (= (char-syntax (following-char)) ?\')
7cfabf2a8964 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 84
diff changeset
356 (forward-char 1))
7cfabf2a8964 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 84
diff changeset
357 (point))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
358 (set-syntax-table buffer-syntax)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
359 (pattern (buffer-substring beg end))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
360 (predicate
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
361 (if (eq (char-after (1- beg)) ?\()
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
362 'fboundp
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
363 (function (lambda (sym)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
364 (or (boundp sym) (fboundp sym)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
365 (symbol-plist sym))))))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
366 (completion (try-completion pattern obarray predicate)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
367 (cond ((eq completion t))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
368 ((null completion)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
369 (message "Can't find completion for \"%s\"" pattern)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
370 (ding))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
371 ((not (string= pattern completion))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
372 (delete-region beg end)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
373 (insert completion))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
374 (t
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
375 (message "Making completion list...")
23451
4b8c40cf1931 (lisp-complete-symbol): Don't bind completion-fixup-function.
Richard M. Stallman <rms@gnu.org>
parents: 19831
diff changeset
376 (let ((list (all-completions pattern obarray predicate)))
16494
3f971c7163fb (lisp-complete-symbol): Sort the list.
Richard M. Stallman <rms@gnu.org>
parents: 16410
diff changeset
377 (setq list (sort list 'string<))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
378 (or (eq predicate 'fboundp)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
379 (let (new)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
380 (while list
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
381 (setq new (cons (if (fboundp (intern (car list)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
382 (list (car list) " <f>")
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
383 (car list))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
384 new))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
385 (setq list (cdr list)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
386 (setq list (nreverse new))))
7845
6f6b61216b0b (lisp-complete-symbol): Likewise.
Richard M. Stallman <rms@gnu.org>
parents: 7300
diff changeset
387 (with-output-to-temp-buffer "*Completions*"
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
388 (display-completion-list list)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
389 (message "Making completion list...%s" "done")))))
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 215
diff changeset
390
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 215
diff changeset
391 ;;; lisp.el ends here