annotate lisp/emacs-lisp/lisp.el @ 53879:e3771c262410

New file. Move original fringe related declarations and code from dispextern.h and xdisp.c here. Rework code to support user defined fringe bitmaps, redefining standard bitmaps, ability to overlay user defined bitmap with overlay arrow bitmap, and add faces to bitmaps. (Voverflow_newline_into_fringe): Declare here. (enum fringe_bitmap_align): New enum. (..._bits): All bitmaps are now defined without bitswapping; that is now done in init_fringe_once (if necessary). (standard_bitmaps): New array with specifications for the standard fringe bitmaps. (fringe_faces): New array. (valid_fringe_bitmap_id_p): New function. (draw_fringe_bitmap_1): Rename from draw_fringe_bitmap. (draw_fringe_bitmap): New function which draws fringe bitmap, possibly overlaying bitmap with cursor in right fringe or the overlay arrow in the left fringe. (update_window_fringes): Do not handle overlay arrow here. Compare and copy fringe bitmap faces. (init_fringe_bitmap): New function. (Fdefine_fringe_bitmap, Fdestroy_fringe_bitmap): New DEFUNs to define and destroy user defined fringe bitmaps. (Fset_fringe_bitmap_face): New DEFUN to set face for a fringe bitmap. (Ffringe_bitmaps_at_pos): New DEFUN to read current fringe bitmaps. (syms_of_fringe): New function. Defsubr new DEFUNs. DEFVAR_LISP Voverflow_newline_into_fringe. (init_fringe_once, init_fringe): New functions. (w32_init_fringe, w32_reset_fringes) [WINDOWS_NT]: New functions.
author Kim F. Storm <storm@cua.dk>
date Sun, 08 Feb 2004 23:18:16 +0000
parents 592ddd618234
children 95ee18354a3a
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
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
27 ;; Lisp editing commands to go with Lisp major mode. More-or-less
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
28 ;; applicable in other modes too.
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
29
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
30 ;;; Code:
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
31
6369
881009b034b3 (defun-prompt-regexp): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6004
diff changeset
32 ;; 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
33 (defcustom defun-prompt-regexp nil
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
34 "*If non-nil, a regexp to ignore before the character that starts a defun.
6369
881009b034b3 (defun-prompt-regexp): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6004
diff changeset
35 This is only necessary if the opening paren or brace is not in column 0.
32814
0d7e64a107e6 (defun-prompt-regexp): Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 32456
diff changeset
36 See function `beginning-of-defun'.
0d7e64a107e6 (defun-prompt-regexp): Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 32456
diff changeset
37
0d7e64a107e6 (defun-prompt-regexp): Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 32456
diff changeset
38 Setting this variable automatically makes it local to the current buffer."
19831
a517c846d04e (defun-prompt-regexp): Fix customize type.
Richard M. Stallman <rms@gnu.org>
parents: 19781
diff changeset
39 :type '(choice (const nil)
a517c846d04e (defun-prompt-regexp): Fix customize type.
Richard M. Stallman <rms@gnu.org>
parents: 19781
diff changeset
40 regexp)
17665
b11021ca3525 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16494
diff changeset
41 :group 'lisp)
6973
7aa70fb3afa8 (defun-prompt-regexp): Make this variable buffer-local.
Karl Heuer <kwzh@gnu.org>
parents: 6420
diff changeset
42 (make-variable-buffer-local 'defun-prompt-regexp)
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
43
17665
b11021ca3525 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16494
diff changeset
44 (defcustom parens-require-spaces t
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
45 "Non-nil means `insert-parentheses' should insert whitespace as needed."
17665
b11021ca3525 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16494
diff changeset
46 :type 'boolean
b11021ca3525 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16494
diff changeset
47 :group 'lisp)
3733
c1c105ffdd0c (parens-dont-require-spaces): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
48
31982
ed0ed1c70495 (lisp-complete-symbol):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30979
diff changeset
49 (defvar forward-sexp-function nil
ed0ed1c70495 (lisp-complete-symbol):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30979
diff changeset
50 "If non-nil, `forward-sexp' delegates to this function.
ed0ed1c70495 (lisp-complete-symbol):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30979
diff changeset
51 Should take the same arguments and behave similarly to `forward-sexp'.")
ed0ed1c70495 (lisp-complete-symbol):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30979
diff changeset
52
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
53 (defun forward-sexp (&optional arg)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
54 "Move forward across one balanced expression (sexp).
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
55 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
56 move backward across N balanced expressions."
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
57 (interactive "p")
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
58 (or arg (setq arg 1))
31982
ed0ed1c70495 (lisp-complete-symbol):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30979
diff changeset
59 (if forward-sexp-function
ed0ed1c70495 (lisp-complete-symbol):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30979
diff changeset
60 (funcall forward-sexp-function arg)
ed0ed1c70495 (lisp-complete-symbol):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30979
diff changeset
61 (goto-char (or (scan-sexps (point) arg) (buffer-end arg)))
ed0ed1c70495 (lisp-complete-symbol):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30979
diff changeset
62 (if (< arg 0) (backward-prefix-chars))))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
63
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
64 (defun backward-sexp (&optional arg)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
65 "Move backward across one balanced expression (sexp).
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
66 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
67 move forward across N balanced expressions."
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
68 (interactive "p")
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
69 (or arg (setq arg 1))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
70 (forward-sexp (- arg)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
71
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
72 (defun mark-sexp (&optional arg)
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
73 "Set mark ARG sexps from point.
215
8b1123702915 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 133
diff changeset
74 The place mark goes is the same place \\[forward-sexp] would
41291
b75e56ea3973 (mark-sexp): Mark more if repeated.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32814
diff changeset
75 move to with the same argument.
b75e56ea3973 (mark-sexp): Mark more if repeated.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32814
diff changeset
76 If this command is repeated, it marks the next ARG sexps after the ones
b75e56ea3973 (mark-sexp): Mark more if repeated.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32814
diff changeset
77 already marked."
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
78 (interactive "p")
43301
898b4b31410f * lisp/simple.el (mark-word): Mark more if repeated.
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42658
diff changeset
79 (cond ((and (eq last-command this-command) (mark t))
898b4b31410f * lisp/simple.el (mark-word): Mark more if repeated.
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42658
diff changeset
80 (set-mark
898b4b31410f * lisp/simple.el (mark-word): Mark more if repeated.
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42658
diff changeset
81 (save-excursion
898b4b31410f * lisp/simple.el (mark-word): Mark more if repeated.
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42658
diff changeset
82 (goto-char (mark))
898b4b31410f * lisp/simple.el (mark-word): Mark more if repeated.
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42658
diff changeset
83 (forward-sexp (or arg 1))
898b4b31410f * lisp/simple.el (mark-word): Mark more if repeated.
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42658
diff changeset
84 (point))))
898b4b31410f * lisp/simple.el (mark-word): Mark more if repeated.
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42658
diff changeset
85 (t
898b4b31410f * lisp/simple.el (mark-word): Mark more if repeated.
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42658
diff changeset
86 (push-mark
898b4b31410f * lisp/simple.el (mark-word): Mark more if repeated.
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42658
diff changeset
87 (save-excursion
898b4b31410f * lisp/simple.el (mark-word): Mark more if repeated.
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42658
diff changeset
88 (forward-sexp (or arg 1))
898b4b31410f * lisp/simple.el (mark-word): Mark more if repeated.
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42658
diff changeset
89 (point))
898b4b31410f * lisp/simple.el (mark-word): Mark more if repeated.
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42658
diff changeset
90 nil t))))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
91
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
92 (defun forward-list (&optional arg)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
93 "Move forward across one balanced group of parentheses.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
94 With ARG, do it that many times.
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
95 Negative arg -N means move backward across N groups of parentheses."
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
96 (interactive "p")
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
97 (or arg (setq arg 1))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
98 (goto-char (or (scan-lists (point) arg 0) (buffer-end arg))))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
99
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
100 (defun backward-list (&optional arg)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
101 "Move backward across one balanced group of parentheses.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
102 With ARG, do it that many times.
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
103 Negative arg -N means move forward across N groups of parentheses."
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
104 (interactive "p")
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
105 (or arg (setq arg 1))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
106 (forward-list (- arg)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
107
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
108 (defun down-list (&optional arg)
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
109 "Move forward down one level of parentheses.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
110 With ARG, do this that many times.
32456
ec203cfd2e41 (down-list, backward-up-list, up-list): Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 32047
diff changeset
111 A negative argument means move backward but still go down a level."
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
112 (interactive "p")
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
113 (or arg (setq arg 1))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
114 (let ((inc (if (> arg 0) 1 -1)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
115 (while (/= arg 0)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
116 (goto-char (or (scan-lists (point) inc -1) (buffer-end arg)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
117 (setq arg (- arg inc)))))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
118
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
119 (defun backward-up-list (&optional arg)
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
120 "Move backward out of one level of parentheses.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
121 With ARG, do this that many times.
32456
ec203cfd2e41 (down-list, backward-up-list, up-list): Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 32047
diff changeset
122 A negative argument means move forward but still to a less deep spot."
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
123 (interactive "p")
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
124 (up-list (- (or arg 1))))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
125
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
126 (defun up-list (&optional arg)
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
127 "Move forward out of one level of parentheses.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
128 With ARG, do this that many times.
32456
ec203cfd2e41 (down-list, backward-up-list, up-list): Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 32047
diff changeset
129 A negative argument means move backward but still to a less deep spot."
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
130 (interactive "p")
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
131 (or arg (setq arg 1))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
132 (let ((inc (if (> arg 0) 1 -1)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
133 (while (/= arg 0)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
134 (goto-char (or (scan-lists (point) inc 1) (buffer-end arg)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
135 (setq arg (- arg inc)))))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
136
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
137 (defun kill-sexp (&optional arg)
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
138 "Kill the sexp (balanced expression) following the cursor.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
139 With ARG, kill that many sexps after the cursor.
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
140 Negative arg -N means kill N sexps before the cursor."
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
141 (interactive "p")
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
142 (let ((opoint (point)))
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
143 (forward-sexp (or arg 1))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
144 (kill-region opoint (point))))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
145
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
146 (defun backward-kill-sexp (&optional arg)
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
147 "Kill the sexp (balanced expression) preceding the cursor.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
148 With ARG, kill that many sexps before the cursor.
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
149 Negative arg -N means kill N sexps after the cursor."
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
150 (interactive "p")
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
151 (kill-sexp (- (or arg 1))))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
152
27380
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
153 (defvar beginning-of-defun-function nil
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
154 "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
155 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
156 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
157 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
158 needs.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
159
52287
aece5dd1efda (beginning-of-defun-function): Doc fix.
Dave Love <fx@gnu.org>
parents: 51084
diff changeset
160 The function (of no args) should go to the line on which the current
aece5dd1efda (beginning-of-defun-function): Doc fix.
Dave Love <fx@gnu.org>
parents: 51084
diff changeset
161 defun starts, and return non-nil, or should return nil if it can't
aece5dd1efda (beginning-of-defun-function): Doc fix.
Dave Love <fx@gnu.org>
parents: 51084
diff changeset
162 find the beginning.")
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
163
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
164 (defun beginning-of-defun (&optional arg)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
165 "Move backward to the beginning of a defun.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
166 With ARG, do it that many times. Negative arg -N
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
167 means move forward to Nth following beginning of defun.
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
168 Returns t unless search stops due to beginning or end of buffer.
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
169
47924
d9a861a5b9d6 (beginning-of-defun): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 43384
diff changeset
170 Normally a defun starts when there is a char with open-parenthesis
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
171 syntax at the beginning of a line. If `defun-prompt-regexp' is
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
172 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
173 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
174
27380
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
175 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
176 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
177 (interactive "p")
70bf65b6aae9 (beginning-of-defun-raw): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6396
diff changeset
178 (and (beginning-of-defun-raw arg)
70bf65b6aae9 (beginning-of-defun-raw): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6396
diff changeset
179 (progn (beginning-of-line) t)))
70bf65b6aae9 (beginning-of-defun-raw): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6396
diff changeset
180
70bf65b6aae9 (beginning-of-defun-raw): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6396
diff changeset
181 (defun beginning-of-defun-raw (&optional arg)
70bf65b6aae9 (beginning-of-defun-raw): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6396
diff changeset
182 "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
183 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
184 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
185 is non-nil.
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
186
27380
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
187 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
188 is called as a function to find the defun's beginning."
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
189 (interactive "p")
27380
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
190 (if beginning-of-defun-function
53752
592ddd618234 (beginning-of-defun-raw, end-of-defun):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
191 (dotimes (i (or arg 1))
592ddd618234 (beginning-of-defun-raw, end-of-defun):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
192 (funcall beginning-of-defun-function))
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
193 (and arg (< arg 0) (not (eobp)) (forward-char 1))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
194 (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
195 (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
196 "^\\s(\\|" "")
51084
c27a29e35a85 (beginning-of-defun-raw): Use shy-group.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47924
diff changeset
197 "\\(?:" defun-prompt-regexp "\\)\\s(")
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
198 "^\\s(")
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
199 nil 'move (or arg 1))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
200 (progn (goto-char (1- (match-end 0)))) t)))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
201
27380
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
202 (defvar end-of-defun-function nil
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
203 "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
204 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
205 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
206 normal method is not appropriate.")
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
207
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
208 (defun buffer-end (arg)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
209 (if (> arg 0) (point-max) (point-min)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
210
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
211 (defun end-of-defun (&optional arg)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
212 "Move forward to next end of defun. With argument, do it that many times.
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
213 Negative argument -N means move back to Nth preceding end of defun.
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
214
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
215 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
216 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
217 `beginning-of-defun'.
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
218
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
219 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
220 is called as a function to find the defun's end."
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
221 (interactive "p")
27380
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
222 (if end-of-defun-function
53752
592ddd618234 (beginning-of-defun-raw, end-of-defun):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
223 (dotimes (i (or arg 1))
592ddd618234 (beginning-of-defun-raw, end-of-defun):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
224 (funcall end-of-defun-function))
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
225 (if (or (null arg) (= arg 0)) (setq arg 1))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
226 (let ((first t))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
227 (while (and (> arg 0) (< (point) (point-max)))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
228 (let ((pos (point)) npos)
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
229 (while (progn
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
230 (if (and first
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 (end-of-line 1)
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
233 (beginning-of-defun-raw 1)))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
234 nil
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
235 (or (bobp) (forward-char -1))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
236 (beginning-of-defun-raw -1))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
237 (setq first nil)
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
238 (forward-list 1)
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
239 (skip-chars-forward " \t")
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
240 (if (looking-at "\\s<\\|\n")
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
241 (forward-line 1))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
242 (<= (point) pos))))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
243 (setq arg (1- arg)))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
244 (while (< arg 0)
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
245 (let ((pos (point)))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
246 (beginning-of-defun-raw 1)
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
247 (forward-sexp 1)
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
248 (forward-line 1)
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
249 (if (>= (point) pos)
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
250 (if (beginning-of-defun-raw 2)
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
251 (progn
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
252 (forward-list 1)
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
253 (skip-chars-forward " \t")
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
254 (if (looking-at "\\s<\\|\n")
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
255 (forward-line 1)))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
256 (goto-char (point-min)))))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
257 (setq arg (1+ arg))))))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
258
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
259 (defun mark-defun ()
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
260 "Put mark at end of this defun, point at beginning.
43301
898b4b31410f * lisp/simple.el (mark-word): Mark more if repeated.
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42658
diff changeset
261 The defun marked is the one that contains point or follows point.
898b4b31410f * lisp/simple.el (mark-word): Mark more if repeated.
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42658
diff changeset
262 If this command is repeated, marks more defuns after the ones
898b4b31410f * lisp/simple.el (mark-word): Mark more if repeated.
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42658
diff changeset
263 already marked."
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
264 (interactive)
43384
cc3ba2d0d471 * emacs-lisp/lisp.el (mark-defun): Don't leave multiple marks
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 43301
diff changeset
265 (cond ((and (eq last-command this-command) (mark t))
cc3ba2d0d471 * emacs-lisp/lisp.el (mark-defun): Don't leave multiple marks
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 43301
diff changeset
266 (set-mark
cc3ba2d0d471 * emacs-lisp/lisp.el (mark-defun): Don't leave multiple marks
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 43301
diff changeset
267 (save-excursion
cc3ba2d0d471 * emacs-lisp/lisp.el (mark-defun): Don't leave multiple marks
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 43301
diff changeset
268 (goto-char (mark))
cc3ba2d0d471 * emacs-lisp/lisp.el (mark-defun): Don't leave multiple marks
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 43301
diff changeset
269 (end-of-defun)
cc3ba2d0d471 * emacs-lisp/lisp.el (mark-defun): Don't leave multiple marks
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 43301
diff changeset
270 (point))))
cc3ba2d0d471 * emacs-lisp/lisp.el (mark-defun): Don't leave multiple marks
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 43301
diff changeset
271 (t
53752
592ddd618234 (beginning-of-defun-raw, end-of-defun):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
272 ;; Do it in this order for the sake of languages with nested
592ddd618234 (beginning-of-defun-raw, end-of-defun):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
273 ;; functions where several can end at the same place as with
592ddd618234 (beginning-of-defun-raw, end-of-defun):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
274 ;; the offside rule, e.g. Python.
43384
cc3ba2d0d471 * emacs-lisp/lisp.el (mark-defun): Don't leave multiple marks
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 43301
diff changeset
275 (push-mark (point))
53752
592ddd618234 (beginning-of-defun-raw, end-of-defun):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
276 (beginning-of-defun)
592ddd618234 (beginning-of-defun-raw, end-of-defun):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
277 (push-mark (point) nil t)
43384
cc3ba2d0d471 * emacs-lisp/lisp.el (mark-defun): Don't leave multiple marks
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 43301
diff changeset
278 (end-of-defun)
53752
592ddd618234 (beginning-of-defun-raw, end-of-defun):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
279 (exchange-point-and-mark)
43384
cc3ba2d0d471 * emacs-lisp/lisp.el (mark-defun): Don't leave multiple marks
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 43301
diff changeset
280 (re-search-backward "^\n" (- (point) 1) t))))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
281
15971
9e9c14ecf6e1 (narrow-to-defun): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
282 (defun narrow-to-defun (&optional arg)
9e9c14ecf6e1 (narrow-to-defun): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
283 "Make text outside current defun invisible.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
284 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
285 Optional ARG is ignored."
15971
9e9c14ecf6e1 (narrow-to-defun): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
286 (interactive)
9e9c14ecf6e1 (narrow-to-defun): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
287 (save-excursion
9e9c14ecf6e1 (narrow-to-defun): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
288 (widen)
53752
592ddd618234 (beginning-of-defun-raw, end-of-defun):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
289 ;; Do it in this order for the sake of languages with nested
592ddd618234 (beginning-of-defun-raw, end-of-defun):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
290 ;; functions where several can end at the same place as with the
592ddd618234 (beginning-of-defun-raw, end-of-defun):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
291 ;; offside rule, e.g. Python.
592ddd618234 (beginning-of-defun-raw, end-of-defun):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
292 (beginning-of-defun)
592ddd618234 (beginning-of-defun-raw, end-of-defun):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
293 (let ((beg (point)))
592ddd618234 (beginning-of-defun-raw, end-of-defun):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
294 (end-of-defun)
592ddd618234 (beginning-of-defun-raw, end-of-defun):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
295 (narrow-to-region beg (point)))))
15971
9e9c14ecf6e1 (narrow-to-defun): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
296
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
297 (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
298 "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
299 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
300 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
301 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
302 before and after, depending on the surrounding characters."
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
303 (interactive "P")
133
2f5b3f50773d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 119
diff changeset
304 (if arg (setq arg (prefix-numeric-value arg))
2f5b3f50773d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 119
diff changeset
305 (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
306 (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
307 ((< 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
308 (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
309 (not (bobp))
3733
c1c105ffdd0c (parens-dont-require-spaces): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
310 (memq (char-syntax (preceding-char)) '(?w ?_ ?\) ))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
311 (insert " "))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
312 (insert ?\()
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
313 (save-excursion
133
2f5b3f50773d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 119
diff changeset
314 (or (eq arg 0) (forward-sexp arg))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
315 (insert ?\))
3758
e212a0863773 (parens-require-spaces): Var renamed and sense changed.
Richard M. Stallman <rms@gnu.org>
parents: 3733
diff changeset
316 (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
317 (not (eobp))
3733
c1c105ffdd0c (parens-dont-require-spaces): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
318 (memq (char-syntax (following-char)) '(?w ?_ ?\( ))
133
2f5b3f50773d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 119
diff changeset
319 (insert " "))))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
320
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
321 (defun move-past-close-and-reindent ()
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
322 "Move past next `)', delete indentation before it, then indent after it."
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
323 (interactive)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
324 (up-list 1)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
325 (forward-char -1)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
326 (while (save-excursion ; this is my contribution
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
327 (let ((before-paren (point)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
328 (back-to-indentation)
19781
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
329 (and (= (point) before-paren)
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
330 (progn
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
331 ;; Move to end of previous line.
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
332 (beginning-of-line)
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
333 (forward-char -1)
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
334 ;; 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
335 (let ((end (point))
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
336 state)
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
337 (beginning-of-line)
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
338 ;; Get state at start of line.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
339 (setq state (list 0 nil nil
19781
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
340 (null (calculate-lisp-indent))
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
341 nil nil nil nil
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
342 nil))
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
343 ;; 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
344 (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
345 state))
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
346 ;; Check not in string or comment.
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
347 (and (not (elt state 3)) (not (elt state 4))))))))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
348 (delete-indentation))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
349 (forward-char 1)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
350 (newline-and-indent))
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
351
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
352 (defun check-parens () ; lame name?
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
353 "Check for unbalanced parentheses in the current buffer.
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
354 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
355 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
356 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
357 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
358 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
359 unbalanced character."
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
360 (interactive)
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
361 (condition-case data
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
362 ;; Buffer can't have more than (point-max) sexps.
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
363 (scan-sexps (point-min) (point-max))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
364 (scan-error (goto-char (nth 2 data))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
365 ;; Could print (nth 1 data), which is either
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
366 ;; "Containing expression ends prematurely" or
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
367 ;; "Unbalanced parentheses", but those may not be so
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
368 ;; accurate/helpful, e.g. quotes may actually be
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
369 ;; mismatched.
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
370 (error "Unmatched bracket or quote"))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
371 (error (cond ((eq 'scan-error (car data))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
372 (goto-char (nth 2 data))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
373 (error "Unmatched bracket or quote"))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
374 (t (signal (car data) (cdr data)))))))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
375
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
376 (defun lisp-complete-symbol (&optional predicate)
6004
4fa3d631dae8 (lisp-complete-symbol): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5981
diff changeset
377 "Perform completion on Lisp symbol preceding point.
4fa3d631dae8 (lisp-complete-symbol): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5981
diff changeset
378 Compare that symbol against the known Lisp symbols.
42658
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
379 If no characters can be completed, display a list of possible completions.
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
380 Repeating the command at that point scrolls the list.
6004
4fa3d631dae8 (lisp-complete-symbol): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5981
diff changeset
381
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
382 When called from a program, optional arg PREDICATE is a predicate
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
383 determining which symbols are considered, e.g. `commandp'.
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
384 If PREDICATE is nil, the context determines which symbols are
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
385 considered. If the symbol starts just after an open-parenthesis, only
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
386 symbols with function definitions are considered. Otherwise, all
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
387 symbols with function definitions, values or properties are
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
388 considered."
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
389 (interactive)
42658
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
390
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
391 (let ((window (get-buffer-window "*Completions*")))
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
392 (if (and (eq last-command this-command)
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
393 window (window-live-p window) (window-buffer window)
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
394 (buffer-name (window-buffer window)))
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
395 ;; If this command was repeated, and
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
396 ;; there's a fresh completion window with a live buffer,
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
397 ;; and this command is repeated, scroll that window.
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
398 (with-current-buffer (window-buffer window)
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
399 (if (pos-visible-in-window-p (point-max) window)
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
400 (set-window-start window (point-min))
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
401 (save-selected-window
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
402 (select-window window)
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
403 (scroll-up))))
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
404
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
405 ;; Do completion.
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
406 (let* ((end (point))
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
407 (beg (with-syntax-table emacs-lisp-mode-syntax-table
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
408 (save-excursion
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
409 (backward-sexp 1)
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
410 (while (= (char-syntax (following-char)) ?\')
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
411 (forward-char 1))
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
412 (point))))
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
413 (pattern (buffer-substring-no-properties beg end))
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
414 (predicate
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
415 (or predicate
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
416 (save-excursion
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
417 (goto-char beg)
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
418 (if (not (eq (char-before) ?\())
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
419 (lambda (sym) ;why not just nil ? -sm
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
420 (or (boundp sym) (fboundp sym)
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
421 (symbol-plist sym)))
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
422 ;; Looks like a funcall position. Let's double check.
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
423 (if (condition-case nil
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
424 (progn (up-list -2) (forward-char 1)
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
425 (eq (char-after) ?\())
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
426 (error nil))
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
427 ;; If the first element of the parent list is an open
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
428 ;; parenthesis we are probably not in a funcall position.
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
429 ;; Maybe a `let' varlist or something.
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
430 nil
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
431 ;; Else, we assume that a function name is expected.
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
432 'fboundp)))))
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
433 (completion (try-completion pattern obarray predicate)))
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
434 (cond ((eq completion t))
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
435 ((null completion)
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
436 (message "Can't find completion for \"%s\"" pattern)
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
437 (ding))
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
438 ((not (string= pattern completion))
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
439 (delete-region beg end)
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
440 (insert completion))
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
441 (t
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
442 (message "Making completion list...")
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
443 (let ((list (all-completions pattern obarray predicate)))
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
444 (setq list (sort list 'string<))
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
445 (or (eq predicate 'fboundp)
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
446 (let (new)
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
447 (while list
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
448 (setq new (cons (if (fboundp (intern (car list)))
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
449 (list (car list) " <f>")
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
450 (car list))
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
451 new))
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
452 (setq list (cdr list)))
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
453 (setq list (nreverse new))))
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
454 (with-output-to-temp-buffer "*Completions*"
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
455 (display-completion-list list)))
c45e40c77be6 (lisp-complete-symbol): Repeating the command
Richard M. Stallman <rms@gnu.org>
parents: 41291
diff changeset
456 (message "Making completion list...%s" "done")))))))
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 215
diff changeset
457
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52287
diff changeset
458 ;;; arch-tag: aa7fa8a4-2e6f-4e9b-9cd9-fef06340e67e
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 215
diff changeset
459 ;;; lisp.el ends here