annotate lisp/emacs-lisp/lisp.el @ 110410:f2e111723c3a

Merge changes made in Gnus trunk. Reimplement nnimap, and do tweaks to the rest of the code to support that. * gnus-int.el (gnus-finish-retrieve-group-infos) (gnus-retrieve-group-data-early): New functions. * gnus-range.el (gnus-range-nconcat): New function. * gnus-start.el (gnus-get-unread-articles): Support early retrieval of data. (gnus-read-active-for-groups): Support finishing the early retrieval of data. * gnus-sum.el (gnus-summary-move-article): Pass the move-to group name if the move is internal, so that nnimap can do fast internal moves. * gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for nnimap usage. * nnimap.el: Rewritten. * nnmail.el (nnmail-inhibit-default-split-group): New internal variable to allow the mail splitting to not return a default group. This is useful for nnimap, which will leave unmatched mail in the inbox. * utf7.el (utf7-encode): Autoload. Implement shell connection. * nnimap.el (nnimap-open-shell-stream): New function. (nnimap-open-connection): Use it. Get the number of lines by using BODYSTRUCTURE. (nnimap-transform-headers): Get the number of lines in each message. (nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the number of lines. Not all servers return UIDNEXT. Work past this problem. Remove junk from end of file. Fix typo in "bogus" section. Make capabilties be case-insensitive. Require cl when compiling. Don't bug out if the LIST command doesn't have any parameters. 2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) * nnimap.el (nnimap-get-groups): Don't bug out if the LIST command doesn't have any parameters. (mm-text-html-renderer): Document gnus-article-html. 2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix) * mm-decode.el (mm-text-html-renderer): Document gnus-article-html. * dgnushack.el: Define netrc-credentials. If the user doesn't have a /etc/services, supply some sensible port defaults. Have `unseen-or-unread' select an unread unseen article first. (nntp-open-server): Return whether the open was successful or not. Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ). Save result so that it doesn't say "failed" all the time. Add ~/.authinfo to the default, since that's probably most useful for users. Don't use the "finish" method when we're reading from the agent. Add some more nnimap-relevant agent stuff to nnagent.el. * nnimap.el (nnimap-with-process-buffer): Removed. Revert one line that was changed by mistake in the last checkin. (nnimap-open-connection): Don't error out when we can't make a connection nnimap-related changes to avoid bugging out if we can't contact a server. * gnus-start.el (gnus-get-unread-articles): Don't try to scan groups from methods that are denied. * nnimap.el (nnimap-possibly-change-group): Return nil if we can't log in. (nnimap-finish-retrieve-group-infos): Make sure we're not waiting for nothing. * gnus-sum.el (gnus-select-newsgroup): Indent.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sat, 18 Sep 2010 10:02:19 +0000
parents 280c8ae2476d
children 0e1478bb5f00
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
74466
1d4b1a32fd66 Update copyright years.
Glenn Morris <rgm@gnu.org>
parents: 73832
diff changeset
3 ;; Copyright (C) 1985, 1986, 1994, 2000, 2001, 2002, 2003, 2004,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 106482
diff changeset
4 ;; 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
845
213978acbc1e entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 811
diff changeset
5
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
6 ;; Maintainer: FSF
2247
2c7997f249eb Add or correct keywords
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 845
diff changeset
7 ;; Keywords: lisp, languages
110015
280c8ae2476d Add "Package:" file headers to denote built-in packages.
Chong Yidong <cyd@stupidchicken.com>
parents: 109819
diff changeset
8 ;; Package: emacs
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
9
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
11
94655
90a2847062be Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93138
diff changeset
12 ;; GNU Emacs is free software: you can redistribute it and/or modify
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
94655
90a2847062be Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93138
diff changeset
14 ;; the Free Software Foundation, either version 3 of the License, or
90a2847062be Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93138
diff changeset
15 ;; (at your option) any later version.
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
16
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
20 ;; GNU General Public License for more details.
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
21
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
94655
90a2847062be Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93138
diff changeset
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
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
104024
cce8d50c4566 Remove leading * from defcustom docs.
Glenn Morris <rgm@gnu.org>
parents: 102381
diff changeset
34 "If non-nil, a regexp to ignore before 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.
61401
99b039f2f040 (defun-prompt-regexp, parens-require-spaces, buffer-end, end-of-defun)
Luc Teirlinck <teirllm@auburn.edu>
parents: 59940
diff changeset
36 See function `beginning-of-defun'."
19831
a517c846d04e (defun-prompt-regexp): Fix customize type.
Richard M. Stallman <rms@gnu.org>
parents: 19781
diff changeset
37 :type '(choice (const nil)
a517c846d04e (defun-prompt-regexp): Fix customize type.
Richard M. Stallman <rms@gnu.org>
parents: 19781
diff changeset
38 regexp)
17665
b11021ca3525 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16494
diff changeset
39 :group 'lisp)
6973
7aa70fb3afa8 (defun-prompt-regexp): Make this variable buffer-local.
Karl Heuer <kwzh@gnu.org>
parents: 6420
diff changeset
40 (make-variable-buffer-local 'defun-prompt-regexp)
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
41
17665
b11021ca3525 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16494
diff changeset
42 (defcustom parens-require-spaces t
92519
5ce65481d860 (parens-require-spaces): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 87649
diff changeset
43 "If non-nil, add whitespace as needed when inserting parentheses.
5ce65481d860 (parens-require-spaces): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 87649
diff changeset
44 This affects `insert-parentheses' and `insert-pair'."
17665
b11021ca3525 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16494
diff changeset
45 :type 'boolean
b11021ca3525 Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16494
diff changeset
46 :group 'lisp)
3733
c1c105ffdd0c (parens-dont-require-spaces): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
47
31982
ed0ed1c70495 (lisp-complete-symbol):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30979
diff changeset
48 (defvar forward-sexp-function nil
ed0ed1c70495 (lisp-complete-symbol):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30979
diff changeset
49 "If non-nil, `forward-sexp' delegates to this function.
ed0ed1c70495 (lisp-complete-symbol):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30979
diff changeset
50 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
51
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
52 (defun forward-sexp (&optional arg)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
53 "Move forward across one balanced expression (sexp).
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
54 With ARG, do it that many times. Negative arg -N means
99958
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
55 move backward across N balanced expressions.
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
56 This command assumes point is not in a string or comment."
101789
7d131969b5e2 Add "^" to interactive spec of sexp movement commands
Miles Bader <miles@gnu.org>
parents: 101715
diff changeset
57 (interactive "^p")
84
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
99958
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
67 move forward across N balanced expressions.
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
68 This command assumes point is not in a string or comment."
101789
7d131969b5e2 Add "^" to interactive spec of sexp movement commands
Miles Bader <miles@gnu.org>
parents: 101715
diff changeset
69 (interactive "^p")
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
70 (or arg (setq arg 1))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
71 (forward-sexp (- arg)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
72
59177
5188f5b11d56 (mark-sexp, mark-defun): New arg ALLOW-EXTEND
Richard M. Stallman <rms@gnu.org>
parents: 58962
diff changeset
73 (defun mark-sexp (&optional arg allow-extend)
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
74 "Set mark ARG sexps from point.
215
8b1123702915 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 133
diff changeset
75 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
76 move to with the same argument.
59177
5188f5b11d56 (mark-sexp, mark-defun): New arg ALLOW-EXTEND
Richard M. Stallman <rms@gnu.org>
parents: 58962
diff changeset
77 Interactively, if this command is repeated
61401
99b039f2f040 (defun-prompt-regexp, parens-require-spaces, buffer-end, end-of-defun)
Luc Teirlinck <teirllm@auburn.edu>
parents: 59940
diff changeset
78 or (in Transient Mark mode) if the mark is active,
99958
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
79 it marks the next ARG sexps after the ones already marked.
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
80 This command assumes point is not in a string or comment."
59177
5188f5b11d56 (mark-sexp, mark-defun): New arg ALLOW-EXTEND
Richard M. Stallman <rms@gnu.org>
parents: 58962
diff changeset
81 (interactive "P\np")
5188f5b11d56 (mark-sexp, mark-defun): New arg ALLOW-EXTEND
Richard M. Stallman <rms@gnu.org>
parents: 58962
diff changeset
82 (cond ((and allow-extend
5188f5b11d56 (mark-sexp, mark-defun): New arg ALLOW-EXTEND
Richard M. Stallman <rms@gnu.org>
parents: 58962
diff changeset
83 (or (and (eq last-command this-command) (mark t))
5188f5b11d56 (mark-sexp, mark-defun): New arg ALLOW-EXTEND
Richard M. Stallman <rms@gnu.org>
parents: 58962
diff changeset
84 (and transient-mark-mode mark-active)))
57457
8c6dae33cdc3 (mark-sexp): Preserve direction when repeating.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56924
diff changeset
85 (setq arg (if arg (prefix-numeric-value arg)
58918
2ee970dcd072 * emacs-lisp/lisp.el (beginning-of-defun, end-of-defun):
Juri Linkov <juri@jurta.org>
parents: 57457
diff changeset
86 (if (< (mark) (point)) -1 1)))
43301
898b4b31410f * lisp/simple.el (mark-word): Mark more if repeated.
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42658
diff changeset
87 (set-mark
898b4b31410f * lisp/simple.el (mark-word): Mark more if repeated.
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42658
diff changeset
88 (save-excursion
58918
2ee970dcd072 * emacs-lisp/lisp.el (beginning-of-defun, end-of-defun):
Juri Linkov <juri@jurta.org>
parents: 57457
diff changeset
89 (goto-char (mark))
2ee970dcd072 * emacs-lisp/lisp.el (beginning-of-defun, end-of-defun):
Juri Linkov <juri@jurta.org>
parents: 57457
diff changeset
90 (forward-sexp arg)
2ee970dcd072 * emacs-lisp/lisp.el (beginning-of-defun, end-of-defun):
Juri Linkov <juri@jurta.org>
parents: 57457
diff changeset
91 (point))))
43301
898b4b31410f * lisp/simple.el (mark-word): Mark more if repeated.
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42658
diff changeset
92 (t
898b4b31410f * lisp/simple.el (mark-word): Mark more if repeated.
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42658
diff changeset
93 (push-mark
898b4b31410f * lisp/simple.el (mark-word): Mark more if repeated.
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42658
diff changeset
94 (save-excursion
57457
8c6dae33cdc3 (mark-sexp): Preserve direction when repeating.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56924
diff changeset
95 (forward-sexp (prefix-numeric-value arg))
43301
898b4b31410f * lisp/simple.el (mark-word): Mark more if repeated.
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42658
diff changeset
96 (point))
898b4b31410f * lisp/simple.el (mark-word): Mark more if repeated.
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42658
diff changeset
97 nil t))))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
98
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
99 (defun forward-list (&optional arg)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
100 "Move forward across one balanced group of parentheses.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
101 With ARG, do it that many times.
99958
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
102 Negative arg -N means move backward across N groups of parentheses.
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
103 This command assumes point is not in a string or comment."
101789
7d131969b5e2 Add "^" to interactive spec of sexp movement commands
Miles Bader <miles@gnu.org>
parents: 101715
diff changeset
104 (interactive "^p")
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
105 (or arg (setq arg 1))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
106 (goto-char (or (scan-lists (point) arg 0) (buffer-end arg))))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
107
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
108 (defun backward-list (&optional arg)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
109 "Move backward across one balanced group of parentheses.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
110 With ARG, do it that many times.
99958
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
111 Negative arg -N means move forward across N groups of parentheses.
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
112 This command assumes point is not in a string or comment."
101789
7d131969b5e2 Add "^" to interactive spec of sexp movement commands
Miles Bader <miles@gnu.org>
parents: 101715
diff changeset
113 (interactive "^p")
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
114 (or arg (setq arg 1))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
115 (forward-list (- arg)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
116
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
117 (defun down-list (&optional arg)
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
118 "Move forward down one level of parentheses.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
119 With ARG, do this that many times.
99958
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
120 A negative argument means move backward but still go down a level.
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
121 This command assumes point is not in a string or comment."
101789
7d131969b5e2 Add "^" to interactive spec of sexp movement commands
Miles Bader <miles@gnu.org>
parents: 101715
diff changeset
122 (interactive "^p")
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
123 (or arg (setq arg 1))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
124 (let ((inc (if (> arg 0) 1 -1)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
125 (while (/= arg 0)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
126 (goto-char (or (scan-lists (point) inc -1) (buffer-end arg)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
127 (setq arg (- arg inc)))))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
128
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
129 (defun backward-up-list (&optional arg)
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
130 "Move backward out of one level of parentheses.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
131 With ARG, do this that many times.
99958
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
132 A negative argument means move forward but still to a less deep spot.
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
133 This command assumes point is not in a string or comment."
101789
7d131969b5e2 Add "^" to interactive spec of sexp movement commands
Miles Bader <miles@gnu.org>
parents: 101715
diff changeset
134 (interactive "^p")
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
135 (up-list (- (or arg 1))))
84
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 up-list (&optional arg)
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
138 "Move forward out of one level of parentheses.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
139 With ARG, do this that many times.
99958
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
140 A negative argument means move backward but still to a less deep spot.
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
141 This command assumes point is not in a string or comment."
101789
7d131969b5e2 Add "^" to interactive spec of sexp movement commands
Miles Bader <miles@gnu.org>
parents: 101715
diff changeset
142 (interactive "^p")
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
143 (or arg (setq arg 1))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
144 (let ((inc (if (> arg 0) 1 -1)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
145 (while (/= arg 0)
109819
7a3c2a989900 * lisp/emacs-lisp/lisp.el (up-list): Obey forward-sexp-function if set.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108375
diff changeset
146 (if forward-sexp-function
7a3c2a989900 * lisp/emacs-lisp/lisp.el (up-list): Obey forward-sexp-function if set.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108375
diff changeset
147 (condition-case err
7a3c2a989900 * lisp/emacs-lisp/lisp.el (up-list): Obey forward-sexp-function if set.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108375
diff changeset
148 (while (let ((pos (point)))
7a3c2a989900 * lisp/emacs-lisp/lisp.el (up-list): Obey forward-sexp-function if set.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108375
diff changeset
149 (forward-sexp inc)
7a3c2a989900 * lisp/emacs-lisp/lisp.el (up-list): Obey forward-sexp-function if set.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108375
diff changeset
150 (/= (point) pos)))
7a3c2a989900 * lisp/emacs-lisp/lisp.el (up-list): Obey forward-sexp-function if set.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108375
diff changeset
151 (scan-error (goto-char (nth 2 err))))
7a3c2a989900 * lisp/emacs-lisp/lisp.el (up-list): Obey forward-sexp-function if set.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108375
diff changeset
152 (goto-char (or (scan-lists (point) inc 1) (buffer-end arg))))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
153 (setq arg (- arg inc)))))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
154
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
155 (defun kill-sexp (&optional arg)
59602
99bf07f49031 (backward-kill-sexp, kill-sexp): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 59177
diff changeset
156 "Kill the sexp (balanced expression) following point.
99bf07f49031 (backward-kill-sexp, kill-sexp): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 59177
diff changeset
157 With ARG, kill that many sexps after point.
99958
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
158 Negative arg -N means kill N sexps before point.
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
159 This command assumes point is not in a string or comment."
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
160 (interactive "p")
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
161 (let ((opoint (point)))
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
162 (forward-sexp (or arg 1))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
163 (kill-region opoint (point))))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
164
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
165 (defun backward-kill-sexp (&optional arg)
59602
99bf07f49031 (backward-kill-sexp, kill-sexp): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 59177
diff changeset
166 "Kill the sexp (balanced expression) preceding point.
99bf07f49031 (backward-kill-sexp, kill-sexp): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 59177
diff changeset
167 With ARG, kill that many sexps before point.
99958
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
168 Negative arg -N means kill N sexps after point.
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
169 This command assumes point is not in a string or comment."
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
170 (interactive "p")
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
171 (kill-sexp (- (or arg 1))))
56924
bca93997a4d7 (kill-backward-up-list): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 56876
diff changeset
172
bca93997a4d7 (kill-backward-up-list): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 56876
diff changeset
173 ;; After Zmacs:
bca93997a4d7 (kill-backward-up-list): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 56876
diff changeset
174 (defun kill-backward-up-list (&optional arg)
bca93997a4d7 (kill-backward-up-list): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 56876
diff changeset
175 "Kill the form containing the current sexp, leaving the sexp itself.
bca93997a4d7 (kill-backward-up-list): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 56876
diff changeset
176 A prefix argument ARG causes the relevant number of surrounding
99958
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
177 forms to be removed.
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
178 This command assumes point is not in a string or comment."
56924
bca93997a4d7 (kill-backward-up-list): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 56876
diff changeset
179 (interactive "*p")
bca93997a4d7 (kill-backward-up-list): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 56876
diff changeset
180 (let ((current-sexp (thing-at-point 'sexp)))
bca93997a4d7 (kill-backward-up-list): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 56876
diff changeset
181 (if current-sexp
bca93997a4d7 (kill-backward-up-list): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 56876
diff changeset
182 (save-excursion
bca93997a4d7 (kill-backward-up-list): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 56876
diff changeset
183 (backward-up-list arg)
bca93997a4d7 (kill-backward-up-list): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 56876
diff changeset
184 (kill-sexp)
bca93997a4d7 (kill-backward-up-list): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 56876
diff changeset
185 (insert current-sexp))
bca93997a4d7 (kill-backward-up-list): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 56876
diff changeset
186 (error "Not at a sexp"))))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
187
27380
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
188 (defvar beginning-of-defun-function nil
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
189 "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
190 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
191 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
192 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
193 needs.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
194
86353
480a058ecb2f (beginning-of-defun-raw): Pass `arg' down to beginning-of-defun-function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78217
diff changeset
195 The function takes the same argument as `beginning-of-defun' and should
480a058ecb2f (beginning-of-defun-raw): Pass `arg' down to beginning-of-defun-function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78217
diff changeset
196 behave similarly, returning non-nil if it found the beginning of a defun.
480a058ecb2f (beginning-of-defun-raw): Pass `arg' down to beginning-of-defun-function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78217
diff changeset
197 Ideally it should move to a point right before an open-paren which encloses
480a058ecb2f (beginning-of-defun-raw): Pass `arg' down to beginning-of-defun-function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78217
diff changeset
198 the body of the defun.")
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
199
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
200 (defun beginning-of-defun (&optional arg)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
201 "Move backward to the beginning of a defun.
97431
02fedff190ed (beginning-of-defun): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 94655
diff changeset
202 With ARG, do it that many times. Negative ARG means move forward
02fedff190ed (beginning-of-defun): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 94655
diff changeset
203 to the ARGth following beginning of defun.
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
204
97431
02fedff190ed (beginning-of-defun): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 94655
diff changeset
205 If search is successful, return t; point ends up at the beginning
02fedff190ed (beginning-of-defun): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 94655
diff changeset
206 of the line where the search succeeded. Otherwise, return nil.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
207
97431
02fedff190ed (beginning-of-defun): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 94655
diff changeset
208 When `open-paren-in-column-0-is-defun-start' is non-nil, a defun
02fedff190ed (beginning-of-defun): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 94655
diff changeset
209 is assumed to start where there is a char with open-parenthesis
02fedff190ed (beginning-of-defun): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 94655
diff changeset
210 syntax at the beginning of a line. If `defun-prompt-regexp' is
02fedff190ed (beginning-of-defun): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 94655
diff changeset
211 non-nil, then a string which matches that regexp may also precede
02fedff190ed (beginning-of-defun): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 94655
diff changeset
212 the open-parenthesis. If `defun-prompt-regexp' and
02fedff190ed (beginning-of-defun): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 94655
diff changeset
213 `open-paren-in-column-0-is-defun-start' are both nil, this
02fedff190ed (beginning-of-defun): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 94655
diff changeset
214 function instead finds an open-paren at the outermost level.
74708
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
215
97431
02fedff190ed (beginning-of-defun): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 94655
diff changeset
216 If the variable `beginning-of-defun-function' is non-nil, its
02fedff190ed (beginning-of-defun): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 94655
diff changeset
217 value is called as a function, with argument ARG, to find the
02fedff190ed (beginning-of-defun): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 94655
diff changeset
218 defun's beginning.
02fedff190ed (beginning-of-defun): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 94655
diff changeset
219
02fedff190ed (beginning-of-defun): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 94655
diff changeset
220 Regardless of the values of `defun-prompt-regexp' and
02fedff190ed (beginning-of-defun): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 94655
diff changeset
221 `beginning-of-defun-function', point always moves to the
02fedff190ed (beginning-of-defun): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 94655
diff changeset
222 beginning of the line whenever the search is successful."
101789
7d131969b5e2 Add "^" to interactive spec of sexp movement commands
Miles Bader <miles@gnu.org>
parents: 101715
diff changeset
223 (interactive "^p")
58962
eb752b1a84b1 (beginning-of-defun, end-of-defun): Don't
Kim F. Storm <storm@cua.dk>
parents: 58918
diff changeset
224 (or (not (eq this-command 'beginning-of-defun))
58918
2ee970dcd072 * emacs-lisp/lisp.el (beginning-of-defun, end-of-defun):
Juri Linkov <juri@jurta.org>
parents: 57457
diff changeset
225 (eq last-command 'beginning-of-defun)
2ee970dcd072 * emacs-lisp/lisp.el (beginning-of-defun, end-of-defun):
Juri Linkov <juri@jurta.org>
parents: 57457
diff changeset
226 (and transient-mark-mode mark-active)
2ee970dcd072 * emacs-lisp/lisp.el (beginning-of-defun, end-of-defun):
Juri Linkov <juri@jurta.org>
parents: 57457
diff changeset
227 (push-mark))
6397
70bf65b6aae9 (beginning-of-defun-raw): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6396
diff changeset
228 (and (beginning-of-defun-raw arg)
70bf65b6aae9 (beginning-of-defun-raw): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6396
diff changeset
229 (progn (beginning-of-line) t)))
70bf65b6aae9 (beginning-of-defun-raw): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6396
diff changeset
230
70bf65b6aae9 (beginning-of-defun-raw): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6396
diff changeset
231 (defun beginning-of-defun-raw (&optional arg)
70bf65b6aae9 (beginning-of-defun-raw): New function.
Karl Heuer <kwzh@gnu.org>
parents: 6396
diff changeset
232 "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
233 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
234 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
235 is non-nil.
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
236
27380
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
237 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
238 is called as a function to find the defun's beginning."
101789
7d131969b5e2 Add "^" to interactive spec of sexp movement commands
Miles Bader <miles@gnu.org>
parents: 101715
diff changeset
239 (interactive "^p") ; change this to "P", maybe, if we ever come to pass ARG
74708
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
240 ; to beginning-of-defun-function.
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
241 (unless arg (setq arg 1))
73832
adc185200028 2006-11-08 Alan Mackenzie <acm@muc.de>
Alan Mackenzie <acm@muc.de>
parents: 68648
diff changeset
242 (cond
adc185200028 2006-11-08 Alan Mackenzie <acm@muc.de>
Alan Mackenzie <acm@muc.de>
parents: 68648
diff changeset
243 (beginning-of-defun-function
86353
480a058ecb2f (beginning-of-defun-raw): Pass `arg' down to beginning-of-defun-function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78217
diff changeset
244 (condition-case nil
480a058ecb2f (beginning-of-defun-raw): Pass `arg' down to beginning-of-defun-function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78217
diff changeset
245 (funcall beginning-of-defun-function arg)
480a058ecb2f (beginning-of-defun-raw): Pass `arg' down to beginning-of-defun-function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78217
diff changeset
246 ;; We used to define beginning-of-defun-function as taking no argument
480a058ecb2f (beginning-of-defun-raw): Pass `arg' down to beginning-of-defun-function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78217
diff changeset
247 ;; but that makes it impossible to implement correct forward motion:
480a058ecb2f (beginning-of-defun-raw): Pass `arg' down to beginning-of-defun-function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78217
diff changeset
248 ;; we used to use end-of-defun for that, but it's not supposed to do
480a058ecb2f (beginning-of-defun-raw): Pass `arg' down to beginning-of-defun-function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78217
diff changeset
249 ;; the same thing (it moves to the end of a defun not to the beginning
480a058ecb2f (beginning-of-defun-raw): Pass `arg' down to beginning-of-defun-function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78217
diff changeset
250 ;; of the next).
480a058ecb2f (beginning-of-defun-raw): Pass `arg' down to beginning-of-defun-function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78217
diff changeset
251 ;; In case the beginning-of-defun-function uses the old calling
480a058ecb2f (beginning-of-defun-raw): Pass `arg' down to beginning-of-defun-function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78217
diff changeset
252 ;; convention, fallback on the old implementation.
480a058ecb2f (beginning-of-defun-raw): Pass `arg' down to beginning-of-defun-function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78217
diff changeset
253 (wrong-number-of-arguments
480a058ecb2f (beginning-of-defun-raw): Pass `arg' down to beginning-of-defun-function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78217
diff changeset
254 (if (> arg 0)
480a058ecb2f (beginning-of-defun-raw): Pass `arg' down to beginning-of-defun-function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78217
diff changeset
255 (dotimes (i arg)
480a058ecb2f (beginning-of-defun-raw): Pass `arg' down to beginning-of-defun-function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78217
diff changeset
256 (funcall beginning-of-defun-function))
480a058ecb2f (beginning-of-defun-raw): Pass `arg' down to beginning-of-defun-function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78217
diff changeset
257 ;; Better not call end-of-defun-function directly, in case
480a058ecb2f (beginning-of-defun-raw): Pass `arg' down to beginning-of-defun-function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78217
diff changeset
258 ;; it's not defined.
480a058ecb2f (beginning-of-defun-raw): Pass `arg' down to beginning-of-defun-function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78217
diff changeset
259 (end-of-defun (- arg))))))
73832
adc185200028 2006-11-08 Alan Mackenzie <acm@muc.de>
Alan Mackenzie <acm@muc.de>
parents: 68648
diff changeset
260
adc185200028 2006-11-08 Alan Mackenzie <acm@muc.de>
Alan Mackenzie <acm@muc.de>
parents: 68648
diff changeset
261 ((or defun-prompt-regexp open-paren-in-column-0-is-defun-start)
adc185200028 2006-11-08 Alan Mackenzie <acm@muc.de>
Alan Mackenzie <acm@muc.de>
parents: 68648
diff changeset
262 (and (< arg 0) (not (eobp)) (forward-char 1))
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
263 (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
264 (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
265 "^\\s(\\|" "")
51084
c27a29e35a85 (beginning-of-defun-raw): Use shy-group.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47924
diff changeset
266 "\\(?:" defun-prompt-regexp "\\)\\s(")
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
267 "^\\s(")
73832
adc185200028 2006-11-08 Alan Mackenzie <acm@muc.de>
Alan Mackenzie <acm@muc.de>
parents: 68648
diff changeset
268 nil 'move arg)
102124
75c910c62eaa (beginning-of-defun): Fix harmless paren typo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102122
diff changeset
269 (progn (goto-char (1- (match-end 0)))
75c910c62eaa (beginning-of-defun): Fix harmless paren typo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102122
diff changeset
270 t)))
73832
adc185200028 2006-11-08 Alan Mackenzie <acm@muc.de>
Alan Mackenzie <acm@muc.de>
parents: 68648
diff changeset
271
74708
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
272 ;; If open-paren-in-column-0-is-defun-start and defun-prompt-regexp
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
273 ;; are both nil, column 0 has no significance - so scan forward
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
274 ;; from BOB to see how nested point is, then carry on from there.
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
275 ;;
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
276 ;; It is generally not a good idea to land up here, because the
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
277 ;; call to scan-lists below can be extremely slow. This is because
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
278 ;; back_comment in syntax.c may have to scan from bob to find the
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
279 ;; beginning of each comment. Fixing this is not trivial -- cyd.
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
280
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
281 ((eq arg 0))
73832
adc185200028 2006-11-08 Alan Mackenzie <acm@muc.de>
Alan Mackenzie <acm@muc.de>
parents: 68648
diff changeset
282 (t
74708
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
283 (let ((floor (point-min))
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
284 (ceiling (point-max))
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
285 (arg-+ve (> arg 0)))
73832
adc185200028 2006-11-08 Alan Mackenzie <acm@muc.de>
Alan Mackenzie <acm@muc.de>
parents: 68648
diff changeset
286 (save-restriction
adc185200028 2006-11-08 Alan Mackenzie <acm@muc.de>
Alan Mackenzie <acm@muc.de>
parents: 68648
diff changeset
287 (widen)
74708
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
288 (let ((ppss (let (syntax-begin-function
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
289 font-lock-beginning-of-syntax-function)
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
290 (syntax-ppss)))
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
291 ;; position of least enclosing paren, or nil.
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
292 encl-pos)
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
293 ;; Back out of any comment/string, so that encl-pos will always
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
294 ;; become nil if we're at top-level.
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
295 (when (nth 8 ppss)
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
296 (goto-char (nth 8 ppss))
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
297 (setq ppss (syntax-ppss))) ; should be fast, due to cache.
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
298 (setq encl-pos (syntax-ppss-toplevel-pos ppss))
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
299 (if encl-pos (goto-char encl-pos))
73832
adc185200028 2006-11-08 Alan Mackenzie <acm@muc.de>
Alan Mackenzie <acm@muc.de>
parents: 68648
diff changeset
300
74708
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
301 (and encl-pos arg-+ve (setq arg (1- arg)))
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
302 (and (not encl-pos) (not arg-+ve) (not (looking-at "\\s("))
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
303 (setq arg (1+ arg)))
73832
adc185200028 2006-11-08 Alan Mackenzie <acm@muc.de>
Alan Mackenzie <acm@muc.de>
parents: 68648
diff changeset
304
74708
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
305 (condition-case nil ; to catch crazy parens.
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
306 (progn
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
307 (goto-char (scan-lists (point) (- arg) 0))
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
308 (if arg-+ve
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
309 (if (>= (point) floor)
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
310 t
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
311 (goto-char floor)
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
312 nil)
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
313 ;; forward to next (, or trigger the c-c
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
314 (goto-char (1- (scan-lists (point) 1 -1)))
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
315 (if (<= (point) ceiling)
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
316 t
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
317 (goto-char ceiling)
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
318 nil)))
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
319 (error
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
320 (goto-char (if arg-+ve floor ceiling))
ba0b39efd315 (beginning-of-defun-raw): Optimise (for speed) the case when
Chong Yidong <cyd@stupidchicken.com>
parents: 74466
diff changeset
321 nil))))))))
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
322
102381
36437490ed93 (end-of-defun-function): Make it more clear that
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102124
diff changeset
323 (defvar end-of-defun-function
36437490ed93 (end-of-defun-function): Make it more clear that
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102124
diff changeset
324 (lambda () (forward-sexp 1))
86454
ebd4b500132c (end-of-defun): Restructure so that end-of-defun-function is called
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86353
diff changeset
325 "Function for `end-of-defun' to call.
102025
a41e65af8655 (end-of-defun-function): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101957
diff changeset
326 This is used to find the end of the defun at point.
86454
ebd4b500132c (end-of-defun): Restructure so that end-of-defun-function is called
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86353
diff changeset
327 It is called with no argument, right after calling `beginning-of-defun-raw'.
102025
a41e65af8655 (end-of-defun-function): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101957
diff changeset
328 So the function can assume that point is at the beginning of the defun body.
a41e65af8655 (end-of-defun-function): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101957
diff changeset
329 It should move point to the first position after the defun.")
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
330
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
331 (defun buffer-end (arg)
61401
99b039f2f040 (defun-prompt-regexp, parens-require-spaces, buffer-end, end-of-defun)
Luc Teirlinck <teirllm@auburn.edu>
parents: 59940
diff changeset
332 "Return the \"far end\" position of the buffer, in direction ARG.
59940
60ab67d8cf3a (buffer-end): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 59602
diff changeset
333 If ARG is positive, that's the end of the buffer.
60ab67d8cf3a (buffer-end): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 59602
diff changeset
334 Otherwise, that's the beginning of the buffer."
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
335 (if (> arg 0) (point-max) (point-min)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
336
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
337 (defun end-of-defun (&optional arg)
61401
99b039f2f040 (defun-prompt-regexp, parens-require-spaces, buffer-end, end-of-defun)
Luc Teirlinck <teirllm@auburn.edu>
parents: 59940
diff changeset
338 "Move forward to next end of defun.
99b039f2f040 (defun-prompt-regexp, parens-require-spaces, buffer-end, end-of-defun)
Luc Teirlinck <teirllm@auburn.edu>
parents: 59940
diff changeset
339 With argument, do it that many times.
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
340 Negative argument -N means move back to Nth preceding end of defun.
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
341
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
342 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
343 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
344 `beginning-of-defun'.
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
345
59243c413664 (beginning-of-defun-function): Variable renamed from beginning-of-defun.
Richard M. Stallman <rms@gnu.org>
parents: 27190
diff changeset
346 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
347 is called as a function to find the defun's end."
101789
7d131969b5e2 Add "^" to interactive spec of sexp movement commands
Miles Bader <miles@gnu.org>
parents: 101715
diff changeset
348 (interactive "^p")
58962
eb752b1a84b1 (beginning-of-defun, end-of-defun): Don't
Kim F. Storm <storm@cua.dk>
parents: 58918
diff changeset
349 (or (not (eq this-command 'end-of-defun))
58918
2ee970dcd072 * emacs-lisp/lisp.el (beginning-of-defun, end-of-defun):
Juri Linkov <juri@jurta.org>
parents: 57457
diff changeset
350 (eq last-command 'end-of-defun)
2ee970dcd072 * emacs-lisp/lisp.el (beginning-of-defun, end-of-defun):
Juri Linkov <juri@jurta.org>
parents: 57457
diff changeset
351 (and transient-mark-mode mark-active)
2ee970dcd072 * emacs-lisp/lisp.el (beginning-of-defun, end-of-defun):
Juri Linkov <juri@jurta.org>
parents: 57457
diff changeset
352 (push-mark))
54876
95ee18354a3a (beginning-of-defun-raw, end-of-defun):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53752
diff changeset
353 (if (or (null arg) (= arg 0)) (setq arg 1))
101957
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
354 (let ((pos (point))
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
355 (beg (progn (end-of-line 1) (beginning-of-defun-raw 1) (point))))
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
356 (funcall end-of-defun-function)
102122
4eb463737ac8 (end-of-defun): Consider the ".*\n" after the end of
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102025
diff changeset
357 ;; When comparing point against pos, we want to consider that if
4eb463737ac8 (end-of-defun): Consider the ".*\n" after the end of
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102025
diff changeset
358 ;; point was right after the end of the function, it's still
4eb463737ac8 (end-of-defun): Consider the ".*\n" after the end of
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102025
diff changeset
359 ;; considered as "in that function".
4eb463737ac8 (end-of-defun): Consider the ".*\n" after the end of
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102025
diff changeset
360 ;; E.g. `eval-defun' from right after the last close-paren.
4eb463737ac8 (end-of-defun): Consider the ".*\n" after the end of
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102025
diff changeset
361 (unless (bolp)
4eb463737ac8 (end-of-defun): Consider the ".*\n" after the end of
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102025
diff changeset
362 (skip-chars-forward " \t")
4eb463737ac8 (end-of-defun): Consider the ".*\n" after the end of
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102025
diff changeset
363 (if (looking-at "\\s<\\|\n")
4eb463737ac8 (end-of-defun): Consider the ".*\n" after the end of
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102025
diff changeset
364 (forward-line 1)))
101957
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
365 (cond
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
366 ((> arg 0)
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
367 ;; Moving forward.
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
368 (if (> (point) pos)
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
369 ;; We already moved forward by one because we started from
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
370 ;; within a function.
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
371 (setq arg (1- arg))
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
372 ;; We started from after the end of the previous function.
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
373 (goto-char pos))
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
374 (unless (zerop arg)
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
375 (beginning-of-defun-raw (- arg))
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
376 (funcall end-of-defun-function)))
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
377 ((< arg 0)
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
378 ;; Moving backward.
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
379 (if (< (point) pos)
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
380 ;; We already moved backward because we started from between
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
381 ;; two functions.
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
382 (setq arg (1+ arg))
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
383 ;; We started from inside a function.
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
384 (goto-char beg))
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
385 (unless (zerop arg)
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
386 (beginning-of-defun-raw (- arg))
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
387 (funcall end-of-defun-function))))
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
388 (unless (bolp)
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
389 (skip-chars-forward " \t")
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
390 (if (looking-at "\\s<\\|\n")
db03a07a8e3e (end-of-defun): Rewrite, to use the ARG argument to beginning-of-defun-raw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101956
diff changeset
391 (forward-line 1)))))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
392
59177
5188f5b11d56 (mark-sexp, mark-defun): New arg ALLOW-EXTEND
Richard M. Stallman <rms@gnu.org>
parents: 58962
diff changeset
393 (defun mark-defun (&optional allow-extend)
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
394 "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
395 The defun marked is the one that contains point or follows point.
59177
5188f5b11d56 (mark-sexp, mark-defun): New arg ALLOW-EXTEND
Richard M. Stallman <rms@gnu.org>
parents: 58962
diff changeset
396
5188f5b11d56 (mark-sexp, mark-defun): New arg ALLOW-EXTEND
Richard M. Stallman <rms@gnu.org>
parents: 58962
diff changeset
397 Interactively, if this command is repeated
61401
99b039f2f040 (defun-prompt-regexp, parens-require-spaces, buffer-end, end-of-defun)
Luc Teirlinck <teirllm@auburn.edu>
parents: 59940
diff changeset
398 or (in Transient Mark mode) if the mark is active,
59177
5188f5b11d56 (mark-sexp, mark-defun): New arg ALLOW-EXTEND
Richard M. Stallman <rms@gnu.org>
parents: 58962
diff changeset
399 it marks the next defun after the ones already marked."
5188f5b11d56 (mark-sexp, mark-defun): New arg ALLOW-EXTEND
Richard M. Stallman <rms@gnu.org>
parents: 58962
diff changeset
400 (interactive "p")
5188f5b11d56 (mark-sexp, mark-defun): New arg ALLOW-EXTEND
Richard M. Stallman <rms@gnu.org>
parents: 58962
diff changeset
401 (cond ((and allow-extend
5188f5b11d56 (mark-sexp, mark-defun): New arg ALLOW-EXTEND
Richard M. Stallman <rms@gnu.org>
parents: 58962
diff changeset
402 (or (and (eq last-command this-command) (mark t))
5188f5b11d56 (mark-sexp, mark-defun): New arg ALLOW-EXTEND
Richard M. Stallman <rms@gnu.org>
parents: 58962
diff changeset
403 (and transient-mark-mode mark-active)))
43384
cc3ba2d0d471 * emacs-lisp/lisp.el (mark-defun): Don't leave multiple marks
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 43301
diff changeset
404 (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
405 (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
406 (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
407 (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
408 (point))))
cc3ba2d0d471 * emacs-lisp/lisp.el (mark-defun): Don't leave multiple marks
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 43301
diff changeset
409 (t
55727
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
410 (let ((opoint (point))
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
411 beg end)
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
412 (push-mark opoint)
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
413 ;; Try first in this order for the sake of languages with nested
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
414 ;; functions where several can end at the same place as with
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
415 ;; the offside rule, e.g. Python.
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
416 (beginning-of-defun)
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
417 (setq beg (point))
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
418 (end-of-defun)
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
419 (setq end (point))
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
420 (while (looking-at "^\n")
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
421 (forward-line 1))
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
422 (if (> (point) opoint)
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
423 (progn
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
424 ;; We got the right defun.
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
425 (push-mark beg nil t)
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
426 (goto-char end)
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
427 (exchange-point-and-mark))
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
428 ;; beginning-of-defun moved back one defun
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
429 ;; so we got the wrong one.
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
430 (goto-char opoint)
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
431 (end-of-defun)
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
432 (push-mark (point) nil t)
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
433 (beginning-of-defun))
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
434 (re-search-backward "^\n" (- (point) 1) t)))))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
435
15971
9e9c14ecf6e1 (narrow-to-defun): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
436 (defun narrow-to-defun (&optional arg)
9e9c14ecf6e1 (narrow-to-defun): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
437 "Make text outside current defun invisible.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
438 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
439 Optional ARG is ignored."
15971
9e9c14ecf6e1 (narrow-to-defun): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
440 (interactive)
9e9c14ecf6e1 (narrow-to-defun): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
441 (save-excursion
9e9c14ecf6e1 (narrow-to-defun): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
442 (widen)
55727
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
443 (let ((opoint (point))
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
444 beg end)
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
445 ;; Try first in this order for the sake of languages with nested
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
446 ;; functions where several can end at the same place as with
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
447 ;; the offside rule, e.g. Python.
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
448 (beginning-of-defun)
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
449 (setq beg (point))
53752
592ddd618234 (beginning-of-defun-raw, end-of-defun):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
450 (end-of-defun)
55727
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
451 (setq end (point))
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
452 (while (looking-at "^\n")
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
453 (forward-line 1))
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
454 (unless (> (point) opoint)
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
455 ;; beginning-of-defun moved back one defun
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
456 ;; so we got the wrong one.
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
457 (goto-char opoint)
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
458 (end-of-defun)
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
459 (setq end (point))
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
460 (beginning-of-defun)
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
461 (setq beg (point)))
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
462 (goto-char end)
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
463 (re-search-backward "^\n" (- (point) 1) t)
babf5161afd4 (mark-defun, narrow-to-defun): If moving back then fwd gets a defun
Richard M. Stallman <rms@gnu.org>
parents: 55277
diff changeset
464 (narrow-to-region beg end))))
15971
9e9c14ecf6e1 (narrow-to-defun): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
465
55807
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
466 (defvar insert-pair-alist
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
467 '((?\( ?\)) (?\[ ?\]) (?\{ ?\}) (?\< ?\>) (?\" ?\") (?\' ?\') (?\` ?\'))
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
468 "Alist of paired characters inserted by `insert-pair'.
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
469 Each element looks like (OPEN-CHAR CLOSE-CHAR) or (COMMAND-CHAR
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
470 OPEN-CHAR CLOSE-CHAR). The characters OPEN-CHAR and CLOSE-CHAR
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
471 of the pair whose key is equal to the last input character with
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
472 or without modifiers, are inserted by `insert-pair'.")
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
473
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
474 (defun insert-pair (&optional arg open close)
55277
980615cc9a94 (beginning-of-defun, end-of-defun):
Juri Linkov <juri@jurta.org>
parents: 54876
diff changeset
475 "Enclose following ARG sexps in a pair of OPEN and CLOSE characters.
980615cc9a94 (beginning-of-defun, end-of-defun):
Juri Linkov <juri@jurta.org>
parents: 54876
diff changeset
476 Leave point after the first character.
980615cc9a94 (beginning-of-defun, end-of-defun):
Juri Linkov <juri@jurta.org>
parents: 54876
diff changeset
477 A negative ARG encloses the preceding ARG sexps instead.
980615cc9a94 (beginning-of-defun, end-of-defun):
Juri Linkov <juri@jurta.org>
parents: 54876
diff changeset
478 No argument is equivalent to zero: just insert characters
980615cc9a94 (beginning-of-defun, end-of-defun):
Juri Linkov <juri@jurta.org>
parents: 54876
diff changeset
479 and leave point between.
980615cc9a94 (beginning-of-defun, end-of-defun):
Juri Linkov <juri@jurta.org>
parents: 54876
diff changeset
480 If `parens-require-spaces' is non-nil, this command also inserts a space
980615cc9a94 (beginning-of-defun, end-of-defun):
Juri Linkov <juri@jurta.org>
parents: 54876
diff changeset
481 before and after, depending on the surrounding characters.
55807
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
482 If region is active, insert enclosing characters at region boundaries.
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
483
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
484 If arguments OPEN and CLOSE are nil, the character pair is found
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
485 from the variable `insert-pair-alist' according to the last input
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
486 character with or without modifiers. If no character pair is
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
487 found in the variable `insert-pair-alist', then the last input
99958
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
488 character is inserted ARG times.
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
489
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
490 This command assumes point is not in a string or comment."
55277
980615cc9a94 (beginning-of-defun, end-of-defun):
Juri Linkov <juri@jurta.org>
parents: 54876
diff changeset
491 (interactive "P")
55807
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
492 (if (not (and open close))
101008
5aa3a4e05089 Replace last-command-char with last-command-event.
Glenn Morris <rgm@gnu.org>
parents: 100908
diff changeset
493 (let ((pair (or (assq last-command-event insert-pair-alist)
55807
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
494 (assq (event-basic-type last-command-event)
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
495 insert-pair-alist))))
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
496 (if pair
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
497 (if (nth 2 pair)
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
498 (setq open (nth 1 pair) close (nth 2 pair))
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
499 (setq open (nth 0 pair) close (nth 1 pair))))))
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
500 (if (and open close)
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
501 (if (and transient-mark-mode mark-active)
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
502 (progn
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
503 (save-excursion (goto-char (region-end)) (insert close))
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
504 (save-excursion (goto-char (region-beginning)) (insert open)))
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
505 (if arg (setq arg (prefix-numeric-value arg))
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
506 (setq arg 0))
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
507 (cond ((> arg 0) (skip-chars-forward " \t"))
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
508 ((< arg 0) (forward-sexp arg) (setq arg (- arg))))
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
509 (and parens-require-spaces
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
510 (not (bobp))
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
511 (memq (char-syntax (preceding-char)) (list ?w ?_ (char-syntax close)))
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
512 (insert " "))
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
513 (insert open)
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
514 (save-excursion
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
515 (or (eq arg 0) (forward-sexp arg))
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
516 (insert close)
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
517 (and parens-require-spaces
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
518 (not (eobp))
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
519 (memq (char-syntax (following-char)) (list ?w ?_ (char-syntax open)))
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
520 (insert " "))))
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
521 (insert-char (event-basic-type last-command-event)
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
522 (prefix-numeric-value arg))))
55277
980615cc9a94 (beginning-of-defun, end-of-defun):
Juri Linkov <juri@jurta.org>
parents: 54876
diff changeset
523
55807
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
524 (defun insert-parentheses (&optional arg)
61401
99b039f2f040 (defun-prompt-regexp, parens-require-spaces, buffer-end, end-of-defun)
Luc Teirlinck <teirllm@auburn.edu>
parents: 59940
diff changeset
525 "Enclose following ARG sexps in parentheses.
99b039f2f040 (defun-prompt-regexp, parens-require-spaces, buffer-end, end-of-defun)
Luc Teirlinck <teirllm@auburn.edu>
parents: 59940
diff changeset
526 Leave point after open-paren.
16410
454a13718b1f (narrow-to-defun): Narrow to the same defun that `mark-defun' would make
Erik Naggum <erik@naggum.no>
parents: 15971
diff changeset
527 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
528 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
529 If `parens-require-spaces' is non-nil, this command also inserts a space
55277
980615cc9a94 (beginning-of-defun, end-of-defun):
Juri Linkov <juri@jurta.org>
parents: 54876
diff changeset
530 before and after, depending on the surrounding characters.
99958
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
531 If region is active, insert enclosing characters at region boundaries.
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
532
42c2049ff2f6 (forward-sexp, backward-sexp, mark-sexp)
Alan Mackenzie <acm@muc.de>
parents: 97477
diff changeset
533 This command assumes point is not in a string or comment."
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
534 (interactive "P")
55277
980615cc9a94 (beginning-of-defun, end-of-defun):
Juri Linkov <juri@jurta.org>
parents: 54876
diff changeset
535 (insert-pair arg ?\( ?\)))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
536
55807
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
537 (defun delete-pair ()
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
538 "Delete a pair of characters enclosing the sexp that follows point."
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
539 (interactive)
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
540 (save-excursion (forward-sexp 1) (delete-char -1))
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
541 (delete-char 1))
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
542
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
543 (defun raise-sexp (&optional arg)
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
544 "Raise ARG sexps higher up the tree."
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
545 (interactive "p")
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
546 (let ((s (if (and transient-mark-mode mark-active)
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
547 (buffer-substring (region-beginning) (region-end))
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
548 (buffer-substring
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
549 (point)
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
550 (save-excursion (forward-sexp arg) (point))))))
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
551 (backward-up-list 1)
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
552 (delete-region (point) (save-excursion (forward-sexp 1) (point)))
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
553 (save-excursion (insert s))))
eb9d99ced391 (insert-pair-alist): New var.
Juri Linkov <juri@jurta.org>
parents: 55727
diff changeset
554
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
555 (defun move-past-close-and-reindent ()
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
556 "Move past next `)', delete indentation before it, then indent after it."
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
557 (interactive)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
558 (up-list 1)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
559 (forward-char -1)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
560 (while (save-excursion ; this is my contribution
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
561 (let ((before-paren (point)))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
562 (back-to-indentation)
19781
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
563 (and (= (point) before-paren)
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
564 (progn
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
565 ;; Move to end of previous line.
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
566 (beginning-of-line)
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
567 (forward-char -1)
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
568 ;; 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
569 (let ((end (point))
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
570 state)
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
571 (beginning-of-line)
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
572 ;; Get state at start of line.
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
573 (setq state (list 0 nil nil
19781
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
574 (null (calculate-lisp-indent))
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
575 nil nil nil nil
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
576 nil))
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
577 ;; 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
578 (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
579 state))
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
580 ;; Check not in string or comment.
03264c342376 (move-past-close-and-reindent):
Richard M. Stallman <rms@gnu.org>
parents: 17665
diff changeset
581 (and (not (elt state 3)) (not (elt state 4))))))))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
582 (delete-indentation))
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
583 (forward-char 1)
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
584 (newline-and-indent))
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
585
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
586 (defun check-parens () ; lame name?
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
587 "Check for unbalanced parentheses in the current buffer.
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
588 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
589 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
590 current syntax table and will find unbalanced brackets or quotes as
62455
072c8e0cc835 (check-parens): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 61401
diff changeset
591 appropriate. (See Info node `(emacs)Parentheses'.) If imbalance is
63624
f8e5c41bb4b8 (check-parens): Fix spellings.
Juanma Barranquero <lekktu@gmail.com>
parents: 62455
diff changeset
592 found, an error is signaled and point is left at the first unbalanced
62455
072c8e0cc835 (check-parens): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 61401
diff changeset
593 character."
27190
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
594 (interactive)
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
595 (condition-case data
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
596 ;; Buffer can't have more than (point-max) sexps.
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
597 (scan-sexps (point-min) (point-max))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
598 (scan-error (goto-char (nth 2 data))
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
599 ;; Could print (nth 1 data), which is either
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
600 ;; "Containing expression ends prematurely" or
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
601 ;; "Unbalanced parentheses", but those may not be so
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
602 ;; accurate/helpful, e.g. quotes may actually be
f132d890985a (beginning-of-defun): New variable.
Dave Love <fx@gnu.org>
parents: 23451
diff changeset
603 ;; mismatched.
86454
ebd4b500132c (end-of-defun): Restructure so that end-of-defun-function is called
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86353
diff changeset
604 (error "Unmatched bracket or quote"))))
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
605
86454
ebd4b500132c (end-of-defun): Restructure so that end-of-defun-function is called
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86353
diff changeset
606 (defun field-complete (table &optional predicate)
104736
cc62eac5991f (field-complete): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104024
diff changeset
607 (let ((minibuffer-completion-table table)
cc62eac5991f (field-complete): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104024
diff changeset
608 (minibuffer-completion-predicate predicate)
cc62eac5991f (field-complete): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104024
diff changeset
609 ;; This made sense for lisp-complete-symbol, but for
cc62eac5991f (field-complete): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104024
diff changeset
610 ;; field-complete, this is out of place. --Stef
cc62eac5991f (field-complete): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104024
diff changeset
611 ;; (completion-annotate-function
cc62eac5991f (field-complete): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104024
diff changeset
612 ;; (unless (eq predicate 'fboundp)
cc62eac5991f (field-complete): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104024
diff changeset
613 ;; (lambda (str)
cc62eac5991f (field-complete): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104024
diff changeset
614 ;; (if (fboundp (intern-soft str)) " <f>"))))
cc62eac5991f (field-complete): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104024
diff changeset
615 )
cc62eac5991f (field-complete): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104024
diff changeset
616 (call-interactively 'minibuffer-complete)))
86454
ebd4b500132c (end-of-defun): Restructure so that end-of-defun-function is called
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86353
diff changeset
617
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
618 (defun lisp-complete-symbol (&optional predicate)
6004
4fa3d631dae8 (lisp-complete-symbol): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5981
diff changeset
619 "Perform completion on Lisp symbol preceding point.
4fa3d631dae8 (lisp-complete-symbol): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5981
diff changeset
620 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
621 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
622 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
623
30979
72284d9d7a11 (defun-prompt-regexp, parens-require-spaces): Doc fix.
Dave Love <fx@gnu.org>
parents: 28299
diff changeset
624 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
625 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
626 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
627 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
628 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
629 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
630 considered."
84
225a5c57fe64 Initial revision
root <root>
parents:
diff changeset
631 (interactive)
106482
806e9f7990d8 * minibuffer.el (completion-at-point-functions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
632 (let* ((data (lisp-completion-at-point predicate))
806e9f7990d8 * minibuffer.el (completion-at-point-functions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
633 (plist (nthcdr 3 data)))
108143
624169215019 * emacs-lisp/lisp.el (lisp-complete-symbol): Fail gracefully.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108029
diff changeset
634 (if (null data)
624169215019 * emacs-lisp/lisp.el (lisp-complete-symbol): Fail gracefully.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108029
diff changeset
635 (minibuffer-message "Nothing to complete")
624169215019 * emacs-lisp/lisp.el (lisp-complete-symbol): Fail gracefully.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108029
diff changeset
636 (let ((completion-annotate-function
624169215019 * emacs-lisp/lisp.el (lisp-complete-symbol): Fail gracefully.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108029
diff changeset
637 (plist-get plist :annotate-function)))
106482
806e9f7990d8 * minibuffer.el (completion-at-point-functions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
638 (completion-in-region (nth 0 data) (nth 1 data) (nth 2 data)
108143
624169215019 * emacs-lisp/lisp.el (lisp-complete-symbol): Fail gracefully.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108029
diff changeset
639 (plist-get plist :predicate))))))
108321
497767b878dc * emacs-lisp/lisp.el (lisp-completion-at-point): Give it a doc string.
Glenn Morris <rgm@gnu.org>
parents: 106815
diff changeset
640
106482
806e9f7990d8 * minibuffer.el (completion-at-point-functions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
641
806e9f7990d8 * minibuffer.el (completion-at-point-functions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
642 (defun lisp-completion-at-point (&optional predicate)
108321
497767b878dc * emacs-lisp/lisp.el (lisp-completion-at-point): Give it a doc string.
Glenn Morris <rgm@gnu.org>
parents: 106815
diff changeset
643 "Function used for `completion-at-point-functions' in `emacs-lisp-mode'."
106482
806e9f7990d8 * minibuffer.el (completion-at-point-functions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
644 ;; FIXME: the `end' could be after point?
108001
3d52b4ac976f (lisp-completion-at-point): Complete around point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
645 (let* ((pos (point))
104738
16738af2eddd (lisp-complete-symbol): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104736
diff changeset
646 (beg (with-syntax-table emacs-lisp-mode-syntax-table
108029
e61497621f0d (lisp-completion-at-point): Try and handle errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108001
diff changeset
647 (condition-case nil
e61497621f0d (lisp-completion-at-point): Try and handle errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108001
diff changeset
648 (save-excursion
e61497621f0d (lisp-completion-at-point): Try and handle errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108001
diff changeset
649 (backward-sexp 1)
e61497621f0d (lisp-completion-at-point): Try and handle errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108001
diff changeset
650 (skip-syntax-forward "'")
e61497621f0d (lisp-completion-at-point): Try and handle errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108001
diff changeset
651 (point))
e61497621f0d (lisp-completion-at-point): Try and handle errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108001
diff changeset
652 (scan-error pos))))
104738
16738af2eddd (lisp-complete-symbol): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104736
diff changeset
653 (predicate
16738af2eddd (lisp-complete-symbol): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104736
diff changeset
654 (or predicate
16738af2eddd (lisp-complete-symbol): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104736
diff changeset
655 (save-excursion
16738af2eddd (lisp-complete-symbol): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104736
diff changeset
656 (goto-char beg)
16738af2eddd (lisp-complete-symbol): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104736
diff changeset
657 (if (not (eq (char-before) ?\())
16738af2eddd (lisp-complete-symbol): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104736
diff changeset
658 (lambda (sym) ;why not just nil ? -sm
16738af2eddd (lisp-complete-symbol): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104736
diff changeset
659 (or (boundp sym) (fboundp sym)
16738af2eddd (lisp-complete-symbol): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104736
diff changeset
660 (symbol-plist sym)))
16738af2eddd (lisp-complete-symbol): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104736
diff changeset
661 ;; Looks like a funcall position. Let's double check.
16738af2eddd (lisp-complete-symbol): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104736
diff changeset
662 (if (condition-case nil
16738af2eddd (lisp-complete-symbol): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104736
diff changeset
663 (progn (up-list -2) (forward-char 1)
16738af2eddd (lisp-complete-symbol): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104736
diff changeset
664 (eq (char-after) ?\())
16738af2eddd (lisp-complete-symbol): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104736
diff changeset
665 (error nil))
16738af2eddd (lisp-complete-symbol): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104736
diff changeset
666 ;; If the first element of the parent list is an open
16738af2eddd (lisp-complete-symbol): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104736
diff changeset
667 ;; parenthesis we are probably not in a funcall position.
16738af2eddd (lisp-complete-symbol): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104736
diff changeset
668 ;; Maybe a `let' varlist or something.
16738af2eddd (lisp-complete-symbol): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104736
diff changeset
669 nil
16738af2eddd (lisp-complete-symbol): Use minibuffer-complete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 104736
diff changeset
670 ;; Else, we assume that a function name is expected.
108001
3d52b4ac976f (lisp-completion-at-point): Complete around point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
671 'fboundp)))))
3d52b4ac976f (lisp-completion-at-point): Complete around point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
672 (end
3d52b4ac976f (lisp-completion-at-point): Complete around point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
673 (unless (or (eq beg (point-max))
108029
e61497621f0d (lisp-completion-at-point): Try and handle errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108001
diff changeset
674 (member (char-syntax (char-after beg)) '(?\" ?\( ?\))))
e61497621f0d (lisp-completion-at-point): Try and handle errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108001
diff changeset
675 (condition-case nil
e61497621f0d (lisp-completion-at-point): Try and handle errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108001
diff changeset
676 (save-excursion
e61497621f0d (lisp-completion-at-point): Try and handle errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108001
diff changeset
677 (goto-char beg)
e61497621f0d (lisp-completion-at-point): Try and handle errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108001
diff changeset
678 (forward-sexp 1)
e61497621f0d (lisp-completion-at-point): Try and handle errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108001
diff changeset
679 (when (>= (point) pos)
e61497621f0d (lisp-completion-at-point): Try and handle errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108001
diff changeset
680 (point)))
e61497621f0d (lisp-completion-at-point): Try and handle errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108001
diff changeset
681 (scan-error pos)))))
108001
3d52b4ac976f (lisp-completion-at-point): Complete around point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
682 (when end
3d52b4ac976f (lisp-completion-at-point): Complete around point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
683 (list beg end obarray
3d52b4ac976f (lisp-completion-at-point): Complete around point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
684 :predicate predicate
3d52b4ac976f (lisp-completion-at-point): Complete around point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
685 :annotate-function
106482
806e9f7990d8 * minibuffer.el (completion-at-point-functions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
686 (unless (eq predicate 'fboundp)
108001
3d52b4ac976f (lisp-completion-at-point): Complete around point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
687 (lambda (str) (if (fboundp (intern-soft str)) " <f>")))))))
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 215
diff changeset
688
67721
d372bc6eff1d (lisp-complete-symbol): Don't call delete-windows-on with an inexistent buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67472
diff changeset
689 ;; arch-tag: aa7fa8a4-2e6f-4e9b-9cd9-fef06340e67e
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 215
diff changeset
690 ;;; lisp.el ends here