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