Mercurial > emacs
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 |
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 | 3 ;; Copyright (C) 1985, 1986, 1994, 2000, 2001, 2002, 2003, 2004, |
106815 | 4 ;; 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. |
845 | 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 | 10 ;; This file is part of GNU Emacs. |
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 | 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 | 16 |
17 ;; GNU Emacs is distributed in the hope that it will be useful, | |
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 ;; GNU General Public License for more details. | |
21 | |
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 | 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 | 31 |
6369 | 32 ;; Note that this variable is used by non-lisp modes too. |
17665 | 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 | 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 | 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 | 41 |
17665 | 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 | 45 :type 'boolean |
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 | 52 (defun forward-sexp (&optional arg) |
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 | 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 | 63 |
64 (defun backward-sexp (&optional arg) | |
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 | 70 (or arg (setq arg 1)) |
71 (forward-sexp (- arg))) | |
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 | 74 "Set mark ARG sexps from point. |
215 | 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 | 98 |
99 (defun forward-list (&optional arg) | |
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 | 105 (or arg (setq arg 1)) |
106 (goto-char (or (scan-lists (point) arg 0) (buffer-end arg)))) | |
107 | |
108 (defun backward-list (&optional arg) | |
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 | 114 (or arg (setq arg 1)) |
115 (forward-list (- arg))) | |
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 | 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 | 124 (let ((inc (if (> arg 0) 1 -1))) |
125 (while (/= arg 0) | |
126 (goto-char (or (scan-lists (point) inc -1) (buffer-end arg))) | |
127 (setq arg (- arg inc))))) | |
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 | 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 | 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 | 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 | 144 (let ((inc (if (> arg 0) 1 -1))) |
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 | 153 (setq arg (- arg inc))))) |
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 | 160 (interactive "p") |
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 | 163 (kill-region opoint (point)))) |
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 | 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 | 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 | 200 (defun beginning-of-defun (&optional arg) |
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 | 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 | 330 |
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 | 333 If ARG is positive, that's the end of the buffer. |
334 Otherwise, that's the beginning of the buffer." | |
84 | 335 (if (> arg 0) (point-max) (point-min))) |
336 | |
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 | 340 Negative argument -N means move back to Nth preceding end of defun. |
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 | 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 | 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 | 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 | 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 | 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 | 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 | 555 (defun move-past-close-and-reindent () |
556 "Move past next `)', delete indentation before it, then indent after it." | |
557 (interactive) | |
558 (up-list 1) | |
559 (forward-char -1) | |
560 (while (save-excursion ; this is my contribution | |
561 (let ((before-paren (point))) | |
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 | 582 (delete-indentation)) |
583 (forward-char 1) | |
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 | 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 | 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 |