annotate lisp/lisp.el @ 5750:66d2f63df75f

Correct some spelling and formatting in behavior.el. Mentioned in tracker issue 826, the third thing mentioned there (the file name at the bottom of the file) had already been fixed. lisp/ChangeLog addition: 2013-08-05 Aidan Kehoe <kehoea@parhasard.net> * behavior.el: (override-behavior): Correct some spelling and formatting here, thank you Steven Mitchell in tracker issue 826.
author Aidan Kehoe <kehoea@parhasard.net>
date Mon, 05 Aug 2013 10:05:32 +0100
parents 58b38d5b32d0
children 6a6c89b53c5d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 ;;; lisp.el --- Lisp editing commands for XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 ;; Copyright (C) 1985, 1986, 1994, 1997 Free Software Foundation, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 ;; Maintainer: FSF
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 ;; Keywords: lisp, languages, dumped
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 ;; This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 4726
diff changeset
10 ;; XEmacs is free software: you can redistribute it and/or modify it
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 4726
diff changeset
11 ;; under the terms of the GNU General Public License as published by the
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 4726
diff changeset
12 ;; Free Software Foundation, either version 3 of the License, or (at your
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 4726
diff changeset
13 ;; option) any later version.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 4726
diff changeset
15 ;; XEmacs is distributed in the hope that it will be useful, but WITHOUT
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 4726
diff changeset
16 ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 4726
diff changeset
17 ;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 4726
diff changeset
18 ;; for more details.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 4726
diff changeset
21 ;; along with XEmacs. If not, see <http://www.gnu.org/licenses/>.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 ;;; Synched up with: Emacs/Mule zeta.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 ;;; Commentary:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 ;; This file is dumped with XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 ;; Lisp editing commands to go with Lisp major mode.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 ;; 06/11/1997 - Use char-(after|before) instead of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 ;; (following|preceding)-char. -slb
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 ;;; Code:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 ;; Note that this variable is used by non-lisp modes too.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 (defcustom defun-prompt-regexp nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 "*Non-nil => regexp to ignore, before the character that starts a defun.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 This is only necessary if the opening paren or brace is not in column 0.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 See `beginning-of-defun'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 :type '(choice (const :tag "none" nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 regexp)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 :group 'lisp)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 (make-variable-buffer-local 'defun-prompt-regexp)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 (defcustom parens-require-spaces t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 "Non-nil => `insert-parentheses' should insert whitespace as needed."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 :type 'boolean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 :group 'editing-basics
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 :group 'lisp)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
53 (defun forward-sexp (&optional count)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 "Move forward across one balanced expression (sexp).
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
55 With non-nil COUNT, do it that many times. Negative COUNT means
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
56 move backward across -COUNT balanced expressions."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 ;; XEmacs change (for zmacs regions)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 (interactive "_p")
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
59 (or count (setq count 1))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 ;; XEmacs: evil hack! The other half of the evil hack below.
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
61 (if (and (> count 0) (looking-at "#s(\\|#r[uU]\\{0,1\\}\""))
3543
c136144fe765 [xemacs-hg @ 2006-08-04 22:55:04 by aidan]
aidan
parents: 446
diff changeset
62 (goto-char (1+ (- (point) (- (match-end 0) (match-beginning 0))))))
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
63 (goto-char (or (scan-sexps (point) count) (buffer-end count)))
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
64 (when (< count 0)
3543
c136144fe765 [xemacs-hg @ 2006-08-04 22:55:04 by aidan]
aidan
parents: 446
diff changeset
65 (backward-prefix-chars)
c136144fe765 [xemacs-hg @ 2006-08-04 22:55:04 by aidan]
aidan
parents: 446
diff changeset
66 ;; XEmacs: evil hack! Skip back over #[sr] so that structures and raw
c136144fe765 [xemacs-hg @ 2006-08-04 22:55:04 by aidan]
aidan
parents: 446
diff changeset
67 ;; strings are read properly. the current cheesified syntax tables just
c136144fe765 [xemacs-hg @ 2006-08-04 22:55:04 by aidan]
aidan
parents: 446
diff changeset
68 ;; aren't up to this.
c136144fe765 [xemacs-hg @ 2006-08-04 22:55:04 by aidan]
aidan
parents: 446
diff changeset
69 (let* ((diff (- (point) (point-min)))
c136144fe765 [xemacs-hg @ 2006-08-04 22:55:04 by aidan]
aidan
parents: 446
diff changeset
70 (subject (buffer-substring (- (point) (min diff 3))
c136144fe765 [xemacs-hg @ 2006-08-04 22:55:04 by aidan]
aidan
parents: 446
diff changeset
71 (1+ (point))))
5560
58b38d5b32d0 Implement print-circle, allowing recursive and circular structures to be read.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
72 (matched (string-match "#[0-9]+=\\|#s(\\|#r[uU]\\{0,1\\}\""
58b38d5b32d0 Implement print-circle, allowing recursive and circular structures to be read.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
73 subject)))
3543
c136144fe765 [xemacs-hg @ 2006-08-04 22:55:04 by aidan]
aidan
parents: 446
diff changeset
74 (if matched
c136144fe765 [xemacs-hg @ 2006-08-04 22:55:04 by aidan]
aidan
parents: 446
diff changeset
75 (goto-char (1+ (- (point) (- (length subject) matched))))))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
77 (defun backward-sexp (&optional count)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 "Move backward across one balanced expression (sexp).
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
79 With non-nil COUNT, do it that many times. Negative COUNT means
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
80 move forward across -COUNT balanced expressions."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 ;; XEmacs change (for zmacs regions)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 (interactive "_p")
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
83 (forward-sexp (- (or count 1))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
85 (defun mark-sexp (&optional count)
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
86 "Set mark COUNT sexps from point.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 The place mark goes is the same place \\[forward-sexp] would
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 move to with the same argument.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 Repeat this command to mark more sexps in the same direction."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 (interactive "p")
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
91 (mark-something 'mark-sexp 'forward-sexp (or count 1)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
93 (defun forward-list (&optional count)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 "Move forward across one balanced group of parentheses.
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
95 With non-nil COUNT, do it that many times.
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
96 Negative COUNT means move backward across -COUNT groups of parentheses."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 ;; XEmacs change
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 (interactive "_p")
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
99 (goto-char (or (scan-lists (point) (or count 1) 0)
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
100 (buffer-end (or count 1)))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
102 (defun backward-list (&optional count)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 "Move backward across one balanced group of parentheses.
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
104 With non-nil COUNT, do it that many times.
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
105 Negative COUNT means move forward across -COUNT groups of parentheses."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 ;; XEmacs change (for zmacs regions)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 (interactive "_p")
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
108 (forward-list (- (or count 1))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
110 (defun down-list (&optional count)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 "Move forward down one level of parentheses.
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
112 With non-nil COUNT, do this that many times.
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
113 A negative COUNT means move backward but still go down a level."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 ;; XEmacs change (for zmacs regions)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 (interactive "_p")
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
116 (or count (setq count 1))
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
117 (let ((inc (if (> count 0) 1 -1)))
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
118 (while (/= count 0)
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
119 (goto-char (or (scan-lists (point) inc -1) (buffer-end count)))
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
120 (setq count (- count inc)))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
122 (defun backward-up-list (&optional count)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 "Move backward out of one level of parentheses.
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
124 With COUNT, do this that many times.
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
125 A negative COUNT means move forward but still to a less deep spot."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 (interactive "_p")
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
127 (up-list (- (or count 1))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
129 (defun up-list (&optional count)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 "Move forward out of one level of parentheses.
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
131 With non-nil COUNT, do this that many times.
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
132 A negative COUNT means move backward but still to a less deep spot.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 In Lisp programs, an argument is required."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 ;; XEmacs change (for zmacs regions)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 (interactive "_p")
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
136 (or count (setq count 1))
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
137 (let ((inc (if (> count 0) 1 -1)))
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
138 (while (/= count 0)
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
139 (goto-char (or (scan-lists (point) inc 1) (buffer-end count)))
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
140 (setq count (- count inc)))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
142 (defun kill-sexp (&optional count)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 "Kill the sexp (balanced expression) following the cursor.
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
144 With non-nil COUNT, kill that many sexps after the cursor.
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
145 Negative COUNT means kill -COUNT sexps before the cursor."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 (interactive "p")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 (let ((opoint (point)))
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
148 (forward-sexp (or count 1))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 (kill-region opoint (point))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
151 (defun backward-kill-sexp (&optional count)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 "Kill the sexp (balanced expression) preceding the cursor.
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
153 With non-nil COUNT, kill that many sexps before the cursor.
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
154 Negative COUNT means kill -COUNT sexps after the cursor."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 (interactive "p")
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
156 (kill-sexp (- (or count 1))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157
4696
ecc468b62551 funcall beginning-of-defun-function arg
andreas.roehler@online.de
parents: 3543
diff changeset
158
ecc468b62551 funcall beginning-of-defun-function arg
andreas.roehler@online.de
parents: 3543
diff changeset
159 ;; derived stuff from GNU Emacs
ecc468b62551 funcall beginning-of-defun-function arg
andreas.roehler@online.de
parents: 3543
diff changeset
160 (defvar beginning-of-defun-function nil
4724
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
161 "If non-nil, this function will be called by `beginning-of-defun-raw'.
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
162 It will be called with one argument, which is a repetition count.
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
163 It provides an alternative algorithm to find the beginning of the current
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
164 defun instead of using the standard one implemented by `beginning-of-defun'.
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
165 See also `defun-prompt-regexp' for minor tweaks.")
4712
a46d7513a364 `beginning-of-defun-function', `end-of-defun-function'
Andreas Roehler <andreas.roehler@online.de>
parents: 4705
diff changeset
166 (make-variable-buffer-local 'beginning-of-defun-function)
4696
ecc468b62551 funcall beginning-of-defun-function arg
andreas.roehler@online.de
parents: 3543
diff changeset
167
ecc468b62551 funcall beginning-of-defun-function arg
andreas.roehler@online.de
parents: 3543
diff changeset
168 (defvar end-of-defun-function nil
4724
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
169 "If non-nil, this function will be called by `end-of-defun'.
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
170 It will be called with no arguments. \(Repetition is implemented in
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
171 `end-of-defun' by calling this function that many times.)
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
172 This function provides an alternative algorithm to find the end
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
173 of the current defun instead of using the standard one implemented by
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
174 `end-of-defun'.
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
175 ")
4712
a46d7513a364 `beginning-of-defun-function', `end-of-defun-function'
Andreas Roehler <andreas.roehler@online.de>
parents: 4705
diff changeset
176 (make-variable-buffer-local 'end-of-defun-function)
4696
ecc468b62551 funcall beginning-of-defun-function arg
andreas.roehler@online.de
parents: 3543
diff changeset
177
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
178 (defun beginning-of-defun (&optional count)
4724
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
179 "Move backward to the beginning of the current defun.
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
180 With COUNT, do it that many times. Negative COUNT
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
181 means move forward to -COUNTth following beginning of defun.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 Returns t unless search stops due to beginning or end of buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183
4724
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
184 In the default implementation provided by `beginning-of-defun-raw',
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
185 a defun starts at a char with open-parenthesis syntax at the beginning
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
186 of a line. If `defun-prompt-regexp' is non-nil, then a string which
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
187 matches that regexp may precede the open-parenthesis. Alternatively,
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
188 if `beginning-of-defun-function' is non-nil, that function is called,
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
189 and none of the default processing is done.
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
190
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
191 If the beginning of defun function returns t, point moves to the
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
192 beginning of the line containing the beginning of defun."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 ;; XEmacs change (for zmacs regions)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 (interactive "_p")
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
195 (and (beginning-of-defun-raw count)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 (progn (beginning-of-line) t)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
198 (defun beginning-of-defun-raw (&optional count)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 "Move point to the character that starts a defun.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 This is identical to beginning-of-defun, except that point does not move
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 to the beginning of the line when `defun-prompt-regexp' is non-nil."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 (interactive "p")
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
203 (unless count (setq count 1))
4705
7b90173970ad Unbreak `beginning-of-defun'.
Mike Sperber <sperber@deinprogramm.de>
parents: 4696
diff changeset
204 (if beginning-of-defun-function
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
205 (funcall beginning-of-defun-function count)
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
206 (and (< count 0) (not (eobp)) (forward-char 1))
4705
7b90173970ad Unbreak `beginning-of-defun'.
Mike Sperber <sperber@deinprogramm.de>
parents: 4696
diff changeset
207 (and
7b90173970ad Unbreak `beginning-of-defun'.
Mike Sperber <sperber@deinprogramm.de>
parents: 4696
diff changeset
208 (re-search-backward (if defun-prompt-regexp
7b90173970ad Unbreak `beginning-of-defun'.
Mike Sperber <sperber@deinprogramm.de>
parents: 4696
diff changeset
209 (concat "^\\s(\\|"
7b90173970ad Unbreak `beginning-of-defun'.
Mike Sperber <sperber@deinprogramm.de>
parents: 4696
diff changeset
210 "\\(" defun-prompt-regexp "\\)\\s(")
7b90173970ad Unbreak `beginning-of-defun'.
Mike Sperber <sperber@deinprogramm.de>
parents: 4696
diff changeset
211 "^\\s(")
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
212 nil 'move count)
4705
7b90173970ad Unbreak `beginning-of-defun'.
Mike Sperber <sperber@deinprogramm.de>
parents: 4696
diff changeset
213 (progn (goto-char (1- (match-end 0)))) t)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 ;; XEmacs change (optional buffer parameter)
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
216 (defun buffer-end (direction &optional buffer)
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
217 "Return `point-max' of BUFFER if DIRECTION > 0, else return `point-min'.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 BUFFER defaults to the current buffer if omitted."
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
219 (if (> direction 0) (point-max buffer) (point-min buffer)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
221 (defun end-of-defun (&optional count)
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
222 "Move forward to next end of defun.
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
223 Non-nil COUNT means do it that many times (default is 1).
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
224 Negative COUNT means move back to -COUNTth preceding end of defun.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225
4724
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
226 In the default implementation, the end of a defun is the end of the
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
227 s-expression started at the character identified by `beginning-of-defun'.
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
228
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
229 If `end-of-defun-function' is non-nil, none of the default processing is
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
230 done. For a repetition count greater than 1, `end-of-defun-function' is
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
231 called that many times. If the repetition count is less than 1, nothing
7eef89a3d41f Improve docstrings of defun movement functions.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4712
diff changeset
232 is done. \(This is a bug.)"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 ;; XEmacs change (for zmacs regions)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 (interactive "_p")
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
235 (if (or (null count) (= count 0)) (setq count 1))
4696
ecc468b62551 funcall beginning-of-defun-function arg
andreas.roehler@online.de
parents: 3543
diff changeset
236 (if end-of-defun-function
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
237 (if (> count 0)
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
238 (dotimes (i count)
4696
ecc468b62551 funcall beginning-of-defun-function arg
andreas.roehler@online.de
parents: 3543
diff changeset
239 (funcall end-of-defun-function)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 (let ((first t))
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
241 (while (and (> count 0) (< (point) (point-max)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 (let ((pos (point))) ; XEmacs -- remove unused npos.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 (while (progn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 (if (and first
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 (progn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 (end-of-line 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 (beginning-of-defun-raw 1)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 nil
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
249 (or (bobp) (backward-char 1))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 (beginning-of-defun-raw -1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 (setq first nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 (forward-list 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 (skip-chars-forward " \t")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 (if (looking-at "\\s<\\|\n")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 (forward-line 1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 (<= (point) pos))))
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
257 (setq count (1- count)))
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
258 (while (< count 0)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 (let ((pos (point)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 (beginning-of-defun-raw 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 (forward-sexp 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 (forward-line 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 (if (>= (point) pos)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 (if (beginning-of-defun-raw 2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 (progn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 (forward-list 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 (skip-chars-forward " \t")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 (if (looking-at "\\s<\\|\n")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 (forward-line 1)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 (goto-char (point-min)))))
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
271 (setq count (1+ count))))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 (defun mark-defun ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 "Put mark at end of this defun, point at beginning.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 The defun marked is the one that contains point or follows point."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 (push-mark (point))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 (end-of-defun)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 (push-mark (point) nil t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 (beginning-of-defun)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 (re-search-backward "^\n" (- (point) 1) t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 (defun narrow-to-defun (&optional arg)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284 "Make text outside current defun invisible.
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
285 The defun visible is the one that contains point or follows point.
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
286 Optional ARG is currently ignored."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 (save-excursion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 (widen)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 (end-of-defun)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 (let ((end (point)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 (beginning-of-defun)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 (narrow-to-region (point) end))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
295 (defun insert-parentheses (count)
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
296 "Enclose following COUNT sexps in parentheses. Leave point after open-paren.
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
297 A negative COUNT encloses the preceding -COUNT sexps instead.
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
298 COUNT defaults to zero: just insert `()' and leave point between.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 If `parens-require-spaces' is non-nil, this command also inserts a space
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 before and after, depending on the surrounding characters."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 (interactive "P")
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
302 (if count (setq count (prefix-numeric-value count))
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
303 (setq count 0))
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
304 (cond ((> count 0) (skip-chars-forward " \t"))
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
305 ((< count 0) (forward-sexp count) (setq count (- count))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 (and parens-require-spaces
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 (not (bobp))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 (memq (char-syntax (char-before (point))) '(?w ?_ ?\) ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 (insert " "))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 (insert ?\()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 (save-excursion
4726
4bbda1c11a7b Improve argument names and update docstrings.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4724
diff changeset
312 (or (eq count 0) (forward-sexp count))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 (insert ?\))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 (and parens-require-spaces
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 (not (eobp))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 (memq (char-syntax (char-after (point))) '(?w ?_ ?\( ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 (insert " "))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 (defun move-past-close-and-reindent ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 "Move past next `)', delete indentation before it, then indent after it."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322 (up-list 1)
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
323 (backward-char 1)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 (while (save-excursion ; this is my contribution
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 (let ((before-paren (point)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 (back-to-indentation)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 (= (point) before-paren)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 (delete-indentation))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 (forward-char 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330 (newline-and-indent))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 (defun lisp-complete-symbol ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 "Perform completion on Lisp symbol preceding point.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 Compare that symbol against the known Lisp symbols.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 The context determines which symbols are considered.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 If the symbol starts just after an open-parenthesis, only symbols
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 with function definitions are considered. Otherwise, all symbols with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 function definitions, values or properties are considered."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 (let* ((end (point))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 (buffer-syntax (syntax-table))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 (beg (unwind-protect
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 (save-excursion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 ;; XEmacs change
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 (if emacs-lisp-mode-syntax-table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 (set-syntax-table emacs-lisp-mode-syntax-table))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 (backward-sexp 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 (while (eq (char-syntax (char-after (point))) ?\')
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 (forward-char 1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 (point))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 (set-syntax-table buffer-syntax)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 (pattern (buffer-substring beg end))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 (predicate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 (if (eq (char-after (1- beg)) ?\()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 'fboundp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 ;; XEmacs change
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 #'(lambda (sym)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 (or (boundp sym) (fboundp sym)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 (symbol-plist sym)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 (completion (try-completion pattern obarray predicate)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 (cond ((eq completion t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 ((null completion)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 (message "Can't find completion for \"%s\"" pattern)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 (ding))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 ((not (string= pattern completion))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 (delete-region beg end)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 (insert completion))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 (message "Making completion list...")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 (let ((list (all-completions pattern obarray predicate))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 ;FSFmacs crock unnecessary in XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 ;see minibuf.el
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 ;(completion-fixup-function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 ; (function (lambda () (if (save-excursion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 ; (goto-char (max (point-min)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 ; (- (point) 4)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 ; (looking-at " <f>"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 ; (forward-char -4))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381 (or (eq predicate 'fboundp)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 (let (new)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 (while list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384 (setq new (cons (if (fboundp (intern (car list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 (list (car list) " <f>")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386 (car list))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387 new))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 (setq list (cdr list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 (setq list (nreverse new))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390 (with-output-to-temp-buffer "*Completions*"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 (display-completion-list list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392 (message "Making completion list...%s" "done")))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 ;;; lisp.el ends here