annotate lisp/subr.el @ 45246:aec4852e765a

(functionp): Catch errors in indirect-function.
author Richard M. Stallman <rms@gnu.org>
date Sun, 12 May 2002 16:41:11 +0000
parents 829beb9a6a4b
children 02df8e2ff88b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 648
diff changeset
1 ;;; subr.el --- basic lisp subroutines for Emacs
787
3cece0106722 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 779
diff changeset
2
44129
444bd245e176 (macro-declaration-function): New function. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 43833
diff changeset
3 ;; Copyright (C) 1985, 86, 92, 94, 95, 99, 2000, 2001, 2002
36094
fddc05f3f926 (read-passwd): Clear Lisp memory holding password.
Gerd Moellmann <gerd@gnu.org>
parents: 35281
diff changeset
4 ;; Free Software Foundation, Inc.
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
5
45078
829beb9a6a4b Follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 44980
diff changeset
6 ;; Maintainer: FSF
829beb9a6a4b Follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 44980
diff changeset
7 ;; Keywords: internal
829beb9a6a4b Follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 44980
diff changeset
8
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
10
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
707
e4253da532fb *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
14 ;; any later version.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
15
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
20
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13936
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13936
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13936
diff changeset
24 ;; Boston, MA 02111-1307, USA.
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
25
38414
67b464da13ec Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 37070
diff changeset
26 ;;; Commentary:
67b464da13ec Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 37070
diff changeset
27
787
3cece0106722 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 779
diff changeset
28 ;;; Code:
18880
1ed40ed8e0c1 (custom-declare-variable-early): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18828
diff changeset
29 (defvar custom-declare-variable-list nil
1ed40ed8e0c1 (custom-declare-variable-early): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18828
diff changeset
30 "Record `defcustom' calls made before `custom.el' is loaded to handle them.
1ed40ed8e0c1 (custom-declare-variable-early): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18828
diff changeset
31 Each element of this list holds the arguments to one call to `defcustom'.")
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
32
19662
791a40c16c0b Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 19584
diff changeset
33 ;; Use this, rather than defcustom, in subr.el and other files loaded
18880
1ed40ed8e0c1 (custom-declare-variable-early): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18828
diff changeset
34 ;; before custom.el.
1ed40ed8e0c1 (custom-declare-variable-early): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18828
diff changeset
35 (defun custom-declare-variable-early (&rest arguments)
1ed40ed8e0c1 (custom-declare-variable-early): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18828
diff changeset
36 (setq custom-declare-variable-list
1ed40ed8e0c1 (custom-declare-variable-early): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18828
diff changeset
37 (cons arguments custom-declare-variable-list)))
44129
444bd245e176 (macro-declaration-function): New function. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 43833
diff changeset
38
444bd245e176 (macro-declaration-function): New function. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 43833
diff changeset
39
444bd245e176 (macro-declaration-function): New function. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 43833
diff changeset
40 (defun macro-declaration-function (macro decl)
444bd245e176 (macro-declaration-function): New function. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 43833
diff changeset
41 "Process a declaration found in a macro definition.
444bd245e176 (macro-declaration-function): New function. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 43833
diff changeset
42 This is set as the value of the variable `macro-declaration-function'.
444bd245e176 (macro-declaration-function): New function. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 43833
diff changeset
43 MACRO is the name of the macro being defined.
444bd245e176 (macro-declaration-function): New function. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 43833
diff changeset
44 DECL is a list `(declare ...)' containing the declarations.
444bd245e176 (macro-declaration-function): New function. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 43833
diff changeset
45 The return value of this function is not used."
444bd245e176 (macro-declaration-function): New function. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 43833
diff changeset
46 (dolist (d (cdr decl))
444bd245e176 (macro-declaration-function): New function. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 43833
diff changeset
47 (cond ((and (consp d) (eq (car d) 'indent))
444bd245e176 (macro-declaration-function): New function. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 43833
diff changeset
48 (put macro 'lisp-indent-function (cadr d)))
444bd245e176 (macro-declaration-function): New function. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 43833
diff changeset
49 ((and (consp d) (eq (car d) 'debug))
444bd245e176 (macro-declaration-function): New function. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 43833
diff changeset
50 (put macro 'edebug-form-spec (cadr d)))
444bd245e176 (macro-declaration-function): New function. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 43833
diff changeset
51 (t
444bd245e176 (macro-declaration-function): New function. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 43833
diff changeset
52 (message "Unknown declaration %s" d)))))
444bd245e176 (macro-declaration-function): New function. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 43833
diff changeset
53
444bd245e176 (macro-declaration-function): New function. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 43833
diff changeset
54 (setq macro-declaration-function 'macro-declaration-function)
444bd245e176 (macro-declaration-function): New function. Set the
Gerd Moellmann <gerd@gnu.org>
parents: 43833
diff changeset
55
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
56
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
57 ;;;; Lisp language features.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
58
40822
b10e7d6fb95b (with-local-quit): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40282
diff changeset
59 (defalias 'not 'null)
b10e7d6fb95b (with-local-quit): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40282
diff changeset
60
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
61 (defmacro lambda (&rest cdr)
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
62 "Return a lambda expression.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
63 A call of the form (lambda ARGS DOCSTRING INTERACTIVE BODY) is
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
64 self-quoting; the result of evaluating the lambda expression is the
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
65 expression itself. The lambda expression may then be treated as a
10178
be0081d9ba76 (lambda): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 10025
diff changeset
66 function, i.e., stored as the function value of a symbol, passed to
be0081d9ba76 (lambda): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 10025
diff changeset
67 funcall or mapcar, etc.
be0081d9ba76 (lambda): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 10025
diff changeset
68
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
69 ARGS should take the same form as an argument list for a `defun'.
12395
71727759437e (lambda): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12296
diff changeset
70 DOCSTRING is an optional documentation string.
71727759437e (lambda): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12296
diff changeset
71 If present, it should describe how to call the function.
71727759437e (lambda): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12296
diff changeset
72 But documentation strings are usually not useful in nameless functions.
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
73 INTERACTIVE should be a call to the function `interactive', which see.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
74 It may also be omitted.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
75 BODY should be a list of lisp expressions."
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
76 ;; Note that this definition should not use backquotes; subr.el should not
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
77 ;; depend on backquote.el.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
78 (list 'function (cons 'lambda cdr)))
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
79
25437
95301c74bdd9 Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 25436
diff changeset
80 (defmacro push (newelt listname)
25580
b76f1a72649a (push): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 25469
diff changeset
81 "Add NEWELT to the list stored in the symbol LISTNAME.
25437
95301c74bdd9 Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 25436
diff changeset
82 This is equivalent to (setq LISTNAME (cons NEWELT LISTNAME)).
25436
d24cf1a4dd34 (push, pop): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 25295
diff changeset
83 LISTNAME must be a symbol."
25469
6762c8a75fd7 (push): Fix typo.
Dave Love <fx@gnu.org>
parents: 25437
diff changeset
84 (list 'setq listname
6762c8a75fd7 (push): Fix typo.
Dave Love <fx@gnu.org>
parents: 25437
diff changeset
85 (list 'cons newelt listname)))
25436
d24cf1a4dd34 (push, pop): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 25295
diff changeset
86
d24cf1a4dd34 (push, pop): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 25295
diff changeset
87 (defmacro pop (listname)
d24cf1a4dd34 (push, pop): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 25295
diff changeset
88 "Return the first element of LISTNAME's value, and remove it from the list.
d24cf1a4dd34 (push, pop): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 25295
diff changeset
89 LISTNAME must be a symbol whose value is a list.
d24cf1a4dd34 (push, pop): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 25295
diff changeset
90 If the value is nil, `pop' returns nil but does not actually
d24cf1a4dd34 (push, pop): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 25295
diff changeset
91 change the list."
d24cf1a4dd34 (push, pop): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 25295
diff changeset
92 (list 'prog1 (list 'car listname)
d24cf1a4dd34 (push, pop): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 25295
diff changeset
93 (list 'setq listname (list 'cdr listname))))
d24cf1a4dd34 (push, pop): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 25295
diff changeset
94
16845
adc714dc8e3c (when, unless): Definitions moved from cl.el.
Richard M. Stallman <rms@gnu.org>
parents: 16556
diff changeset
95 (defmacro when (cond &rest body)
27810
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
96 "If COND yields non-nil, do BODY, else return nil."
16845
adc714dc8e3c (when, unless): Definitions moved from cl.el.
Richard M. Stallman <rms@gnu.org>
parents: 16556
diff changeset
97 (list 'if cond (cons 'progn body)))
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
98
16845
adc714dc8e3c (when, unless): Definitions moved from cl.el.
Richard M. Stallman <rms@gnu.org>
parents: 16556
diff changeset
99 (defmacro unless (cond &rest body)
27810
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
100 "If COND yields nil, do BODY, else return nil."
16845
adc714dc8e3c (when, unless): Definitions moved from cl.el.
Richard M. Stallman <rms@gnu.org>
parents: 16556
diff changeset
101 (cons 'if (cons cond (cons nil body))))
19491
f5fd22f3462c (caar, cadr, cdar, cddr): Definitions moved here and changed into defsubsts.
Richard M. Stallman <rms@gnu.org>
parents: 19176
diff changeset
102
27376
674b7f75841e (dolist, dotimes): Moved from cl-macs.el.
Richard M. Stallman <rms@gnu.org>
parents: 27297
diff changeset
103 (defmacro dolist (spec &rest body)
674b7f75841e (dolist, dotimes): Moved from cl-macs.el.
Richard M. Stallman <rms@gnu.org>
parents: 27297
diff changeset
104 "(dolist (VAR LIST [RESULT]) BODY...): loop over a list.
674b7f75841e (dolist, dotimes): Moved from cl-macs.el.
Richard M. Stallman <rms@gnu.org>
parents: 27297
diff changeset
105 Evaluate BODY with VAR bound to each car from LIST, in turn.
674b7f75841e (dolist, dotimes): Moved from cl-macs.el.
Richard M. Stallman <rms@gnu.org>
parents: 27297
diff changeset
106 Then evaluate RESULT to get return value, default nil."
27383
b1b3e778f7ac Make the definitions of dolist and dotimes work
Richard M. Stallman <rms@gnu.org>
parents: 27376
diff changeset
107 (let ((temp (make-symbol "--dolist-temp--")))
b1b3e778f7ac Make the definitions of dolist and dotimes work
Richard M. Stallman <rms@gnu.org>
parents: 27376
diff changeset
108 (list 'let (list (list temp (nth 1 spec)) (car spec))
b1b3e778f7ac Make the definitions of dolist and dotimes work
Richard M. Stallman <rms@gnu.org>
parents: 27376
diff changeset
109 (list 'while temp
b1b3e778f7ac Make the definitions of dolist and dotimes work
Richard M. Stallman <rms@gnu.org>
parents: 27376
diff changeset
110 (list 'setq (car spec) (list 'car temp))
b1b3e778f7ac Make the definitions of dolist and dotimes work
Richard M. Stallman <rms@gnu.org>
parents: 27376
diff changeset
111 (cons 'progn
b1b3e778f7ac Make the definitions of dolist and dotimes work
Richard M. Stallman <rms@gnu.org>
parents: 27376
diff changeset
112 (append body
b1b3e778f7ac Make the definitions of dolist and dotimes work
Richard M. Stallman <rms@gnu.org>
parents: 27376
diff changeset
113 (list (list 'setq temp (list 'cdr temp))))))
b1b3e778f7ac Make the definitions of dolist and dotimes work
Richard M. Stallman <rms@gnu.org>
parents: 27376
diff changeset
114 (if (cdr (cdr spec))
b1b3e778f7ac Make the definitions of dolist and dotimes work
Richard M. Stallman <rms@gnu.org>
parents: 27376
diff changeset
115 (cons 'progn
b1b3e778f7ac Make the definitions of dolist and dotimes work
Richard M. Stallman <rms@gnu.org>
parents: 27376
diff changeset
116 (cons (list 'setq (car spec) nil) (cdr (cdr spec))))))))
27376
674b7f75841e (dolist, dotimes): Moved from cl-macs.el.
Richard M. Stallman <rms@gnu.org>
parents: 27297
diff changeset
117
674b7f75841e (dolist, dotimes): Moved from cl-macs.el.
Richard M. Stallman <rms@gnu.org>
parents: 27297
diff changeset
118 (defmacro dotimes (spec &rest body)
674b7f75841e (dolist, dotimes): Moved from cl-macs.el.
Richard M. Stallman <rms@gnu.org>
parents: 27297
diff changeset
119 "(dotimes (VAR COUNT [RESULT]) BODY...): loop a certain number of times.
674b7f75841e (dolist, dotimes): Moved from cl-macs.el.
Richard M. Stallman <rms@gnu.org>
parents: 27297
diff changeset
120 Evaluate BODY with VAR bound to successive integers running from 0,
674b7f75841e (dolist, dotimes): Moved from cl-macs.el.
Richard M. Stallman <rms@gnu.org>
parents: 27297
diff changeset
121 inclusive, to COUNT, exclusive. Then evaluate RESULT to get
674b7f75841e (dolist, dotimes): Moved from cl-macs.el.
Richard M. Stallman <rms@gnu.org>
parents: 27297
diff changeset
122 the return value (nil if RESULT is omitted)."
27383
b1b3e778f7ac Make the definitions of dolist and dotimes work
Richard M. Stallman <rms@gnu.org>
parents: 27376
diff changeset
123 (let ((temp (make-symbol "--dotimes-temp--")))
b1b3e778f7ac Make the definitions of dolist and dotimes work
Richard M. Stallman <rms@gnu.org>
parents: 27376
diff changeset
124 (list 'let (list (list temp (nth 1 spec)) (list (car spec) 0))
b1b3e778f7ac Make the definitions of dolist and dotimes work
Richard M. Stallman <rms@gnu.org>
parents: 27376
diff changeset
125 (list 'while (list '< (car spec) temp)
b1b3e778f7ac Make the definitions of dolist and dotimes work
Richard M. Stallman <rms@gnu.org>
parents: 27376
diff changeset
126 (cons 'progn
b1b3e778f7ac Make the definitions of dolist and dotimes work
Richard M. Stallman <rms@gnu.org>
parents: 27376
diff changeset
127 (append body (list (list 'setq (car spec)
b1b3e778f7ac Make the definitions of dolist and dotimes work
Richard M. Stallman <rms@gnu.org>
parents: 27376
diff changeset
128 (list '1+ (car spec)))))))
b1b3e778f7ac Make the definitions of dolist and dotimes work
Richard M. Stallman <rms@gnu.org>
parents: 27376
diff changeset
129 (if (cdr (cdr spec))
b1b3e778f7ac Make the definitions of dolist and dotimes work
Richard M. Stallman <rms@gnu.org>
parents: 27376
diff changeset
130 (car (cdr (cdr spec)))
b1b3e778f7ac Make the definitions of dolist and dotimes work
Richard M. Stallman <rms@gnu.org>
parents: 27376
diff changeset
131 nil))))
27376
674b7f75841e (dolist, dotimes): Moved from cl-macs.el.
Richard M. Stallman <rms@gnu.org>
parents: 27297
diff changeset
132
19491
f5fd22f3462c (caar, cadr, cdar, cddr): Definitions moved here and changed into defsubsts.
Richard M. Stallman <rms@gnu.org>
parents: 19176
diff changeset
133 (defsubst caar (x)
f5fd22f3462c (caar, cadr, cdar, cddr): Definitions moved here and changed into defsubsts.
Richard M. Stallman <rms@gnu.org>
parents: 19176
diff changeset
134 "Return the car of the car of X."
f5fd22f3462c (caar, cadr, cdar, cddr): Definitions moved here and changed into defsubsts.
Richard M. Stallman <rms@gnu.org>
parents: 19176
diff changeset
135 (car (car x)))
f5fd22f3462c (caar, cadr, cdar, cddr): Definitions moved here and changed into defsubsts.
Richard M. Stallman <rms@gnu.org>
parents: 19176
diff changeset
136
f5fd22f3462c (caar, cadr, cdar, cddr): Definitions moved here and changed into defsubsts.
Richard M. Stallman <rms@gnu.org>
parents: 19176
diff changeset
137 (defsubst cadr (x)
f5fd22f3462c (caar, cadr, cdar, cddr): Definitions moved here and changed into defsubsts.
Richard M. Stallman <rms@gnu.org>
parents: 19176
diff changeset
138 "Return the car of the cdr of X."
f5fd22f3462c (caar, cadr, cdar, cddr): Definitions moved here and changed into defsubsts.
Richard M. Stallman <rms@gnu.org>
parents: 19176
diff changeset
139 (car (cdr x)))
f5fd22f3462c (caar, cadr, cdar, cddr): Definitions moved here and changed into defsubsts.
Richard M. Stallman <rms@gnu.org>
parents: 19176
diff changeset
140
f5fd22f3462c (caar, cadr, cdar, cddr): Definitions moved here and changed into defsubsts.
Richard M. Stallman <rms@gnu.org>
parents: 19176
diff changeset
141 (defsubst cdar (x)
f5fd22f3462c (caar, cadr, cdar, cddr): Definitions moved here and changed into defsubsts.
Richard M. Stallman <rms@gnu.org>
parents: 19176
diff changeset
142 "Return the cdr of the car of X."
f5fd22f3462c (caar, cadr, cdar, cddr): Definitions moved here and changed into defsubsts.
Richard M. Stallman <rms@gnu.org>
parents: 19176
diff changeset
143 (cdr (car x)))
f5fd22f3462c (caar, cadr, cdar, cddr): Definitions moved here and changed into defsubsts.
Richard M. Stallman <rms@gnu.org>
parents: 19176
diff changeset
144
f5fd22f3462c (caar, cadr, cdar, cddr): Definitions moved here and changed into defsubsts.
Richard M. Stallman <rms@gnu.org>
parents: 19176
diff changeset
145 (defsubst cddr (x)
f5fd22f3462c (caar, cadr, cdar, cddr): Definitions moved here and changed into defsubsts.
Richard M. Stallman <rms@gnu.org>
parents: 19176
diff changeset
146 "Return the cdr of the cdr of X."
f5fd22f3462c (caar, cadr, cdar, cddr): Definitions moved here and changed into defsubsts.
Richard M. Stallman <rms@gnu.org>
parents: 19176
diff changeset
147 (cdr (cdr x)))
19492
892a09772457 (last): New function.
Richard M. Stallman <rms@gnu.org>
parents: 19491
diff changeset
148
19584
17db1ee36bbb (last): Accept optional second argument.
Richard M. Stallman <rms@gnu.org>
parents: 19492
diff changeset
149 (defun last (x &optional n)
17db1ee36bbb (last): Accept optional second argument.
Richard M. Stallman <rms@gnu.org>
parents: 19492
diff changeset
150 "Return the last link of the list X. Its car is the last element.
17db1ee36bbb (last): Accept optional second argument.
Richard M. Stallman <rms@gnu.org>
parents: 19492
diff changeset
151 If X is nil, return nil.
17db1ee36bbb (last): Accept optional second argument.
Richard M. Stallman <rms@gnu.org>
parents: 19492
diff changeset
152 If N is non-nil, return the Nth-to-last link of X.
17db1ee36bbb (last): Accept optional second argument.
Richard M. Stallman <rms@gnu.org>
parents: 19492
diff changeset
153 If N is bigger than the length of X, return X."
17db1ee36bbb (last): Accept optional second argument.
Richard M. Stallman <rms@gnu.org>
parents: 19492
diff changeset
154 (if n
17db1ee36bbb (last): Accept optional second argument.
Richard M. Stallman <rms@gnu.org>
parents: 19492
diff changeset
155 (let ((m 0) (p x))
17db1ee36bbb (last): Accept optional second argument.
Richard M. Stallman <rms@gnu.org>
parents: 19492
diff changeset
156 (while (consp p)
17db1ee36bbb (last): Accept optional second argument.
Richard M. Stallman <rms@gnu.org>
parents: 19492
diff changeset
157 (setq m (1+ m) p (cdr p)))
17db1ee36bbb (last): Accept optional second argument.
Richard M. Stallman <rms@gnu.org>
parents: 19492
diff changeset
158 (if (<= n 0) p
17db1ee36bbb (last): Accept optional second argument.
Richard M. Stallman <rms@gnu.org>
parents: 19492
diff changeset
159 (if (< n m) (nthcdr (- m n) x) x)))
35281
be18bd846968 (last): Handle a list that doesn't end in nil.
Richard M. Stallman <rms@gnu.org>
parents: 35231
diff changeset
160 (while (consp (cdr x))
19584
17db1ee36bbb (last): Accept optional second argument.
Richard M. Stallman <rms@gnu.org>
parents: 19492
diff changeset
161 (setq x (cdr x)))
17db1ee36bbb (last): Accept optional second argument.
Richard M. Stallman <rms@gnu.org>
parents: 19492
diff changeset
162 x))
22860
349fa4ee1f27 (assoc-default): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22755
diff changeset
163
34898
1486728b21f0 (butlast, nbutlast): Moved from cl.el to here.
Kenichi Handa <handa@m17n.org>
parents: 34853
diff changeset
164 (defun butlast (x &optional n)
1486728b21f0 (butlast, nbutlast): Moved from cl.el to here.
Kenichi Handa <handa@m17n.org>
parents: 34853
diff changeset
165 "Returns a copy of LIST with the last N elements removed."
1486728b21f0 (butlast, nbutlast): Moved from cl.el to here.
Kenichi Handa <handa@m17n.org>
parents: 34853
diff changeset
166 (if (and n (<= n 0)) x
1486728b21f0 (butlast, nbutlast): Moved from cl.el to here.
Kenichi Handa <handa@m17n.org>
parents: 34853
diff changeset
167 (nbutlast (copy-sequence x) n)))
1486728b21f0 (butlast, nbutlast): Moved from cl.el to here.
Kenichi Handa <handa@m17n.org>
parents: 34853
diff changeset
168
1486728b21f0 (butlast, nbutlast): Moved from cl.el to here.
Kenichi Handa <handa@m17n.org>
parents: 34853
diff changeset
169 (defun nbutlast (x &optional n)
1486728b21f0 (butlast, nbutlast): Moved from cl.el to here.
Kenichi Handa <handa@m17n.org>
parents: 34853
diff changeset
170 "Modifies LIST to remove the last N elements."
1486728b21f0 (butlast, nbutlast): Moved from cl.el to here.
Kenichi Handa <handa@m17n.org>
parents: 34853
diff changeset
171 (let ((m (length x)))
1486728b21f0 (butlast, nbutlast): Moved from cl.el to here.
Kenichi Handa <handa@m17n.org>
parents: 34853
diff changeset
172 (or n (setq n 1))
1486728b21f0 (butlast, nbutlast): Moved from cl.el to here.
Kenichi Handa <handa@m17n.org>
parents: 34853
diff changeset
173 (and (< n m)
1486728b21f0 (butlast, nbutlast): Moved from cl.el to here.
Kenichi Handa <handa@m17n.org>
parents: 34853
diff changeset
174 (progn
1486728b21f0 (butlast, nbutlast): Moved from cl.el to here.
Kenichi Handa <handa@m17n.org>
parents: 34853
diff changeset
175 (if (> n 0) (setcdr (nthcdr (- (1- m) n) x) nil))
1486728b21f0 (butlast, nbutlast): Moved from cl.el to here.
Kenichi Handa <handa@m17n.org>
parents: 34853
diff changeset
176 x))))
1486728b21f0 (butlast, nbutlast): Moved from cl.el to here.
Kenichi Handa <handa@m17n.org>
parents: 34853
diff changeset
177
30515
6165183bc490 (remove, remq): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 29354
diff changeset
178 (defun remove (elt seq)
42941
b722504d0ba4 (remove): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 42938
diff changeset
179 "Return a copy of SEQ with all occurrences of ELT removed.
30515
6165183bc490 (remove, remq): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 29354
diff changeset
180 SEQ must be a list, vector, or string. The comparison is done with `equal'."
6165183bc490 (remove, remq): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 29354
diff changeset
181 (if (nlistp seq)
6165183bc490 (remove, remq): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 29354
diff changeset
182 ;; If SEQ isn't a list, there's no need to copy SEQ because
6165183bc490 (remove, remq): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 29354
diff changeset
183 ;; `delete' will return a new object.
6165183bc490 (remove, remq): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 29354
diff changeset
184 (delete elt seq)
6165183bc490 (remove, remq): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 29354
diff changeset
185 (delete elt (copy-sequence seq))))
6165183bc490 (remove, remq): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 29354
diff changeset
186
6165183bc490 (remove, remq): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 29354
diff changeset
187 (defun remq (elt list)
6165183bc490 (remove, remq): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 29354
diff changeset
188 "Return a copy of LIST with all occurences of ELT removed.
6165183bc490 (remove, remq): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 29354
diff changeset
189 The comparison is done with `eq'."
6165183bc490 (remove, remq): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 29354
diff changeset
190 (if (memq elt list)
6165183bc490 (remove, remq): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 29354
diff changeset
191 (delq elt (copy-sequence list))
6165183bc490 (remove, remq): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 29354
diff changeset
192 list))
6165183bc490 (remove, remq): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 29354
diff changeset
193
22959
73a21b5f9bd8 (assoc-default): Rewrite not to use dolist.
Richard M. Stallman <rms@gnu.org>
parents: 22860
diff changeset
194 (defun assoc-default (key alist &optional test default)
73a21b5f9bd8 (assoc-default): Rewrite not to use dolist.
Richard M. Stallman <rms@gnu.org>
parents: 22860
diff changeset
195 "Find object KEY in a pseudo-alist ALIST.
73a21b5f9bd8 (assoc-default): Rewrite not to use dolist.
Richard M. Stallman <rms@gnu.org>
parents: 22860
diff changeset
196 ALIST is a list of conses or objects. Each element (or the element's car,
73a21b5f9bd8 (assoc-default): Rewrite not to use dolist.
Richard M. Stallman <rms@gnu.org>
parents: 22860
diff changeset
197 if it is a cons) is compared with KEY by evaluating (TEST (car elt) KEY).
73a21b5f9bd8 (assoc-default): Rewrite not to use dolist.
Richard M. Stallman <rms@gnu.org>
parents: 22860
diff changeset
198 If that is non-nil, the element matches;
73a21b5f9bd8 (assoc-default): Rewrite not to use dolist.
Richard M. Stallman <rms@gnu.org>
parents: 22860
diff changeset
199 then `assoc-default' returns the element's cdr, if it is a cons,
22860
349fa4ee1f27 (assoc-default): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22755
diff changeset
200 or DEFAULT if the element is not a cons.
22959
73a21b5f9bd8 (assoc-default): Rewrite not to use dolist.
Richard M. Stallman <rms@gnu.org>
parents: 22860
diff changeset
201
73a21b5f9bd8 (assoc-default): Rewrite not to use dolist.
Richard M. Stallman <rms@gnu.org>
parents: 22860
diff changeset
202 If no element matches, the value is nil.
73a21b5f9bd8 (assoc-default): Rewrite not to use dolist.
Richard M. Stallman <rms@gnu.org>
parents: 22860
diff changeset
203 If TEST is omitted or nil, `equal' is used."
73a21b5f9bd8 (assoc-default): Rewrite not to use dolist.
Richard M. Stallman <rms@gnu.org>
parents: 22860
diff changeset
204 (let (found (tail alist) value)
73a21b5f9bd8 (assoc-default): Rewrite not to use dolist.
Richard M. Stallman <rms@gnu.org>
parents: 22860
diff changeset
205 (while (and tail (not found))
73a21b5f9bd8 (assoc-default): Rewrite not to use dolist.
Richard M. Stallman <rms@gnu.org>
parents: 22860
diff changeset
206 (let ((elt (car tail)))
73a21b5f9bd8 (assoc-default): Rewrite not to use dolist.
Richard M. Stallman <rms@gnu.org>
parents: 22860
diff changeset
207 (when (funcall (or test 'equal) (if (consp elt) (car elt) elt) key)
73a21b5f9bd8 (assoc-default): Rewrite not to use dolist.
Richard M. Stallman <rms@gnu.org>
parents: 22860
diff changeset
208 (setq found t value (if (consp elt) (cdr elt) default))))
73a21b5f9bd8 (assoc-default): Rewrite not to use dolist.
Richard M. Stallman <rms@gnu.org>
parents: 22860
diff changeset
209 (setq tail (cdr tail)))
73a21b5f9bd8 (assoc-default): Rewrite not to use dolist.
Richard M. Stallman <rms@gnu.org>
parents: 22860
diff changeset
210 value))
25295
737e82c21934 (assoc-ignore-case, assoc-ignore-representation): Moved here from simple.el.
Karl Heuer <kwzh@gnu.org>
parents: 25293
diff changeset
211
737e82c21934 (assoc-ignore-case, assoc-ignore-representation): Moved here from simple.el.
Karl Heuer <kwzh@gnu.org>
parents: 25293
diff changeset
212 (defun assoc-ignore-case (key alist)
737e82c21934 (assoc-ignore-case, assoc-ignore-representation): Moved here from simple.el.
Karl Heuer <kwzh@gnu.org>
parents: 25293
diff changeset
213 "Like `assoc', but ignores differences in case and text representation.
737e82c21934 (assoc-ignore-case, assoc-ignore-representation): Moved here from simple.el.
Karl Heuer <kwzh@gnu.org>
parents: 25293
diff changeset
214 KEY must be a string. Upper-case and lower-case letters are treated as equal.
737e82c21934 (assoc-ignore-case, assoc-ignore-representation): Moved here from simple.el.
Karl Heuer <kwzh@gnu.org>
parents: 25293
diff changeset
215 Unibyte strings are converted to multibyte for comparison."
737e82c21934 (assoc-ignore-case, assoc-ignore-representation): Moved here from simple.el.
Karl Heuer <kwzh@gnu.org>
parents: 25293
diff changeset
216 (let (element)
737e82c21934 (assoc-ignore-case, assoc-ignore-representation): Moved here from simple.el.
Karl Heuer <kwzh@gnu.org>
parents: 25293
diff changeset
217 (while (and alist (not element))
737e82c21934 (assoc-ignore-case, assoc-ignore-representation): Moved here from simple.el.
Karl Heuer <kwzh@gnu.org>
parents: 25293
diff changeset
218 (if (eq t (compare-strings key 0 nil (car (car alist)) 0 nil t))
737e82c21934 (assoc-ignore-case, assoc-ignore-representation): Moved here from simple.el.
Karl Heuer <kwzh@gnu.org>
parents: 25293
diff changeset
219 (setq element (car alist)))
737e82c21934 (assoc-ignore-case, assoc-ignore-representation): Moved here from simple.el.
Karl Heuer <kwzh@gnu.org>
parents: 25293
diff changeset
220 (setq alist (cdr alist)))
737e82c21934 (assoc-ignore-case, assoc-ignore-representation): Moved here from simple.el.
Karl Heuer <kwzh@gnu.org>
parents: 25293
diff changeset
221 element))
737e82c21934 (assoc-ignore-case, assoc-ignore-representation): Moved here from simple.el.
Karl Heuer <kwzh@gnu.org>
parents: 25293
diff changeset
222
737e82c21934 (assoc-ignore-case, assoc-ignore-representation): Moved here from simple.el.
Karl Heuer <kwzh@gnu.org>
parents: 25293
diff changeset
223 (defun assoc-ignore-representation (key alist)
737e82c21934 (assoc-ignore-case, assoc-ignore-representation): Moved here from simple.el.
Karl Heuer <kwzh@gnu.org>
parents: 25293
diff changeset
224 "Like `assoc', but ignores differences in text representation.
737e82c21934 (assoc-ignore-case, assoc-ignore-representation): Moved here from simple.el.
Karl Heuer <kwzh@gnu.org>
parents: 25293
diff changeset
225 KEY must be a string.
737e82c21934 (assoc-ignore-case, assoc-ignore-representation): Moved here from simple.el.
Karl Heuer <kwzh@gnu.org>
parents: 25293
diff changeset
226 Unibyte strings are converted to multibyte for comparison."
737e82c21934 (assoc-ignore-case, assoc-ignore-representation): Moved here from simple.el.
Karl Heuer <kwzh@gnu.org>
parents: 25293
diff changeset
227 (let (element)
737e82c21934 (assoc-ignore-case, assoc-ignore-representation): Moved here from simple.el.
Karl Heuer <kwzh@gnu.org>
parents: 25293
diff changeset
228 (while (and alist (not element))
737e82c21934 (assoc-ignore-case, assoc-ignore-representation): Moved here from simple.el.
Karl Heuer <kwzh@gnu.org>
parents: 25293
diff changeset
229 (if (eq t (compare-strings key 0 nil (car (car alist)) 0 nil))
737e82c21934 (assoc-ignore-case, assoc-ignore-representation): Moved here from simple.el.
Karl Heuer <kwzh@gnu.org>
parents: 25293
diff changeset
230 (setq element (car alist)))
737e82c21934 (assoc-ignore-case, assoc-ignore-representation): Moved here from simple.el.
Karl Heuer <kwzh@gnu.org>
parents: 25293
diff changeset
231 (setq alist (cdr alist)))
737e82c21934 (assoc-ignore-case, assoc-ignore-representation): Moved here from simple.el.
Karl Heuer <kwzh@gnu.org>
parents: 25293
diff changeset
232 element))
28490
9958b6d95bd6 (member-ignore-case): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28234
diff changeset
233
9958b6d95bd6 (member-ignore-case): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28234
diff changeset
234 (defun member-ignore-case (elt list)
9958b6d95bd6 (member-ignore-case): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28234
diff changeset
235 "Like `member', but ignores differences in case and text representation.
9958b6d95bd6 (member-ignore-case): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28234
diff changeset
236 ELT must be a string. Upper-case and lower-case letters are treated as equal.
44900
e4975d9c93ff (insert-for-yank): Replace `category' property
Richard M. Stallman <rms@gnu.org>
parents: 44723
diff changeset
237 Unibyte strings are converted to multibyte for comparison.
e4975d9c93ff (insert-for-yank): Replace `category' property
Richard M. Stallman <rms@gnu.org>
parents: 44723
diff changeset
238 Non-strings in LIST are ignored."
e4975d9c93ff (insert-for-yank): Replace `category' property
Richard M. Stallman <rms@gnu.org>
parents: 44723
diff changeset
239 (while (and list
e4975d9c93ff (insert-for-yank): Replace `category' property
Richard M. Stallman <rms@gnu.org>
parents: 44723
diff changeset
240 (not (and (stringp (car list))
e4975d9c93ff (insert-for-yank): Replace `category' property
Richard M. Stallman <rms@gnu.org>
parents: 44723
diff changeset
241 (eq t (compare-strings elt 0 nil (car list) 0 nil t)))))
33978
9aa3fd6779f7 (member-ignore-case): Return the tail of the list who's car matches,
Miles Bader <miles@gnu.org>
parents: 33835
diff changeset
242 (setq list (cdr list)))
9aa3fd6779f7 (member-ignore-case): Return the tail of the list who's car matches,
Miles Bader <miles@gnu.org>
parents: 33835
diff changeset
243 list)
28490
9958b6d95bd6 (member-ignore-case): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28234
diff changeset
244
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
245
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
246 ;;;; Keymap support.
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
247
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
248 (defun undefined ()
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
249 (interactive)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
250 (ding))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
251
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
252 ;Prevent the \{...} documentation construct
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
253 ;from mentioning keys that run this command.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
254 (put 'undefined 'suppress-keymap t)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
255
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
256 (defun suppress-keymap (map &optional nodigits)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
257 "Make MAP override all normally self-inserting keys to be undefined.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
258 Normally, as an exception, digits and minus-sign are set to make prefix args,
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
259 but optional second arg NODIGITS non-nil treats them like other chars."
4767
12ff77449baa (suppress-keymap): Use substitute-key-definition instead of manually
Brian Fox <bfox@gnu.org>
parents: 4620
diff changeset
260 (substitute-key-definition 'self-insert-command 'undefined map global-map)
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
261 (or nodigits
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
262 (let (loop)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
263 (define-key map "-" 'negative-argument)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
264 ;; Make plain numbers do numeric args.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
265 (setq loop ?0)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
266 (while (<= loop ?9)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
267 (define-key map (char-to-string loop) 'digit-argument)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
268 (setq loop (1+ loop))))))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
269
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
270 ;Moved to keymap.c
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
271 ;(defun copy-keymap (keymap)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
272 ; "Return a copy of KEYMAP"
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
273 ; (while (not (keymapp keymap))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
274 ; (setq keymap (signal 'wrong-type-argument (list 'keymapp keymap))))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
275 ; (if (vectorp keymap)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
276 ; (copy-sequence keymap)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
277 ; (copy-alist keymap)))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
278
6167
1ad8f8ccdc2b (substitute-key-definition): Avoid infinite recursion.
Karl Heuer <kwzh@gnu.org>
parents: 6039
diff changeset
279 (defvar key-substitution-in-progress nil
1ad8f8ccdc2b (substitute-key-definition): Avoid infinite recursion.
Karl Heuer <kwzh@gnu.org>
parents: 6039
diff changeset
280 "Used internally by substitute-key-definition.")
1ad8f8ccdc2b (substitute-key-definition): Avoid infinite recursion.
Karl Heuer <kwzh@gnu.org>
parents: 6039
diff changeset
281
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
282 (defun substitute-key-definition (olddef newdef keymap &optional oldmap prefix)
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
283 "Replace OLDDEF with NEWDEF for any keys in KEYMAP now defined as OLDDEF.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
284 In other words, OLDDEF is replaced with NEWDEF where ever it appears.
28811
8a7623ffeeac (substitute-key-definition): Clarify documentation.
Gerd Moellmann <gerd@gnu.org>
parents: 28794
diff changeset
285 Alternatively, if optional fourth argument OLDMAP is specified, we redefine
32131
3a54b3a6bf40 (substitute-key-definition): Doc fix.
Dave Love <fx@gnu.org>
parents: 31979
diff changeset
286 in KEYMAP as NEWDEF those keys which are defined as OLDDEF in OLDMAP."
28868
e62636f5d724 (substitute-key-definition): Add comment describing
Gerd Moellmann <gerd@gnu.org>
parents: 28863
diff changeset
287 ;; Don't document PREFIX in the doc string because we don't want to
e62636f5d724 (substitute-key-definition): Add comment describing
Gerd Moellmann <gerd@gnu.org>
parents: 28863
diff changeset
288 ;; advertise it. It's meant for recursive calls only. Here's its
e62636f5d724 (substitute-key-definition): Add comment describing
Gerd Moellmann <gerd@gnu.org>
parents: 28863
diff changeset
289 ;; meaning
e62636f5d724 (substitute-key-definition): Add comment describing
Gerd Moellmann <gerd@gnu.org>
parents: 28863
diff changeset
290
e62636f5d724 (substitute-key-definition): Add comment describing
Gerd Moellmann <gerd@gnu.org>
parents: 28863
diff changeset
291 ;; If optional argument PREFIX is specified, it should be a key
e62636f5d724 (substitute-key-definition): Add comment describing
Gerd Moellmann <gerd@gnu.org>
parents: 28863
diff changeset
292 ;; prefix, a string. Redefined bindings will then be bound to the
e62636f5d724 (substitute-key-definition): Add comment describing
Gerd Moellmann <gerd@gnu.org>
parents: 28863
diff changeset
293 ;; original key, with PREFIX added at the front.
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
294 (or prefix (setq prefix ""))
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
295 (let* ((scan (or oldmap keymap))
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
296 (vec1 (vector nil))
6167
1ad8f8ccdc2b (substitute-key-definition): Avoid infinite recursion.
Karl Heuer <kwzh@gnu.org>
parents: 6039
diff changeset
297 (prefix1 (vconcat prefix vec1))
1ad8f8ccdc2b (substitute-key-definition): Avoid infinite recursion.
Karl Heuer <kwzh@gnu.org>
parents: 6039
diff changeset
298 (key-substitution-in-progress
1ad8f8ccdc2b (substitute-key-definition): Avoid infinite recursion.
Karl Heuer <kwzh@gnu.org>
parents: 6039
diff changeset
299 (cons scan key-substitution-in-progress)))
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
300 ;; Scan OLDMAP, finding each char or event-symbol that
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
301 ;; has any definition, and act on it with hack-key.
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
302 (while (consp scan)
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
303 (if (consp (car scan))
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
304 (let ((char (car (car scan)))
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
305 (defn (cdr (car scan))))
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
306 ;; The inside of this let duplicates exactly
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
307 ;; the inside of the following let that handles array elements.
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
308 (aset vec1 0 char)
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
309 (aset prefix1 (length prefix) char)
6005
bf1c9fd5669b (substitute-key-definition): Don't discard menu strings.
Richard M. Stallman <rms@gnu.org>
parents: 5912
diff changeset
310 (let (inner-def skipped)
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
311 ;; Skip past menu-prompt.
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
312 (while (stringp (car-safe defn))
6005
bf1c9fd5669b (substitute-key-definition): Don't discard menu strings.
Richard M. Stallman <rms@gnu.org>
parents: 5912
diff changeset
313 (setq skipped (cons (car defn) skipped))
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
314 (setq defn (cdr defn)))
7615
49176059d040 (substitute-key-definition): Skip cached menu key-equivs.
Richard M. Stallman <rms@gnu.org>
parents: 7548
diff changeset
315 ;; Skip past cached key-equivalence data for menu items.
49176059d040 (substitute-key-definition): Skip cached menu key-equivs.
Richard M. Stallman <rms@gnu.org>
parents: 7548
diff changeset
316 (and (consp defn) (consp (car defn))
49176059d040 (substitute-key-definition): Skip cached menu key-equivs.
Richard M. Stallman <rms@gnu.org>
parents: 7548
diff changeset
317 (setq defn (cdr defn)))
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
318 (setq inner-def defn)
7615
49176059d040 (substitute-key-definition): Skip cached menu key-equivs.
Richard M. Stallman <rms@gnu.org>
parents: 7548
diff changeset
319 ;; Look past a symbol that names a keymap.
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
320 (while (and (symbolp inner-def)
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
321 (fboundp inner-def))
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
322 (setq inner-def (symbol-function inner-def)))
17215
21e3f467224e (substitute-key-definition):
Richard M. Stallman <rms@gnu.org>
parents: 17158
diff changeset
323 (if (or (eq defn olddef)
21e3f467224e (substitute-key-definition):
Richard M. Stallman <rms@gnu.org>
parents: 17158
diff changeset
324 ;; Compare with equal if definition is a key sequence.
21e3f467224e (substitute-key-definition):
Richard M. Stallman <rms@gnu.org>
parents: 17158
diff changeset
325 ;; That is useful for operating on function-key-map.
21e3f467224e (substitute-key-definition):
Richard M. Stallman <rms@gnu.org>
parents: 17158
diff changeset
326 (and (or (stringp defn) (vectorp defn))
21e3f467224e (substitute-key-definition):
Richard M. Stallman <rms@gnu.org>
parents: 17158
diff changeset
327 (equal defn olddef)))
6005
bf1c9fd5669b (substitute-key-definition): Don't discard menu strings.
Richard M. Stallman <rms@gnu.org>
parents: 5912
diff changeset
328 (define-key keymap prefix1 (nconc (nreverse skipped) newdef))
6167
1ad8f8ccdc2b (substitute-key-definition): Avoid infinite recursion.
Karl Heuer <kwzh@gnu.org>
parents: 6039
diff changeset
329 (if (and (keymapp defn)
9986
df605fcd1e75 (substitute-key-definition): Don't recursively scan
Richard M. Stallman <rms@gnu.org>
parents: 9822
diff changeset
330 ;; Avoid recursively scanning
df605fcd1e75 (substitute-key-definition): Don't recursively scan
Richard M. Stallman <rms@gnu.org>
parents: 9822
diff changeset
331 ;; where KEYMAP does not have a submap.
13039
04ffbdd37d2d (substitute-key-definition): Do recursively scan
Richard M. Stallman <rms@gnu.org>
parents: 12730
diff changeset
332 (let ((elt (lookup-key keymap prefix1)))
04ffbdd37d2d (substitute-key-definition): Do recursively scan
Richard M. Stallman <rms@gnu.org>
parents: 12730
diff changeset
333 (or (null elt)
04ffbdd37d2d (substitute-key-definition): Do recursively scan
Richard M. Stallman <rms@gnu.org>
parents: 12730
diff changeset
334 (keymapp elt)))
9986
df605fcd1e75 (substitute-key-definition): Don't recursively scan
Richard M. Stallman <rms@gnu.org>
parents: 9822
diff changeset
335 ;; Avoid recursively rescanning keymap being scanned.
6167
1ad8f8ccdc2b (substitute-key-definition): Avoid infinite recursion.
Karl Heuer <kwzh@gnu.org>
parents: 6039
diff changeset
336 (not (memq inner-def
1ad8f8ccdc2b (substitute-key-definition): Avoid infinite recursion.
Karl Heuer <kwzh@gnu.org>
parents: 6039
diff changeset
337 key-substitution-in-progress)))
7615
49176059d040 (substitute-key-definition): Skip cached menu key-equivs.
Richard M. Stallman <rms@gnu.org>
parents: 7548
diff changeset
338 ;; If this one isn't being scanned already,
49176059d040 (substitute-key-definition): Skip cached menu key-equivs.
Richard M. Stallman <rms@gnu.org>
parents: 7548
diff changeset
339 ;; scan it now.
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
340 (substitute-key-definition olddef newdef keymap
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
341 inner-def
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
342 prefix1)))))
18044
3e4924d01221 (substitute-key-definition): Check vectorp, not arrayp.
Richard M. Stallman <rms@gnu.org>
parents: 17943
diff changeset
343 (if (vectorp (car scan))
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
344 (let* ((array (car scan))
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
345 (len (length array))
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
346 (i 0))
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
347 (while (< i len)
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
348 (let ((char i) (defn (aref array i)))
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
349 ;; The inside of this let duplicates exactly
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
350 ;; the inside of the previous let.
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
351 (aset vec1 0 char)
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
352 (aset prefix1 (length prefix) char)
6005
bf1c9fd5669b (substitute-key-definition): Don't discard menu strings.
Richard M. Stallman <rms@gnu.org>
parents: 5912
diff changeset
353 (let (inner-def skipped)
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
354 ;; Skip past menu-prompt.
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
355 (while (stringp (car-safe defn))
6005
bf1c9fd5669b (substitute-key-definition): Don't discard menu strings.
Richard M. Stallman <rms@gnu.org>
parents: 5912
diff changeset
356 (setq skipped (cons (car defn) skipped))
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
357 (setq defn (cdr defn)))
7615
49176059d040 (substitute-key-definition): Skip cached menu key-equivs.
Richard M. Stallman <rms@gnu.org>
parents: 7548
diff changeset
358 (and (consp defn) (consp (car defn))
49176059d040 (substitute-key-definition): Skip cached menu key-equivs.
Richard M. Stallman <rms@gnu.org>
parents: 7548
diff changeset
359 (setq defn (cdr defn)))
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
360 (setq inner-def defn)
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
361 (while (and (symbolp inner-def)
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
362 (fboundp inner-def))
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
363 (setq inner-def (symbol-function inner-def)))
17215
21e3f467224e (substitute-key-definition):
Richard M. Stallman <rms@gnu.org>
parents: 17158
diff changeset
364 (if (or (eq defn olddef)
21e3f467224e (substitute-key-definition):
Richard M. Stallman <rms@gnu.org>
parents: 17158
diff changeset
365 (and (or (stringp defn) (vectorp defn))
21e3f467224e (substitute-key-definition):
Richard M. Stallman <rms@gnu.org>
parents: 17158
diff changeset
366 (equal defn olddef)))
6005
bf1c9fd5669b (substitute-key-definition): Don't discard menu strings.
Richard M. Stallman <rms@gnu.org>
parents: 5912
diff changeset
367 (define-key keymap prefix1
bf1c9fd5669b (substitute-key-definition): Don't discard menu strings.
Richard M. Stallman <rms@gnu.org>
parents: 5912
diff changeset
368 (nconc (nreverse skipped) newdef))
6167
1ad8f8ccdc2b (substitute-key-definition): Avoid infinite recursion.
Karl Heuer <kwzh@gnu.org>
parents: 6039
diff changeset
369 (if (and (keymapp defn)
13039
04ffbdd37d2d (substitute-key-definition): Do recursively scan
Richard M. Stallman <rms@gnu.org>
parents: 12730
diff changeset
370 (let ((elt (lookup-key keymap prefix1)))
04ffbdd37d2d (substitute-key-definition): Do recursively scan
Richard M. Stallman <rms@gnu.org>
parents: 12730
diff changeset
371 (or (null elt)
04ffbdd37d2d (substitute-key-definition): Do recursively scan
Richard M. Stallman <rms@gnu.org>
parents: 12730
diff changeset
372 (keymapp elt)))
6167
1ad8f8ccdc2b (substitute-key-definition): Avoid infinite recursion.
Karl Heuer <kwzh@gnu.org>
parents: 6039
diff changeset
373 (not (memq inner-def
1ad8f8ccdc2b (substitute-key-definition): Avoid infinite recursion.
Karl Heuer <kwzh@gnu.org>
parents: 6039
diff changeset
374 key-substitution-in-progress)))
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
375 (substitute-key-definition olddef newdef keymap
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
376 inner-def
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
377 prefix1)))))
17922
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
378 (setq i (1+ i))))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
379 (if (char-table-p (car scan))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
380 (map-char-table
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
381 (function (lambda (char defn)
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
382 (let ()
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
383 ;; The inside of this let duplicates exactly
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
384 ;; the inside of the previous let,
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
385 ;; except that it uses set-char-table-range
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
386 ;; instead of define-key.
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
387 (aset vec1 0 char)
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
388 (aset prefix1 (length prefix) char)
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
389 (let (inner-def skipped)
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
390 ;; Skip past menu-prompt.
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
391 (while (stringp (car-safe defn))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
392 (setq skipped (cons (car defn) skipped))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
393 (setq defn (cdr defn)))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
394 (and (consp defn) (consp (car defn))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
395 (setq defn (cdr defn)))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
396 (setq inner-def defn)
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
397 (while (and (symbolp inner-def)
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
398 (fboundp inner-def))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
399 (setq inner-def (symbol-function inner-def)))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
400 (if (or (eq defn olddef)
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
401 (and (or (stringp defn) (vectorp defn))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
402 (equal defn olddef)))
17943
15dc805eadee (substitute-key-definition): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17922
diff changeset
403 (define-key keymap prefix1
15dc805eadee (substitute-key-definition): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17922
diff changeset
404 (nconc (nreverse skipped) newdef))
17922
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
405 (if (and (keymapp defn)
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
406 (let ((elt (lookup-key keymap prefix1)))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
407 (or (null elt)
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
408 (keymapp elt)))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
409 (not (memq inner-def
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
410 key-substitution-in-progress)))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
411 (substitute-key-definition olddef newdef keymap
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
412 inner-def
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
413 prefix1)))))))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
414 (car scan)))))
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
415 (setq scan (cdr scan)))))
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
416
27821
5ef5616e8304 (define-key-after): Default AFTER to t. Doc fix.
Dave Love <fx@gnu.org>
parents: 27810
diff changeset
417 (defun define-key-after (keymap key definition &optional after)
3901
c78753b7eea8 (define-key-in-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3860
diff changeset
418 "Add binding in KEYMAP for KEY => DEFINITION, right after AFTER's binding.
c78753b7eea8 (define-key-in-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3860
diff changeset
419 This is like `define-key' except that the binding for KEY is placed
c78753b7eea8 (define-key-in-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3860
diff changeset
420 just after the binding for the event AFTER, instead of at the beginning
16556
3a1df67c6677 (define-key-after): If AFTER is t, always put new binding at the end.
Richard M. Stallman <rms@gnu.org>
parents: 16549
diff changeset
421 of the map. Note that AFTER must be an event type (like KEY), NOT a command
3a1df67c6677 (define-key-after): If AFTER is t, always put new binding at the end.
Richard M. Stallman <rms@gnu.org>
parents: 16549
diff changeset
422 \(like DEFINITION).
3a1df67c6677 (define-key-after): If AFTER is t, always put new binding at the end.
Richard M. Stallman <rms@gnu.org>
parents: 16549
diff changeset
423
27821
5ef5616e8304 (define-key-after): Default AFTER to t. Doc fix.
Dave Love <fx@gnu.org>
parents: 27810
diff changeset
424 If AFTER is t or omitted, the new binding goes at the end of the keymap.
39557
fb85410efef7 (define-key-after): Allow `key' to be longer than 1.
Gerd Moellmann <gerd@gnu.org>
parents: 38760
diff changeset
425 AFTER should be a single event type--a symbol or a character, not a sequence.
27821
5ef5616e8304 (define-key-after): Default AFTER to t. Doc fix.
Dave Love <fx@gnu.org>
parents: 27810
diff changeset
426
5ef5616e8304 (define-key-after): Default AFTER to t. Doc fix.
Dave Love <fx@gnu.org>
parents: 27810
diff changeset
427 Bindings are always added before any inherited map.
16556
3a1df67c6677 (define-key-after): If AFTER is t, always put new binding at the end.
Richard M. Stallman <rms@gnu.org>
parents: 16549
diff changeset
428
3a1df67c6677 (define-key-after): If AFTER is t, always put new binding at the end.
Richard M. Stallman <rms@gnu.org>
parents: 16549
diff changeset
429 The order of bindings in a keymap matters when it is used as a menu."
27821
5ef5616e8304 (define-key-after): Default AFTER to t. Doc fix.
Dave Love <fx@gnu.org>
parents: 27810
diff changeset
430 (unless after (setq after t))
3901
c78753b7eea8 (define-key-in-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3860
diff changeset
431 (or (keymapp keymap)
c78753b7eea8 (define-key-in-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3860
diff changeset
432 (signal 'wrong-type-argument (list 'keymapp keymap)))
39557
fb85410efef7 (define-key-after): Allow `key' to be longer than 1.
Gerd Moellmann <gerd@gnu.org>
parents: 38760
diff changeset
433 (setq key
fb85410efef7 (define-key-after): Allow `key' to be longer than 1.
Gerd Moellmann <gerd@gnu.org>
parents: 38760
diff changeset
434 (if (<= (length key) 1) (aref key 0)
fb85410efef7 (define-key-after): Allow `key' to be longer than 1.
Gerd Moellmann <gerd@gnu.org>
parents: 38760
diff changeset
435 (setq keymap (lookup-key keymap
fb85410efef7 (define-key-after): Allow `key' to be longer than 1.
Gerd Moellmann <gerd@gnu.org>
parents: 38760
diff changeset
436 (apply 'vector
fb85410efef7 (define-key-after): Allow `key' to be longer than 1.
Gerd Moellmann <gerd@gnu.org>
parents: 38760
diff changeset
437 (butlast (mapcar 'identity key)))))
fb85410efef7 (define-key-after): Allow `key' to be longer than 1.
Gerd Moellmann <gerd@gnu.org>
parents: 38760
diff changeset
438 (aref key (1- (length key)))))
fb85410efef7 (define-key-after): Allow `key' to be longer than 1.
Gerd Moellmann <gerd@gnu.org>
parents: 38760
diff changeset
439 (let ((tail keymap) done inserted)
3901
c78753b7eea8 (define-key-in-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3860
diff changeset
440 (while (and (not done) tail)
c78753b7eea8 (define-key-in-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3860
diff changeset
441 ;; Delete any earlier bindings for the same key.
39557
fb85410efef7 (define-key-after): Allow `key' to be longer than 1.
Gerd Moellmann <gerd@gnu.org>
parents: 38760
diff changeset
442 (if (eq (car-safe (car (cdr tail))) key)
3901
c78753b7eea8 (define-key-in-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3860
diff changeset
443 (setcdr tail (cdr (cdr tail))))
39557
fb85410efef7 (define-key-after): Allow `key' to be longer than 1.
Gerd Moellmann <gerd@gnu.org>
parents: 38760
diff changeset
444 ;; If we hit an included map, go down that one.
fb85410efef7 (define-key-after): Allow `key' to be longer than 1.
Gerd Moellmann <gerd@gnu.org>
parents: 38760
diff changeset
445 (if (keymapp (car tail)) (setq tail (car tail)))
3901
c78753b7eea8 (define-key-in-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3860
diff changeset
446 ;; When we reach AFTER's binding, insert the new binding after.
c78753b7eea8 (define-key-in-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3860
diff changeset
447 ;; If we reach an inherited keymap, insert just before that.
3927
1f1fefc400ed (define-key-after): Delete duplicate bindings that come
Richard M. Stallman <rms@gnu.org>
parents: 3902
diff changeset
448 ;; If we reach the end of this keymap, insert at the end.
16556
3a1df67c6677 (define-key-after): If AFTER is t, always put new binding at the end.
Richard M. Stallman <rms@gnu.org>
parents: 16549
diff changeset
449 (if (or (and (eq (car-safe (car tail)) after)
3a1df67c6677 (define-key-after): If AFTER is t, always put new binding at the end.
Richard M. Stallman <rms@gnu.org>
parents: 16549
diff changeset
450 (not (eq after t)))
3927
1f1fefc400ed (define-key-after): Delete duplicate bindings that come
Richard M. Stallman <rms@gnu.org>
parents: 3902
diff changeset
451 (eq (car (cdr tail)) 'keymap)
1f1fefc400ed (define-key-after): Delete duplicate bindings that come
Richard M. Stallman <rms@gnu.org>
parents: 3902
diff changeset
452 (null (cdr tail)))
3901
c78753b7eea8 (define-key-in-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3860
diff changeset
453 (progn
3927
1f1fefc400ed (define-key-after): Delete duplicate bindings that come
Richard M. Stallman <rms@gnu.org>
parents: 3902
diff changeset
454 ;; Stop the scan only if we find a parent keymap.
1f1fefc400ed (define-key-after): Delete duplicate bindings that come
Richard M. Stallman <rms@gnu.org>
parents: 3902
diff changeset
455 ;; Keep going past the inserted element
1f1fefc400ed (define-key-after): Delete duplicate bindings that come
Richard M. Stallman <rms@gnu.org>
parents: 3902
diff changeset
456 ;; so we can delete any duplications that come later.
1f1fefc400ed (define-key-after): Delete duplicate bindings that come
Richard M. Stallman <rms@gnu.org>
parents: 3902
diff changeset
457 (if (eq (car (cdr tail)) 'keymap)
1f1fefc400ed (define-key-after): Delete duplicate bindings that come
Richard M. Stallman <rms@gnu.org>
parents: 3902
diff changeset
458 (setq done t))
1f1fefc400ed (define-key-after): Delete duplicate bindings that come
Richard M. Stallman <rms@gnu.org>
parents: 3902
diff changeset
459 ;; Don't insert more than once.
1f1fefc400ed (define-key-after): Delete duplicate bindings that come
Richard M. Stallman <rms@gnu.org>
parents: 3902
diff changeset
460 (or inserted
39557
fb85410efef7 (define-key-after): Allow `key' to be longer than 1.
Gerd Moellmann <gerd@gnu.org>
parents: 38760
diff changeset
461 (setcdr tail (cons (cons key definition) (cdr tail))))
3927
1f1fefc400ed (define-key-after): Delete duplicate bindings that come
Richard M. Stallman <rms@gnu.org>
parents: 3902
diff changeset
462 (setq inserted t)))
3901
c78753b7eea8 (define-key-in-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3860
diff changeset
463 (setq tail (cdr tail)))))
c78753b7eea8 (define-key-in-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3860
diff changeset
464
44251
3900f65547f0 (play-sound-file): Moved to simple.el.
Richard M. Stallman <rms@gnu.org>
parents: 44158
diff changeset
465
17437
d7f9b21fdfd2 (kbd): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 17418
diff changeset
466 (defmacro kbd (keys)
d7f9b21fdfd2 (kbd): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 17418
diff changeset
467 "Convert KEYS to the internal Emacs key representation.
d7f9b21fdfd2 (kbd): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 17418
diff changeset
468 KEYS should be a string constant in the format used for
d7f9b21fdfd2 (kbd): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 17418
diff changeset
469 saving keyboard macros (see `insert-kbd-macro')."
d7f9b21fdfd2 (kbd): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 17418
diff changeset
470 (read-kbd-macro keys))
d7f9b21fdfd2 (kbd): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 17418
diff changeset
471
15894
efd2835a7c96 (keyboard-translate): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents: 15599
diff changeset
472 (put 'keyboard-translate-table 'char-table-extra-slots 0)
efd2835a7c96 (keyboard-translate): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents: 15599
diff changeset
473
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
474 (defun keyboard-translate (from to)
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
475 "Translate character FROM to TO at a low level.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
476 This function creates a `keyboard-translate-table' if necessary
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
477 and then modifies one entry in it."
15894
efd2835a7c96 (keyboard-translate): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents: 15599
diff changeset
478 (or (char-table-p keyboard-translate-table)
efd2835a7c96 (keyboard-translate): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents: 15599
diff changeset
479 (setq keyboard-translate-table
efd2835a7c96 (keyboard-translate): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents: 15599
diff changeset
480 (make-char-table 'keyboard-translate-table nil)))
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
481 (aset keyboard-translate-table from to))
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
482
2071
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
483
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
484 ;;;; The global keymap tree.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
485
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
486 ;;; global-map, esc-map, and ctl-x-map have their values set up in
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
487 ;;; keymap.c; we just give them docstrings here.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
488
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
489 (defvar global-map nil
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
490 "Default global keymap mapping Emacs keyboard input into commands.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
491 The value is a keymap which is usually (but not necessarily) Emacs's
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
492 global map.")
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
493
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
494 (defvar esc-map nil
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
495 "Default keymap for ESC (meta) commands.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
496 The normal global definition of the character ESC indirects to this keymap.")
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
497
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
498 (defvar ctl-x-map nil
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
499 "Default keymap for C-x commands.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
500 The normal global definition of the character C-x indirects to this keymap.")
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
501
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
502 (defvar ctl-x-4-map (make-sparse-keymap)
41955
241e553840f9 (ctl-x-4-map): Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents: 41618
diff changeset
503 "Keymap for subcommands of C-x 4.")
2569
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
504 (defalias 'ctl-x-4-prefix ctl-x-4-map)
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
505 (define-key ctl-x-map "4" 'ctl-x-4-prefix)
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
506
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
507 (defvar ctl-x-5-map (make-sparse-keymap)
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
508 "Keymap for frame commands.")
2569
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
509 (defalias 'ctl-x-5-prefix ctl-x-5-map)
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
510 (define-key ctl-x-map "5" 'ctl-x-5-prefix)
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
511
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
512
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
513 ;;;; Event manipulation functions.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
514
10693
0875851842f0 (listify-key-sequence-1, event-modifiers): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents: 10681
diff changeset
515 ;; The call to `read' is to ensure that the value is computed at load time
0875851842f0 (listify-key-sequence-1, event-modifiers): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents: 10681
diff changeset
516 ;; and not compiled into the .elc file. The value is negative on most
0875851842f0 (listify-key-sequence-1, event-modifiers): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents: 10681
diff changeset
517 ;; machines, but not on all!
0875851842f0 (listify-key-sequence-1, event-modifiers): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents: 10681
diff changeset
518 (defconst listify-key-sequence-1 (logior 128 (read "?\\M-\\^@")))
3153
4c94c9faf1af (listify-key-sequence): Avoid the constant ?\M-\200.
Richard M. Stallman <rms@gnu.org>
parents: 2963
diff changeset
519
2021
8b9286bffef8 (listify-key-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1959
diff changeset
520 (defun listify-key-sequence (key)
8b9286bffef8 (listify-key-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1959
diff changeset
521 "Convert a key sequence to a list of events."
8b9286bffef8 (listify-key-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1959
diff changeset
522 (if (vectorp key)
8b9286bffef8 (listify-key-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1959
diff changeset
523 (append key nil)
8b9286bffef8 (listify-key-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1959
diff changeset
524 (mapcar (function (lambda (c)
8b9286bffef8 (listify-key-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1959
diff changeset
525 (if (> c 127)
3153
4c94c9faf1af (listify-key-sequence): Avoid the constant ?\M-\200.
Richard M. Stallman <rms@gnu.org>
parents: 2963
diff changeset
526 (logxor c listify-key-sequence-1)
2021
8b9286bffef8 (listify-key-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1959
diff changeset
527 c)))
8b9286bffef8 (listify-key-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1959
diff changeset
528 (append key nil))))
8b9286bffef8 (listify-key-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1959
diff changeset
529
2040
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
530 (defsubst eventp (obj)
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
531 "True if the argument is an event object."
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
532 (or (integerp obj)
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
533 (and (symbolp obj)
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
534 (get obj 'event-symbol-elements))
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
535 (and (consp obj)
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
536 (symbolp (car obj))
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
537 (get (car obj) 'event-symbol-elements))))
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
538
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
539 (defun event-modifiers (event)
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
540 "Returns a list of symbols representing the modifier keys in event EVENT.
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
541 The elements of the list may include `meta', `control',
4414
3356419b94c1 (add-hook): Change a single function into a list.
Richard M. Stallman <rms@gnu.org>
parents: 4235
diff changeset
542 `shift', `hyper', `super', `alt', `click', `double', `triple', `drag',
3356419b94c1 (add-hook): Change a single function into a list.
Richard M. Stallman <rms@gnu.org>
parents: 4235
diff changeset
543 and `down'."
2040
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
544 (let ((type event))
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
545 (if (listp type)
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
546 (setq type (car type)))
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
547 (if (symbolp type)
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
548 (cdr (get type 'event-symbol-elements))
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
549 (let ((list nil))
10693
0875851842f0 (listify-key-sequence-1, event-modifiers): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents: 10681
diff changeset
550 (or (zerop (logand type ?\M-\^@))
2040
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
551 (setq list (cons 'meta list)))
10693
0875851842f0 (listify-key-sequence-1, event-modifiers): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents: 10681
diff changeset
552 (or (and (zerop (logand type ?\C-\^@))
2040
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
553 (>= (logand type 127) 32))
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
554 (setq list (cons 'control list)))
10693
0875851842f0 (listify-key-sequence-1, event-modifiers): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents: 10681
diff changeset
555 (or (and (zerop (logand type ?\S-\^@))
2040
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
556 (= (logand type 255) (downcase (logand type 255))))
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
557 (setq list (cons 'shift list)))
10693
0875851842f0 (listify-key-sequence-1, event-modifiers): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents: 10681
diff changeset
558 (or (zerop (logand type ?\H-\^@))
2040
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
559 (setq list (cons 'hyper list)))
10693
0875851842f0 (listify-key-sequence-1, event-modifiers): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents: 10681
diff changeset
560 (or (zerop (logand type ?\s-\^@))
2040
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
561 (setq list (cons 'super list)))
10693
0875851842f0 (listify-key-sequence-1, event-modifiers): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents: 10681
diff changeset
562 (or (zerop (logand type ?\A-\^@))
2040
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
563 (setq list (cons 'alt list)))
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
564 list))))
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
565
2063
2f0555b428c4 (event-basic-type): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2040
diff changeset
566 (defun event-basic-type (event)
2f0555b428c4 (event-basic-type): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2040
diff changeset
567 "Returns the basic type of the given event (all modifiers removed).
36468
80a057b7576b (event-basic-type): Doc fix.
Dave Love <fx@gnu.org>
parents: 36094
diff changeset
568 The value is a printing character (not upper case) or a symbol."
3784
d2df5ca46b39 * subr.el (event-basic-type): Deal with listy events properly.
Jim Blandy <jimb@redhat.com>
parents: 3591
diff changeset
569 (if (consp event)
d2df5ca46b39 * subr.el (event-basic-type): Deal with listy events properly.
Jim Blandy <jimb@redhat.com>
parents: 3591
diff changeset
570 (setq event (car event)))
2063
2f0555b428c4 (event-basic-type): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2040
diff changeset
571 (if (symbolp event)
2f0555b428c4 (event-basic-type): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2040
diff changeset
572 (car (get event 'event-symbol-elements))
2f0555b428c4 (event-basic-type): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2040
diff changeset
573 (let ((base (logand event (1- (lsh 1 18)))))
2f0555b428c4 (event-basic-type): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2040
diff changeset
574 (downcase (if (< base 32) (logior base 64) base)))))
2f0555b428c4 (event-basic-type): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2040
diff changeset
575
2071
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
576 (defsubst mouse-movement-p (object)
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
577 "Return non-nil if OBJECT is a mouse movement event."
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
578 (and (consp object)
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
579 (eq (car object) 'mouse-movement)))
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
580
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
581 (defsubst event-start (event)
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
582 "Return the starting position of EVENT.
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
583 If EVENT is a mouse press or a mouse click, this returns the location
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
584 of the event.
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
585 If EVENT is a drag, this returns the drag's starting position.
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
586 The return value is of the form
6039
4eb7f4633370 (posn-x-y): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6005
diff changeset
587 (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
2071
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
588 The `posn-' functions access elements of such lists."
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
589 (nth 1 event))
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
590
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
591 (defsubst event-end (event)
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
592 "Return the ending location of EVENT. EVENT should be a click or drag event.
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
593 If EVENT is a click event, this function is the same as `event-start'.
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
594 The return value is of the form
6039
4eb7f4633370 (posn-x-y): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6005
diff changeset
595 (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
2071
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
596 The `posn-' functions access elements of such lists."
3860
70bdc91ef161 * subr.el (event-end): Modified to account for multi-click events.
Jim Blandy <jimb@redhat.com>
parents: 3784
diff changeset
597 (nth (if (consp (nth 2 event)) 2 1) event))
2071
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
598
4414
3356419b94c1 (add-hook): Change a single function into a list.
Richard M. Stallman <rms@gnu.org>
parents: 4235
diff changeset
599 (defsubst event-click-count (event)
3356419b94c1 (add-hook): Change a single function into a list.
Richard M. Stallman <rms@gnu.org>
parents: 4235
diff changeset
600 "Return the multi-click count of EVENT, a click or drag event.
3356419b94c1 (add-hook): Change a single function into a list.
Richard M. Stallman <rms@gnu.org>
parents: 4235
diff changeset
601 The return value is a positive integer."
3356419b94c1 (add-hook): Change a single function into a list.
Richard M. Stallman <rms@gnu.org>
parents: 4235
diff changeset
602 (if (integerp (nth 2 event)) (nth 2 event) 1))
3356419b94c1 (add-hook): Change a single function into a list.
Richard M. Stallman <rms@gnu.org>
parents: 4235
diff changeset
603
2071
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
604 (defsubst posn-window (position)
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
605 "Return the window in POSITION.
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
606 POSITION should be a list of the form
6039
4eb7f4633370 (posn-x-y): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6005
diff changeset
607 (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
2071
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
608 as returned by the `event-start' and `event-end' functions."
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
609 (nth 0 position))
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
610
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
611 (defsubst posn-point (position)
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
612 "Return the buffer location in POSITION.
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
613 POSITION should be a list of the form
6039
4eb7f4633370 (posn-x-y): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6005
diff changeset
614 (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
2071
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
615 as returned by the `event-start' and `event-end' functions."
3991
ad2bd545983e * subr.el (posn-point): Properly extract the BUFFER-POSITION field
Jim Blandy <jimb@redhat.com>
parents: 3927
diff changeset
616 (if (consp (nth 1 position))
ad2bd545983e * subr.el (posn-point): Properly extract the BUFFER-POSITION field
Jim Blandy <jimb@redhat.com>
parents: 3927
diff changeset
617 (car (nth 1 position))
ad2bd545983e * subr.el (posn-point): Properly extract the BUFFER-POSITION field
Jim Blandy <jimb@redhat.com>
parents: 3927
diff changeset
618 (nth 1 position)))
2071
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
619
6039
4eb7f4633370 (posn-x-y): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6005
diff changeset
620 (defsubst posn-x-y (position)
4eb7f4633370 (posn-x-y): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6005
diff changeset
621 "Return the x and y coordinates in POSITION.
2071
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
622 POSITION should be a list of the form
6039
4eb7f4633370 (posn-x-y): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6005
diff changeset
623 (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
2071
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
624 as returned by the `event-start' and `event-end' functions."
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
625 (nth 2 position))
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
626
7636
83dba60657ef (posn-col-row): Do something useful for scroll bar event.
Richard M. Stallman <rms@gnu.org>
parents: 7615
diff changeset
627 (defun posn-col-row (position)
7693
5fcf0620b8d3 (posn-col-row): Test for consp, not symbolp.
Karl Heuer <kwzh@gnu.org>
parents: 7640
diff changeset
628 "Return the column and row in POSITION, measured in characters.
6039
4eb7f4633370 (posn-x-y): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6005
diff changeset
629 POSITION should be a list of the form
4eb7f4633370 (posn-x-y): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6005
diff changeset
630 (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
7636
83dba60657ef (posn-col-row): Do something useful for scroll bar event.
Richard M. Stallman <rms@gnu.org>
parents: 7615
diff changeset
631 as returned by the `event-start' and `event-end' functions.
83dba60657ef (posn-col-row): Do something useful for scroll bar event.
Richard M. Stallman <rms@gnu.org>
parents: 7615
diff changeset
632 For a scroll-bar event, the result column is 0, and the row
83dba60657ef (posn-col-row): Do something useful for scroll bar event.
Richard M. Stallman <rms@gnu.org>
parents: 7615
diff changeset
633 corresponds to the vertical position of the click in the scroll bar."
83dba60657ef (posn-col-row): Do something useful for scroll bar event.
Richard M. Stallman <rms@gnu.org>
parents: 7615
diff changeset
634 (let ((pair (nth 2 position))
83dba60657ef (posn-col-row): Do something useful for scroll bar event.
Richard M. Stallman <rms@gnu.org>
parents: 7615
diff changeset
635 (window (posn-window position)))
7693
5fcf0620b8d3 (posn-col-row): Test for consp, not symbolp.
Karl Heuer <kwzh@gnu.org>
parents: 7640
diff changeset
636 (if (eq (if (consp (nth 1 position))
5fcf0620b8d3 (posn-col-row): Test for consp, not symbolp.
Karl Heuer <kwzh@gnu.org>
parents: 7640
diff changeset
637 (car (nth 1 position))
5fcf0620b8d3 (posn-col-row): Test for consp, not symbolp.
Karl Heuer <kwzh@gnu.org>
parents: 7640
diff changeset
638 (nth 1 position))
7636
83dba60657ef (posn-col-row): Do something useful for scroll bar event.
Richard M. Stallman <rms@gnu.org>
parents: 7615
diff changeset
639 'vertical-scroll-bar)
83dba60657ef (posn-col-row): Do something useful for scroll bar event.
Richard M. Stallman <rms@gnu.org>
parents: 7615
diff changeset
640 (cons 0 (scroll-bar-scale pair (1- (window-height window))))
7693
5fcf0620b8d3 (posn-col-row): Test for consp, not symbolp.
Karl Heuer <kwzh@gnu.org>
parents: 7640
diff changeset
641 (if (eq (if (consp (nth 1 position))
5fcf0620b8d3 (posn-col-row): Test for consp, not symbolp.
Karl Heuer <kwzh@gnu.org>
parents: 7640
diff changeset
642 (car (nth 1 position))
5fcf0620b8d3 (posn-col-row): Test for consp, not symbolp.
Karl Heuer <kwzh@gnu.org>
parents: 7640
diff changeset
643 (nth 1 position))
7636
83dba60657ef (posn-col-row): Do something useful for scroll bar event.
Richard M. Stallman <rms@gnu.org>
parents: 7615
diff changeset
644 'horizontal-scroll-bar)
83dba60657ef (posn-col-row): Do something useful for scroll bar event.
Richard M. Stallman <rms@gnu.org>
parents: 7615
diff changeset
645 (cons (scroll-bar-scale pair (window-width window)) 0)
7640
9b1194796ef5 (posn-col-row): Use let*.
Richard M. Stallman <rms@gnu.org>
parents: 7636
diff changeset
646 (let* ((frame (if (framep window) window (window-frame window)))
9b1194796ef5 (posn-col-row): Use let*.
Richard M. Stallman <rms@gnu.org>
parents: 7636
diff changeset
647 (x (/ (car pair) (frame-char-width frame)))
9b1194796ef5 (posn-col-row): Use let*.
Richard M. Stallman <rms@gnu.org>
parents: 7636
diff changeset
648 (y (/ (cdr pair) (frame-char-height frame))))
7636
83dba60657ef (posn-col-row): Do something useful for scroll bar event.
Richard M. Stallman <rms@gnu.org>
parents: 7615
diff changeset
649 (cons x y))))))
6039
4eb7f4633370 (posn-x-y): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6005
diff changeset
650
2071
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
651 (defsubst posn-timestamp (position)
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
652 "Return the timestamp of POSITION.
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
653 POSITION should be a list of the form
6039
4eb7f4633370 (posn-x-y): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6005
diff changeset
654 (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
3411
d91b3097bb76 (posn-timestamp): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 3210
diff changeset
655 as returned by the `event-start' and `event-end' functions."
2071
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
656 (nth 3 position))
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
657
2071
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
658
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
659 ;;;; Obsolescent names for functions.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
660
2569
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
661 (defalias 'dot 'point)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
662 (defalias 'dot-marker 'point-marker)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
663 (defalias 'dot-min 'point-min)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
664 (defalias 'dot-max 'point-max)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
665 (defalias 'window-dot 'window-point)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
666 (defalias 'set-window-dot 'set-window-point)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
667 (defalias 'read-input 'read-string)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
668 (defalias 'send-string 'process-send-string)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
669 (defalias 'send-region 'process-send-region)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
670 (defalias 'show-buffer 'set-window-buffer)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
671 (defalias 'buffer-flush-undo 'buffer-disable-undo)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
672 (defalias 'eval-current-buffer 'eval-buffer)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
673 (defalias 'compiled-function-p 'byte-code-function-p)
16437
0626ef653e3e (define-function): Define as alias for defalias.
Richard M. Stallman <rms@gnu.org>
parents: 16379
diff changeset
674 (defalias 'define-function 'defalias)
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
675
23134
173e15236628 (sref): Make it an alias of aref. Make the
Kenichi Handa <handa@m17n.org>
parents: 23058
diff changeset
676 (defalias 'sref 'aref)
29354
4ed4a700358b Update calls to make-obsolete with a WHEN argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29062
diff changeset
677 (make-obsolete 'sref 'aref "20.4")
4ed4a700358b Update calls to make-obsolete with a WHEN argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29062
diff changeset
678 (make-obsolete 'char-bytes "Now this function always returns 1" "20.4")
20605
95e051979faf (sref): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 20491
diff changeset
679
42266
75bbe9d566d9 (insert-string): Moved from mocklisp.c, reimplemented in Lisp. Obsoleted.
Pavel Janík <Pavel@Janik.cz>
parents: 42083
diff changeset
680 (defun insert-string (&rest args)
75bbe9d566d9 (insert-string): Moved from mocklisp.c, reimplemented in Lisp. Obsoleted.
Pavel Janík <Pavel@Janik.cz>
parents: 42083
diff changeset
681 "Mocklisp-compatibility insert function.
75bbe9d566d9 (insert-string): Moved from mocklisp.c, reimplemented in Lisp. Obsoleted.
Pavel Janík <Pavel@Janik.cz>
parents: 42083
diff changeset
682 Like the function `insert' except that any argument that is a number
75bbe9d566d9 (insert-string): Moved from mocklisp.c, reimplemented in Lisp. Obsoleted.
Pavel Janík <Pavel@Janik.cz>
parents: 42083
diff changeset
683 is converted into a string by expressing it in decimal."
75bbe9d566d9 (insert-string): Moved from mocklisp.c, reimplemented in Lisp. Obsoleted.
Pavel Janík <Pavel@Janik.cz>
parents: 42083
diff changeset
684 (dolist (el args)
75bbe9d566d9 (insert-string): Moved from mocklisp.c, reimplemented in Lisp. Obsoleted.
Pavel Janík <Pavel@Janik.cz>
parents: 42083
diff changeset
685 (insert (if (integerp el) (number-to-string el) el))))
75bbe9d566d9 (insert-string): Moved from mocklisp.c, reimplemented in Lisp. Obsoleted.
Pavel Janík <Pavel@Janik.cz>
parents: 42083
diff changeset
686
75bbe9d566d9 (insert-string): Moved from mocklisp.c, reimplemented in Lisp. Obsoleted.
Pavel Janík <Pavel@Janik.cz>
parents: 42083
diff changeset
687 (make-obsolete 'insert-string 'insert "21.3")
75bbe9d566d9 (insert-string): Moved from mocklisp.c, reimplemented in Lisp. Obsoleted.
Pavel Janík <Pavel@Janik.cz>
parents: 42083
diff changeset
688
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
689 ;; Some programs still use this as a function.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
690 (defun baud-rate ()
3210
3176c6395ada (baud-rate): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 3153
diff changeset
691 "Obsolete function returning the value of the `baud-rate' variable.
3176c6395ada (baud-rate): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 3153
diff changeset
692 Please convert your programs to use the variable `baud-rate' directly."
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
693 baud-rate)
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
694
15599
7d3af2dcd864 (unfocus-frame, focus-frame): Define as no-ops.
Miles Bader <miles@gnu.org>
parents: 14707
diff changeset
695 (defalias 'focus-frame 'ignore)
7d3af2dcd864 (unfocus-frame, focus-frame): Define as no-ops.
Miles Bader <miles@gnu.org>
parents: 14707
diff changeset
696 (defalias 'unfocus-frame 'ignore)
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
697
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
698 ;;;; Alternate names for functions - these are not being phased out.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
699
2569
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
700 (defalias 'string= 'string-equal)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
701 (defalias 'string< 'string-lessp)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
702 (defalias 'move-marker 'set-marker)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
703 (defalias 'rplaca 'setcar)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
704 (defalias 'rplacd 'setcdr)
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3411
diff changeset
705 (defalias 'beep 'ding) ;preserve lingual purity
2569
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
706 (defalias 'indent-to-column 'indent-to)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
707 (defalias 'backward-delete-char 'delete-backward-char)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
708 (defalias 'search-forward-regexp (symbol-function 're-search-forward))
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
709 (defalias 'search-backward-regexp (symbol-function 're-search-backward))
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
710 (defalias 'int-to-string 'number-to-string)
21173
e917eb0d4e01 (save-match-data): store-match-data => set-match-data.
Richard M. Stallman <rms@gnu.org>
parents: 21092
diff changeset
711 (defalias 'store-match-data 'set-match-data)
31563
96b9757bfd45 (add-minor-mode): Use toggle-fun arg.
Dave Love <fx@gnu.org>
parents: 30515
diff changeset
712 ;; These are the XEmacs names:
25293
fd43e1a99384 (point-at-eol, point-at-bol): New aliases.
Karl Heuer <kwzh@gnu.org>
parents: 25140
diff changeset
713 (defalias 'point-at-eol 'line-end-position)
fd43e1a99384 (point-at-eol, point-at-bol): New aliases.
Karl Heuer <kwzh@gnu.org>
parents: 25140
diff changeset
714 (defalias 'point-at-bol 'line-beginning-position)
1903
87f63305319f * subr.el (string-to-int): Make this an alias for
Jim Blandy <jimb@redhat.com>
parents: 1867
diff changeset
715
87f63305319f * subr.el (string-to-int): Make this an alias for
Jim Blandy <jimb@redhat.com>
parents: 1867
diff changeset
716 ;;; Should this be an obsolete name? If you decide it should, you get
87f63305319f * subr.el (string-to-int): Make this an alias for
Jim Blandy <jimb@redhat.com>
parents: 1867
diff changeset
717 ;;; to go through all the sources and change them.
2569
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
718 (defalias 'string-to-int 'string-to-number)
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
719
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
720 ;;;; Hook manipulation functions.
388
498bcec1cf3a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 384
diff changeset
721
9195
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
722 (defun make-local-hook (hook)
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
723 "Make the hook HOOK local to the current buffer.
23786
673204d56938 (make-local-hook): Return the hook variable.
Richard M. Stallman <rms@gnu.org>
parents: 23736
diff changeset
724 The return value is HOOK.
673204d56938 (make-local-hook): Return the hook variable.
Richard M. Stallman <rms@gnu.org>
parents: 23736
diff changeset
725
33707
2b9847c18f31 (make-local-hook): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32355
diff changeset
726 You never need to call this function now that `add-hook' does it for you
2b9847c18f31 (make-local-hook): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32355
diff changeset
727 if its LOCAL argument is non-nil.
2b9847c18f31 (make-local-hook): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32355
diff changeset
728
9195
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
729 When a hook is local, its local and global values
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
730 work in concert: running the hook actually runs all the hook
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
731 functions listed in *either* the local value *or* the global value
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
732 of the hook variable.
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
733
39557
fb85410efef7 (define-key-after): Allow `key' to be longer than 1.
Gerd Moellmann <gerd@gnu.org>
parents: 38760
diff changeset
734 This function works by making t a member of the buffer-local value,
12258
95ebca0a74d8 (make-local-hook): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12108
diff changeset
735 which acts as a flag to run the hook functions in the default value as
95ebca0a74d8 (make-local-hook): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12108
diff changeset
736 well. This works for all normal hooks, but does not work for most
95ebca0a74d8 (make-local-hook): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12108
diff changeset
737 non-normal hooks yet. We will be changing the callers of non-normal
95ebca0a74d8 (make-local-hook): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12108
diff changeset
738 hooks so that they can handle localness; this has to be done one by
95ebca0a74d8 (make-local-hook): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12108
diff changeset
739 one.
95ebca0a74d8 (make-local-hook): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12108
diff changeset
740
95ebca0a74d8 (make-local-hook): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12108
diff changeset
741 This function does nothing if HOOK is already local in the current
95ebca0a74d8 (make-local-hook): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12108
diff changeset
742 buffer.
9195
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
743
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
744 Do not use `make-local-variable' to make a hook variable buffer-local."
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
745 (if (local-variable-p hook)
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
746 nil
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
747 (or (boundp hook) (set hook nil))
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
748 (make-local-variable hook)
23786
673204d56938 (make-local-hook): Return the hook variable.
Richard M. Stallman <rms@gnu.org>
parents: 23736
diff changeset
749 (set hook (list t)))
673204d56938 (make-local-hook): Return the hook variable.
Richard M. Stallman <rms@gnu.org>
parents: 23736
diff changeset
750 hook)
39557
fb85410efef7 (define-key-after): Allow `key' to be longer than 1.
Gerd Moellmann <gerd@gnu.org>
parents: 38760
diff changeset
751 (make-obsolete 'make-local-hook "Not necessary any more." "21.1")
9195
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
752
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
753 (defun add-hook (hook function &optional append local)
4414
3356419b94c1 (add-hook): Change a single function into a list.
Richard M. Stallman <rms@gnu.org>
parents: 4235
diff changeset
754 "Add to the value of HOOK the function FUNCTION.
3356419b94c1 (add-hook): Change a single function into a list.
Richard M. Stallman <rms@gnu.org>
parents: 4235
diff changeset
755 FUNCTION is not added if already present.
3356419b94c1 (add-hook): Change a single function into a list.
Richard M. Stallman <rms@gnu.org>
parents: 4235
diff changeset
756 FUNCTION is added (if necessary) at the beginning of the hook list
3356419b94c1 (add-hook): Change a single function into a list.
Richard M. Stallman <rms@gnu.org>
parents: 4235
diff changeset
757 unless the optional argument APPEND is non-nil, in which case
3356419b94c1 (add-hook): Change a single function into a list.
Richard M. Stallman <rms@gnu.org>
parents: 4235
diff changeset
758 FUNCTION is added at the end.
3356419b94c1 (add-hook): Change a single function into a list.
Richard M. Stallman <rms@gnu.org>
parents: 4235
diff changeset
759
9195
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
760 The optional fourth argument, LOCAL, if non-nil, says to modify
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
761 the hook's buffer-local value rather than its default value.
43435
c7aaafe7f385 (add-hook): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 43158
diff changeset
762 This makes the hook buffer-local if needed, and it makes t a member
c7aaafe7f385 (add-hook): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 43158
diff changeset
763 of the buffer-local value. That acts as a flag to run the hook
c7aaafe7f385 (add-hook): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 43158
diff changeset
764 functions in the default value as well as in the local value.
9195
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
765
4414
3356419b94c1 (add-hook): Change a single function into a list.
Richard M. Stallman <rms@gnu.org>
parents: 4235
diff changeset
766 HOOK should be a symbol, and FUNCTION may be any valid function. If
3356419b94c1 (add-hook): Change a single function into a list.
Richard M. Stallman <rms@gnu.org>
parents: 4235
diff changeset
767 HOOK is void, it is first set to nil. If HOOK's value is a single
8959
d33302427a47 (remove-hook, add-hook): Copy existing list before modifying.
Richard M. Stallman <rms@gnu.org>
parents: 8928
diff changeset
768 function, it is changed to a list of functions."
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
769 (or (boundp hook) (set hook nil))
9195
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
770 (or (default-boundp hook) (set-default hook nil))
39557
fb85410efef7 (define-key-after): Allow `key' to be longer than 1.
Gerd Moellmann <gerd@gnu.org>
parents: 38760
diff changeset
771 (if local (unless (local-variable-if-set-p hook)
fb85410efef7 (define-key-after): Allow `key' to be longer than 1.
Gerd Moellmann <gerd@gnu.org>
parents: 38760
diff changeset
772 (set (make-local-variable hook) (list t)))
28863
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
773 ;; Detect the case where make-local-variable was used on a hook
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
774 ;; and do what we used to do.
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
775 (unless (and (consp (symbol-value hook)) (memq t (symbol-value hook)))
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
776 (setq local t)))
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
777 (let ((hook-value (if local (symbol-value hook) (default-value hook))))
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
778 ;; If the hook value is a single function, turn it into a list.
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
779 (when (or (not (listp hook-value)) (eq (car hook-value) 'lambda))
28940
2a91228f7aa3 (add-hook): setq hook-value, not set
Sam Steingold <sds@gnu.org>
parents: 28868
diff changeset
780 (setq hook-value (list hook-value)))
28863
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
781 ;; Do the actual addition if necessary
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
782 (unless (member function hook-value)
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
783 (setq hook-value
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
784 (if append
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
785 (append hook-value (list function))
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
786 (cons function hook-value))))
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
787 ;; Set the actual variable
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
788 (if local (set hook hook-value) (set-default hook hook-value))))
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
789
9195
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
790 (defun remove-hook (hook function &optional local)
4964
78c13f3054e5 (remove-hook): New function, analogous to add-hook. This
Richard M. Stallman <rms@gnu.org>
parents: 4767
diff changeset
791 "Remove from the value of HOOK the function FUNCTION.
78c13f3054e5 (remove-hook): New function, analogous to add-hook. This
Richard M. Stallman <rms@gnu.org>
parents: 4767
diff changeset
792 HOOK should be a symbol, and FUNCTION may be any valid function. If
78c13f3054e5 (remove-hook): New function, analogous to add-hook. This
Richard M. Stallman <rms@gnu.org>
parents: 4767
diff changeset
793 FUNCTION isn't the value of HOOK, or, if FUNCTION doesn't appear in the
9195
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
794 list of hooks to run in HOOK, then nothing is done. See `add-hook'.
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
795
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
796 The optional third argument, LOCAL, if non-nil, says to modify
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
797 the hook's buffer-local value rather than its default value.
39557
fb85410efef7 (define-key-after): Allow `key' to be longer than 1.
Gerd Moellmann <gerd@gnu.org>
parents: 38760
diff changeset
798 This makes the hook buffer-local if needed."
28863
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
799 (or (boundp hook) (set hook nil))
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
800 (or (default-boundp hook) (set-default hook nil))
39557
fb85410efef7 (define-key-after): Allow `key' to be longer than 1.
Gerd Moellmann <gerd@gnu.org>
parents: 38760
diff changeset
801 (if local (unless (local-variable-if-set-p hook)
fb85410efef7 (define-key-after): Allow `key' to be longer than 1.
Gerd Moellmann <gerd@gnu.org>
parents: 38760
diff changeset
802 (set (make-local-variable hook) (list t)))
28863
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
803 ;; Detect the case where make-local-variable was used on a hook
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
804 ;; and do what we used to do.
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
805 (unless (and (consp (symbol-value hook)) (memq t (symbol-value hook)))
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
806 (setq local t)))
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
807 (let ((hook-value (if local (symbol-value hook) (default-value hook))))
29062
a11f776c0efc (remove-hook): Don't turn the hook's value into a list.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28947
diff changeset
808 ;; Remove the function, for both the list and the non-list cases.
a11f776c0efc (remove-hook): Don't turn the hook's value into a list.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28947
diff changeset
809 (if (or (not (listp hook-value)) (eq (car hook-value) 'lambda))
a11f776c0efc (remove-hook): Don't turn the hook's value into a list.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28947
diff changeset
810 (if (equal hook-value function) (setq hook-value nil))
a11f776c0efc (remove-hook): Don't turn the hook's value into a list.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28947
diff changeset
811 (setq hook-value (delete function (copy-sequence hook-value))))
28863
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
812 ;; If the function is on the global hook, we need to shadow it locally
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
813 ;;(when (and local (member function (default-value hook))
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
814 ;; (not (member (cons 'not function) hook-value)))
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
815 ;; (push (cons 'not function) hook-value))
6430ce03c28a (add-hook, remove-hook): Make hook buffer-local if needed..
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28811
diff changeset
816 ;; Set the actual variable
44473
b64869712ee0 (remove-hook): When there are no more local hooks,
Richard M. Stallman <rms@gnu.org>
parents: 44422
diff changeset
817 (if (not local)
b64869712ee0 (remove-hook): When there are no more local hooks,
Richard M. Stallman <rms@gnu.org>
parents: 44422
diff changeset
818 (set-default hook hook-value)
b64869712ee0 (remove-hook): When there are no more local hooks,
Richard M. Stallman <rms@gnu.org>
parents: 44422
diff changeset
819 (if (equal hook-value '(t))
b64869712ee0 (remove-hook): When there are no more local hooks,
Richard M. Stallman <rms@gnu.org>
parents: 44422
diff changeset
820 (kill-local-variable hook)
b64869712ee0 (remove-hook): When there are no more local hooks,
Richard M. Stallman <rms@gnu.org>
parents: 44422
diff changeset
821 (set hook hook-value)))))
9510
f03544494d1c (add-to-list): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9202
diff changeset
822
32355
6bf2ae19e286 (add-to-list): Add optional argument APPEND.
Miles Bader <miles@gnu.org>
parents: 32131
diff changeset
823 (defun add-to-list (list-var element &optional append)
9535
a2908d5da32a (add-to-list): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 9510
diff changeset
824 "Add to the value of LIST-VAR the element ELEMENT if it isn't there yet.
13812
fdbace398b5e (add-to-list): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 13186
diff changeset
825 The test for presence of ELEMENT is done with `equal'.
32355
6bf2ae19e286 (add-to-list): Add optional argument APPEND.
Miles Bader <miles@gnu.org>
parents: 32131
diff changeset
826 If ELEMENT is added, it is added at the beginning of the list,
6bf2ae19e286 (add-to-list): Add optional argument APPEND.
Miles Bader <miles@gnu.org>
parents: 32131
diff changeset
827 unless the optional argument APPEND is non-nil, in which case
6bf2ae19e286 (add-to-list): Add optional argument APPEND.
Miles Bader <miles@gnu.org>
parents: 32131
diff changeset
828 ELEMENT is added at the end.
24757
f4127409d184 (add-to-list): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 24699
diff changeset
829
43833
37bc1e73d4b3 (add-to-list): Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents: 43527
diff changeset
830 The return value is the new value of LIST-VAR.
37bc1e73d4b3 (add-to-list): Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents: 43527
diff changeset
831
9535
a2908d5da32a (add-to-list): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 9510
diff changeset
832 If you want to use `add-to-list' on a variable that is not defined
a2908d5da32a (add-to-list): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 9510
diff changeset
833 until a certain package is loaded, you should put the call to `add-to-list'
a2908d5da32a (add-to-list): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 9510
diff changeset
834 into a hook function that will be run only after loading the package.
a2908d5da32a (add-to-list): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 9510
diff changeset
835 `eval-after-load' provides one way to do this. In some cases
a2908d5da32a (add-to-list): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 9510
diff changeset
836 other hooks, such as major mode hooks, can do the job."
21409
3e8b7782f4f5 (add-to-list): Always return updated value of LIST-VAR.
Karl Heuer <kwzh@gnu.org>
parents: 21173
diff changeset
837 (if (member element (symbol-value list-var))
3e8b7782f4f5 (add-to-list): Always return updated value of LIST-VAR.
Karl Heuer <kwzh@gnu.org>
parents: 21173
diff changeset
838 (symbol-value list-var)
32355
6bf2ae19e286 (add-to-list): Add optional argument APPEND.
Miles Bader <miles@gnu.org>
parents: 32131
diff changeset
839 (set list-var
6bf2ae19e286 (add-to-list): Add optional argument APPEND.
Miles Bader <miles@gnu.org>
parents: 32131
diff changeset
840 (if append
6bf2ae19e286 (add-to-list): Add optional argument APPEND.
Miles Bader <miles@gnu.org>
parents: 32131
diff changeset
841 (append (symbol-value list-var) (list element))
6bf2ae19e286 (add-to-list): Add optional argument APPEND.
Miles Bader <miles@gnu.org>
parents: 32131
diff changeset
842 (cons element (symbol-value list-var))))))
39725
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
843
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
844
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
845 ;;; Load history
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
846
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
847 (defvar symbol-file-load-history-loaded nil
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
848 "Non-nil means we have loaded the file `fns-VERSION.el' in `exec-directory'.
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
849 That file records the part of `load-history' for preloaded files,
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
850 which is cleared out before dumping to make Emacs smaller.")
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
851
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
852 (defun load-symbol-file-load-history ()
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
853 "Load the file `fns-VERSION.el' in `exec-directory' if not already done.
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
854 That file records the part of `load-history' for preloaded files,
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
855 which is cleared out before dumping to make Emacs smaller."
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
856 (unless symbol-file-load-history-loaded
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
857 (load (expand-file-name
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
858 ;; fns-XX.YY.ZZ.el does not work on DOS filesystem.
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
859 (if (eq system-type 'ms-dos)
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
860 "fns.el"
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
861 (format "fns-%s.el" emacs-version))
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
862 exec-directory)
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
863 ;; The file name fns-%s.el already has a .el extension.
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
864 nil nil t)
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
865 (setq symbol-file-load-history-loaded t)))
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
866
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
867 (defun symbol-file (function)
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
868 "Return the input source from which FUNCTION was loaded.
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
869 The value is normally a string that was passed to `load':
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
870 either an absolute file name, or a library name
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
871 \(with no directory name and no `.el' or `.elc' at the end).
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
872 It can also be nil, if the definition is not associated with any file."
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
873 (load-symbol-file-load-history)
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
874 (let ((files load-history)
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
875 file functions)
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
876 (while files
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
877 (if (memq function (cdr (car files)))
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
878 (setq file (car (car files)) files nil))
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
879 (setq files (cdr files)))
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
880 file))
c64d3e3adf5d (symbol-file-load-history-loaded)
Miles Bader <miles@gnu.org>
parents: 39598
diff changeset
881
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
882
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
883 ;;;; Specifying things to do after certain files are loaded.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
884
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
885 (defun eval-after-load (file form)
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
886 "Arrange that, if FILE is ever loaded, FORM will be run at that time.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
887 This makes or adds to an entry on `after-load-alist'.
10794
4443f78a2117 (eval-after-load): Run FORM now if FILE's already loaded.
Richard M. Stallman <rms@gnu.org>
parents: 10693
diff changeset
888 If FILE is already loaded, evaluate FORM right now.
5440
856ecdc5228a (eval-after-load): Do nothing if FORM is already on the list.
Richard M. Stallman <rms@gnu.org>
parents: 5421
diff changeset
889 It does nothing if FORM is already on the list for FILE.
34750
90213af2c5ba (eval-after-load): Doc fix.
Dave Love <fx@gnu.org>
parents: 33997
diff changeset
890 FILE must match exactly. Normally FILE is the name of a library,
90213af2c5ba (eval-after-load): Doc fix.
Dave Love <fx@gnu.org>
parents: 33997
diff changeset
891 with no directory or extension specified, since that is how `load'
41140
dc77550aede3 (eval-after-load): Make it work with features as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40832
diff changeset
892 is normally called.
dc77550aede3 (eval-after-load): Make it work with features as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40832
diff changeset
893 FILE can also be a feature (i.e. a symbol), in which case FORM is
dc77550aede3 (eval-after-load): Make it work with features as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40832
diff changeset
894 evaluated whenever that feature is `provide'd."
5440
856ecdc5228a (eval-after-load): Do nothing if FORM is already on the list.
Richard M. Stallman <rms@gnu.org>
parents: 5421
diff changeset
895 (let ((elt (assoc file after-load-alist)))
41140
dc77550aede3 (eval-after-load): Make it work with features as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40832
diff changeset
896 ;; Make sure there is an element for FILE.
dc77550aede3 (eval-after-load): Make it work with features as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40832
diff changeset
897 (unless elt (setq elt (list file)) (push elt after-load-alist))
dc77550aede3 (eval-after-load): Make it work with features as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40832
diff changeset
898 ;; Add FORM to the element if it isn't there.
dc77550aede3 (eval-after-load): Make it work with features as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40832
diff changeset
899 (unless (member form (cdr elt))
dc77550aede3 (eval-after-load): Make it work with features as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40832
diff changeset
900 (nconc elt (list form))
dc77550aede3 (eval-after-load): Make it work with features as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40832
diff changeset
901 ;; If the file has been loaded already, run FORM right away.
dc77550aede3 (eval-after-load): Make it work with features as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40832
diff changeset
902 (if (if (symbolp file)
dc77550aede3 (eval-after-load): Make it work with features as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40832
diff changeset
903 (featurep file)
dc77550aede3 (eval-after-load): Make it work with features as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40832
diff changeset
904 ;; Make sure `load-history' contains the files dumped with
dc77550aede3 (eval-after-load): Make it work with features as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40832
diff changeset
905 ;; Emacs for the case that FILE is one of them.
dc77550aede3 (eval-after-load): Make it work with features as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40832
diff changeset
906 (load-symbol-file-load-history)
dc77550aede3 (eval-after-load): Make it work with features as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40832
diff changeset
907 (assoc file load-history))
dc77550aede3 (eval-after-load): Make it work with features as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40832
diff changeset
908 (eval form))))
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
909 form)
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
910
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
911 (defun eval-next-after-load (file)
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
912 "Read the following input sexp, and run it whenever FILE is loaded.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
913 This makes or adds to an entry on `after-load-alist'.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
914 FILE should be the name of a library, with no directory name."
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
915 (eval-after-load file (read)))
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
916
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
917
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
918 ;;;; Input and display facilities.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
919
18880
1ed40ed8e0c1 (custom-declare-variable-early): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18828
diff changeset
920 (defvar read-quoted-char-radix 8
18828
4837387f683c (read-quoted-char): Handle non-character events.
Richard M. Stallman <rms@gnu.org>
parents: 18821
diff changeset
921 "*Radix for \\[quoted-insert] and other uses of `read-quoted-char'.
18880
1ed40ed8e0c1 (custom-declare-variable-early): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18828
diff changeset
922 Legitimate radix values are 8, 10 and 16.")
1ed40ed8e0c1 (custom-declare-variable-early): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18828
diff changeset
923
1ed40ed8e0c1 (custom-declare-variable-early): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18828
diff changeset
924 (custom-declare-variable-early
1ed40ed8e0c1 (custom-declare-variable-early): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18828
diff changeset
925 'read-quoted-char-radix 8
1ed40ed8e0c1 (custom-declare-variable-early): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18828
diff changeset
926 "*Radix for \\[quoted-insert] and other uses of `read-quoted-char'.
18828
4837387f683c (read-quoted-char): Handle non-character events.
Richard M. Stallman <rms@gnu.org>
parents: 18821
diff changeset
927 Legitimate radix values are 8, 10 and 16."
4837387f683c (read-quoted-char): Handle non-character events.
Richard M. Stallman <rms@gnu.org>
parents: 18821
diff changeset
928 :type '(choice (const 8) (const 10) (const 16))
4837387f683c (read-quoted-char): Handle non-character events.
Richard M. Stallman <rms@gnu.org>
parents: 18821
diff changeset
929 :group 'editing-basics)
4837387f683c (read-quoted-char): Handle non-character events.
Richard M. Stallman <rms@gnu.org>
parents: 18821
diff changeset
930
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
931 (defun read-quoted-char (&optional prompt)
18821
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
932 "Like `read-char', but do not allow quitting.
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
933 Also, if the first character read is an octal digit,
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
934 we read any number of octal digits and return the
21008
7111f9cf9392 (read-quoted-char): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20939
diff changeset
935 specified character code. Any nondigit terminates the sequence.
18828
4837387f683c (read-quoted-char): Handle non-character events.
Richard M. Stallman <rms@gnu.org>
parents: 18821
diff changeset
936 If the terminator is RET, it is discarded;
18821
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
937 any other terminator is used itself as input.
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
938
21008
7111f9cf9392 (read-quoted-char): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20939
diff changeset
939 The optional argument PROMPT specifies a string to use to prompt the user.
7111f9cf9392 (read-quoted-char): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20939
diff changeset
940 The variable `read-quoted-char-radix' controls which radix to use
7111f9cf9392 (read-quoted-char): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20939
diff changeset
941 for numeric input."
18821
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
942 (let ((message-log-max nil) done (first t) (code 0) char)
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
943 (while (not done)
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
944 (let ((inhibit-quit first)
12108
f75e47f673f4 (read-quoted-char): Turn on help-form and turn off help-char.
Karl Heuer <kwzh@gnu.org>
parents: 12016
diff changeset
945 ;; Don't let C-h get the help message--only help function keys.
f75e47f673f4 (read-quoted-char): Turn on help-form and turn off help-char.
Karl Heuer <kwzh@gnu.org>
parents: 12016
diff changeset
946 (help-char nil)
f75e47f673f4 (read-quoted-char): Turn on help-form and turn off help-char.
Karl Heuer <kwzh@gnu.org>
parents: 12016
diff changeset
947 (help-form
f75e47f673f4 (read-quoted-char): Turn on help-form and turn off help-char.
Karl Heuer <kwzh@gnu.org>
parents: 12016
diff changeset
948 "Type the special character you want to use,
18821
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
949 or the octal character code.
18828
4837387f683c (read-quoted-char): Handle non-character events.
Richard M. Stallman <rms@gnu.org>
parents: 18821
diff changeset
950 RET terminates the character code and is discarded;
18821
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
951 any other non-digit terminates the character code and is then used as input."))
23058
4d7992b69c29 (read-quoted-char): Don't bind input-method-function;
Richard M. Stallman <rms@gnu.org>
parents: 22960
diff changeset
952 (setq char (read-event (and prompt (format "%s-" prompt)) t))
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
953 (if inhibit-quit (setq quit-flag nil)))
18948
faab6e4baa7d (read-quoted-char): Convert function keys like Return
Richard M. Stallman <rms@gnu.org>
parents: 18880
diff changeset
954 ;; Translate TAB key into control-I ASCII character, and so on.
faab6e4baa7d (read-quoted-char): Convert function keys like Return
Richard M. Stallman <rms@gnu.org>
parents: 18880
diff changeset
955 (and char
faab6e4baa7d (read-quoted-char): Convert function keys like Return
Richard M. Stallman <rms@gnu.org>
parents: 18880
diff changeset
956 (let ((translated (lookup-key function-key-map (vector char))))
19175
3d80c899a15d (read-quoted-char): Fix handling of meta-chars.
Richard M. Stallman <rms@gnu.org>
parents: 19002
diff changeset
957 (if (arrayp translated)
18948
faab6e4baa7d (read-quoted-char): Convert function keys like Return
Richard M. Stallman <rms@gnu.org>
parents: 18880
diff changeset
958 (setq char (aref translated 0)))))
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
959 (cond ((null char))
18828
4837387f683c (read-quoted-char): Handle non-character events.
Richard M. Stallman <rms@gnu.org>
parents: 18821
diff changeset
960 ((not (integerp char))
4837387f683c (read-quoted-char): Handle non-character events.
Richard M. Stallman <rms@gnu.org>
parents: 18821
diff changeset
961 (setq unread-command-events (list char)
4837387f683c (read-quoted-char): Handle non-character events.
Richard M. Stallman <rms@gnu.org>
parents: 18821
diff changeset
962 done t))
19175
3d80c899a15d (read-quoted-char): Fix handling of meta-chars.
Richard M. Stallman <rms@gnu.org>
parents: 19002
diff changeset
963 ((/= (logand char ?\M-\^@) 0)
3d80c899a15d (read-quoted-char): Fix handling of meta-chars.
Richard M. Stallman <rms@gnu.org>
parents: 19002
diff changeset
964 ;; Turn a meta-character into a character with the 0200 bit set.
3d80c899a15d (read-quoted-char): Fix handling of meta-chars.
Richard M. Stallman <rms@gnu.org>
parents: 19002
diff changeset
965 (setq code (logior (logand char (lognot ?\M-\^@)) 128)
3d80c899a15d (read-quoted-char): Fix handling of meta-chars.
Richard M. Stallman <rms@gnu.org>
parents: 19002
diff changeset
966 done t))
18828
4837387f683c (read-quoted-char): Handle non-character events.
Richard M. Stallman <rms@gnu.org>
parents: 18821
diff changeset
967 ((and (<= ?0 char) (< char (+ ?0 (min 10 read-quoted-char-radix))))
4837387f683c (read-quoted-char): Handle non-character events.
Richard M. Stallman <rms@gnu.org>
parents: 18821
diff changeset
968 (setq code (+ (* code read-quoted-char-radix) (- char ?0)))
14343
ab021899d604 (read-quoted-char): Delete format call inside message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
969 (and prompt (setq prompt (message "%s %c" prompt char))))
18828
4837387f683c (read-quoted-char): Handle non-character events.
Richard M. Stallman <rms@gnu.org>
parents: 18821
diff changeset
970 ((and (<= ?a (downcase char))
4837387f683c (read-quoted-char): Handle non-character events.
Richard M. Stallman <rms@gnu.org>
parents: 18821
diff changeset
971 (< (downcase char) (+ ?a -10 (min 26 read-quoted-char-radix))))
19002
f21881dcd27b (read-quoted-char): Consistently downcase letter "digits".
Richard M. Stallman <rms@gnu.org>
parents: 18948
diff changeset
972 (setq code (+ (* code read-quoted-char-radix)
f21881dcd27b (read-quoted-char): Consistently downcase letter "digits".
Richard M. Stallman <rms@gnu.org>
parents: 18948
diff changeset
973 (+ 10 (- (downcase char) ?a))))
18828
4837387f683c (read-quoted-char): Handle non-character events.
Richard M. Stallman <rms@gnu.org>
parents: 18821
diff changeset
974 (and prompt (setq prompt (message "%s %c" prompt char))))
4837387f683c (read-quoted-char): Handle non-character events.
Richard M. Stallman <rms@gnu.org>
parents: 18821
diff changeset
975 ((and (not first) (eq char ?\C-m))
18821
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
976 (setq done t))
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
977 ((not first)
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
978 (setq unread-command-events (list char)
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
979 done t))
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
980 (t (setq code char
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
981 done t)))
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
982 (setq first nil))
19175
3d80c899a15d (read-quoted-char): Fix handling of meta-chars.
Richard M. Stallman <rms@gnu.org>
parents: 19002
diff changeset
983 code))
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
984
21092
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
985 (defun read-passwd (prompt &optional confirm default)
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
986 "Read a password, prompting with PROMPT. Echo `.' for each character typed.
20472
79ea90039b23 (read-password): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20410
diff changeset
987 End with RET, LFD, or ESC. DEL or C-h rubs out. C-u kills line.
21092
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
988 Optional argument CONFIRM, if non-nil, then read it twice to make sure.
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
989 Optional DEFAULT is a default password to use instead of empty input."
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
990 (if confirm
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
991 (let (success)
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
992 (while (not success)
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
993 (let ((first (read-passwd prompt nil default))
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
994 (second (read-passwd "Confirm password: " nil default)))
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
995 (if (equal first second)
36094
fddc05f3f926 (read-passwd): Clear Lisp memory holding password.
Gerd Moellmann <gerd@gnu.org>
parents: 35281
diff changeset
996 (progn
fddc05f3f926 (read-passwd): Clear Lisp memory holding password.
Gerd Moellmann <gerd@gnu.org>
parents: 35281
diff changeset
997 (and (arrayp second) (fillarray second ?\0))
fddc05f3f926 (read-passwd): Clear Lisp memory holding password.
Gerd Moellmann <gerd@gnu.org>
parents: 35281
diff changeset
998 (setq success first))
fddc05f3f926 (read-passwd): Clear Lisp memory holding password.
Gerd Moellmann <gerd@gnu.org>
parents: 35281
diff changeset
999 (and (arrayp first) (fillarray first ?\0))
fddc05f3f926 (read-passwd): Clear Lisp memory holding password.
Gerd Moellmann <gerd@gnu.org>
parents: 35281
diff changeset
1000 (and (arrayp second) (fillarray second ?\0))
21092
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
1001 (message "Password not repeated accurately; please start over")
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
1002 (sit-for 1))))
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
1003 success)
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
1004 (let ((pass nil)
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
1005 (c 0)
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
1006 (echo-keystrokes 0)
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
1007 (cursor-in-echo-area t))
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
1008 (while (progn (message "%s%s"
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
1009 prompt
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
1010 (make-string (length pass) ?.))
28628
60285ddb5d02 (read-passwd): Use read-char-exclusive.
Richard M. Stallman <rms@gnu.org>
parents: 28490
diff changeset
1011 (setq c (read-char-exclusive nil t))
21092
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
1012 (and (/= c ?\r) (/= c ?\n) (/= c ?\e)))
37028
f023c8a482ec (read-passwd): Clear command history after each
Gerd Moellmann <gerd@gnu.org>
parents: 36468
diff changeset
1013 (clear-this-command-keys)
21092
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
1014 (if (= c ?\C-u)
36094
fddc05f3f926 (read-passwd): Clear Lisp memory holding password.
Gerd Moellmann <gerd@gnu.org>
parents: 35281
diff changeset
1015 (progn
fddc05f3f926 (read-passwd): Clear Lisp memory holding password.
Gerd Moellmann <gerd@gnu.org>
parents: 35281
diff changeset
1016 (and (arrayp pass) (fillarray pass ?\0))
fddc05f3f926 (read-passwd): Clear Lisp memory holding password.
Gerd Moellmann <gerd@gnu.org>
parents: 35281
diff changeset
1017 (setq pass ""))
21092
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
1018 (if (and (/= c ?\b) (/= c ?\177))
36094
fddc05f3f926 (read-passwd): Clear Lisp memory holding password.
Gerd Moellmann <gerd@gnu.org>
parents: 35281
diff changeset
1019 (let* ((new-char (char-to-string c))
fddc05f3f926 (read-passwd): Clear Lisp memory holding password.
Gerd Moellmann <gerd@gnu.org>
parents: 35281
diff changeset
1020 (new-pass (concat pass new-char)))
fddc05f3f926 (read-passwd): Clear Lisp memory holding password.
Gerd Moellmann <gerd@gnu.org>
parents: 35281
diff changeset
1021 (and (arrayp pass) (fillarray pass ?\0))
fddc05f3f926 (read-passwd): Clear Lisp memory holding password.
Gerd Moellmann <gerd@gnu.org>
parents: 35281
diff changeset
1022 (fillarray new-char ?\0)
fddc05f3f926 (read-passwd): Clear Lisp memory holding password.
Gerd Moellmann <gerd@gnu.org>
parents: 35281
diff changeset
1023 (setq c ?\0)
fddc05f3f926 (read-passwd): Clear Lisp memory holding password.
Gerd Moellmann <gerd@gnu.org>
parents: 35281
diff changeset
1024 (setq pass new-pass))
21092
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
1025 (if (> (length pass) 0)
36094
fddc05f3f926 (read-passwd): Clear Lisp memory holding password.
Gerd Moellmann <gerd@gnu.org>
parents: 35281
diff changeset
1026 (let ((new-pass (substring pass 0 -1)))
fddc05f3f926 (read-passwd): Clear Lisp memory holding password.
Gerd Moellmann <gerd@gnu.org>
parents: 35281
diff changeset
1027 (and (arrayp pass) (fillarray pass ?\0))
fddc05f3f926 (read-passwd): Clear Lisp memory holding password.
Gerd Moellmann <gerd@gnu.org>
parents: 35281
diff changeset
1028 (setq pass new-pass))))))
21092
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
1029 (message nil)
7726f8d9eff0 (read-passwd): Renamed from read-password. New second arg CONFIRM.
Richard M. Stallman <rms@gnu.org>
parents: 21066
diff changeset
1030 (or pass default ""))))
20472
79ea90039b23 (read-password): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20410
diff changeset
1031
44668
52222efc9d4d (insert-for-yank): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44473
diff changeset
1032 ;;; Atomic change groups.
52222efc9d4d (insert-for-yank): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44473
diff changeset
1033
43126
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1034 (defmacro atomic-change-group (&rest body)
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1035 "Perform BODY as an atomic change group.
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1036 This means that if BODY exits abnormally,
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1037 all of its changes to the current buffer are undone.
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1038 This works regadless of whether undo is enabled in the buffer.
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1039
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1040 This mechanism is transparent to ordinary use of undo;
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1041 if undo is enabled in the buffer and BODY succeeds, the
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1042 user can undo the change normally."
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1043 (let ((handle (make-symbol "--change-group-handle--"))
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1044 (success (make-symbol "--change-group-success--")))
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1045 `(let ((,handle (prepare-change-group))
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1046 (,success nil))
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1047 (unwind-protect
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1048 (progn
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1049 ;; This is inside the unwind-protect because
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1050 ;; it enables undo if that was disabled; we need
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1051 ;; to make sure that it gets disabled again.
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1052 (activate-change-group ,handle)
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1053 ,@body
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1054 (setq ,success t))
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1055 ;; Either of these functions will disable undo
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1056 ;; if it was disabled before.
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1057 (if ,success
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1058 (accept-change-group ,handle)
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1059 (cancel-change-group ,handle))))))
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1060
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1061 (defun prepare-change-group (&optional buffer)
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1062 "Return a handle for the current buffer's state, for a change group.
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1063 If you specify BUFFER, make a handle for BUFFER's state instead.
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1064
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1065 Pass the handle to `activate-change-group' afterward to initiate
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1066 the actual changes of the change group.
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1067
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1068 To finish the change group, call either `accept-change-group' or
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1069 `cancel-change-group' passing the same handle as argument. Call
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1070 `accept-change-group' to accept the changes in the group as final;
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1071 call `cancel-change-group' to undo them all. You should use
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1072 `unwind-protect' to make sure the group is always finished. The call
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1073 to `activate-change-group' should be inside the `unwind-protect'.
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1074 Once you finish the group, don't use the handle again--don't try to
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1075 finish the same group twice. For a simple example of correct use, see
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1076 the source code of `atomic-change-group'.
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1077
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1078 The handle records only the specified buffer. To make a multibuffer
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1079 change group, call this function once for each buffer you want to
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1080 cover, then use `nconc' to combine the returned values, like this:
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1081
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1082 (nconc (prepare-change-group buffer-1)
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1083 (prepare-change-group buffer-2))
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1084
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1085 You can then activate that multibuffer change group with a single
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1086 call to `activate-change-group' and finish it with a single call
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1087 to `accept-change-group' or `cancel-change-group'."
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1088
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1089 (list (cons (current-buffer) buffer-undo-list)))
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1090
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1091 (defun activate-change-group (handle)
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1092 "Activate a change group made with `prepare-change-group' (which see)."
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1093 (dolist (elt handle)
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1094 (with-current-buffer (car elt)
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1095 (if (eq buffer-undo-list t)
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1096 (setq buffer-undo-list nil)))))
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1097
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1098 (defun accept-change-group (handle)
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1099 "Finish a change group made with `prepare-change-group' (which see).
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1100 This finishes the change group by accepting its changes as final."
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1101 (dolist (elt handle)
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1102 (with-current-buffer (car elt)
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1103 (if (eq elt t)
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1104 (setq buffer-undo-list t)))))
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1105
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1106 (defun cancel-change-group (handle)
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1107 "Finish a change group made with `prepare-change-group' (which see).
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1108 This finishes the change group by reverting all of its changes."
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1109 (dolist (elt handle)
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1110 (with-current-buffer (car elt)
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1111 (setq elt (cdr elt))
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1112 (let ((old-car
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1113 (if (consp elt) (car elt)))
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1114 (old-cdr
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1115 (if (consp elt) (cdr elt))))
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1116 ;; Temporarily truncate the undo log at ELT.
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1117 (when (consp elt)
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1118 (setcar elt nil) (setcdr elt nil))
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1119 (unless (eq last-command 'undo) (undo-start))
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1120 ;; Make sure there's no confusion.
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1121 (when (and (consp elt) (not (eq elt (last pending-undo-list))))
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1122 (error "Undoing to some unrelated state"))
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1123 ;; Undo it all.
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1124 (while pending-undo-list (undo-more 1))
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1125 ;; Reset the modified cons cell ELT to its original content.
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1126 (when (consp elt)
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1127 (setcar elt old-car)
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1128 (setcdr elt old-cdr))
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1129 ;; Revert the undo info to what it was when we grabbed the state.
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1130 (setq buffer-undo-list elt)))))
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1131
44285
30505fab0350 (redraw-modeline): Define alias.
Richard M. Stallman <rms@gnu.org>
parents: 44251
diff changeset
1132 ;; For compatibility.
30505fab0350 (redraw-modeline): Define alias.
Richard M. Stallman <rms@gnu.org>
parents: 44251
diff changeset
1133 (defalias 'redraw-modeline 'force-mode-line-update)
30505fab0350 (redraw-modeline): Define alias.
Richard M. Stallman <rms@gnu.org>
parents: 44251
diff changeset
1134
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1135 (defun force-mode-line-update (&optional all)
43127
2c6477a9d9d5 (force-mode-line-update): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 43126
diff changeset
1136 "Force the mode line of the current buffer to be redisplayed.
2c6477a9d9d5 (force-mode-line-update): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 43126
diff changeset
1137 With optional non-nil ALL, force redisplay of all mode lines."
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1138 (if all (save-excursion (set-buffer (other-buffer))))
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1139 (set-buffer-modified-p (buffer-modified-p)))
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1140
41618
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1141 (defun momentary-string-display (string pos &optional exit-char message)
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1142 "Momentarily display STRING in the buffer at POS.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1143 Display remains until next character is typed.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1144 If the char is EXIT-CHAR (optional third arg, default is SPC) it is swallowed;
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1145 otherwise it is then available as input (as a command if nothing else).
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1146 Display MESSAGE (optional fourth arg) in the echo area.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1147 If MESSAGE is nil, instructions to type EXIT-CHAR are displayed there."
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1148 (or exit-char (setq exit-char ?\ ))
24322
ca77d79a0c21 (momentary-string-display): Bind inhibit-read-only.
Richard M. Stallman <rms@gnu.org>
parents: 24245
diff changeset
1149 (let ((inhibit-read-only t)
6553
fca6271b0983 (momentary-string-display): Avoid modifying the undo list.
Richard M. Stallman <rms@gnu.org>
parents: 6551
diff changeset
1150 ;; Don't modify the undo list at all.
fca6271b0983 (momentary-string-display): Avoid modifying the undo list.
Richard M. Stallman <rms@gnu.org>
parents: 6551
diff changeset
1151 (buffer-undo-list t)
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1152 (modified (buffer-modified-p))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1153 (name buffer-file-name)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1154 insert-end)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1155 (unwind-protect
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1156 (progn
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1157 (save-excursion
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1158 (goto-char pos)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1159 ;; defeat file locking... don't try this at home, kids!
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1160 (setq buffer-file-name nil)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1161 (insert-before-markers string)
4620
5474175de175 (momentary-string-display): Scroll to keep the string on the screen.
Richard M. Stallman <rms@gnu.org>
parents: 4518
diff changeset
1162 (setq insert-end (point))
5474175de175 (momentary-string-display): Scroll to keep the string on the screen.
Richard M. Stallman <rms@gnu.org>
parents: 4518
diff changeset
1163 ;; If the message end is off screen, recenter now.
21173
e917eb0d4e01 (save-match-data): store-match-data => set-match-data.
Richard M. Stallman <rms@gnu.org>
parents: 21092
diff changeset
1164 (if (< (window-end nil t) insert-end)
4620
5474175de175 (momentary-string-display): Scroll to keep the string on the screen.
Richard M. Stallman <rms@gnu.org>
parents: 4518
diff changeset
1165 (recenter (/ (window-height) 2)))
5474175de175 (momentary-string-display): Scroll to keep the string on the screen.
Richard M. Stallman <rms@gnu.org>
parents: 4518
diff changeset
1166 ;; If that pushed message start off the screen,
5474175de175 (momentary-string-display): Scroll to keep the string on the screen.
Richard M. Stallman <rms@gnu.org>
parents: 4518
diff changeset
1167 ;; scroll to start it at the top of the screen.
5474175de175 (momentary-string-display): Scroll to keep the string on the screen.
Richard M. Stallman <rms@gnu.org>
parents: 4518
diff changeset
1168 (move-to-window-line 0)
5474175de175 (momentary-string-display): Scroll to keep the string on the screen.
Richard M. Stallman <rms@gnu.org>
parents: 4518
diff changeset
1169 (if (> (point) pos)
5474175de175 (momentary-string-display): Scroll to keep the string on the screen.
Richard M. Stallman <rms@gnu.org>
parents: 4518
diff changeset
1170 (progn
5474175de175 (momentary-string-display): Scroll to keep the string on the screen.
Richard M. Stallman <rms@gnu.org>
parents: 4518
diff changeset
1171 (goto-char pos)
5474175de175 (momentary-string-display): Scroll to keep the string on the screen.
Richard M. Stallman <rms@gnu.org>
parents: 4518
diff changeset
1172 (recenter 0))))
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1173 (message (or message "Type %s to continue editing.")
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1174 (single-key-description exit-char))
2033
10cdd2928c7d (momentary-string-display): Handle any event when flushing the display.
Richard M. Stallman <rms@gnu.org>
parents: 2021
diff changeset
1175 (let ((char (read-event)))
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1176 (or (eq char exit-char)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1695
diff changeset
1177 (setq unread-command-events (list char)))))
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1178 (if insert-end
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1179 (save-excursion
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1180 (delete-region pos insert-end)))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1181 (setq buffer-file-name name)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1182 (set-buffer-modified-p modified))))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1183
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1184
41618
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1185 ;;;; Overlay operations
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1186
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1187 (defun copy-overlay (o)
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1188 "Return a copy of overlay O."
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1189 (let ((o1 (make-overlay (overlay-start o) (overlay-end o)
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1190 ;; FIXME: there's no easy way to find the
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1191 ;; insertion-type of the two markers.
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1192 (overlay-buffer o)))
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1193 (props (overlay-properties o)))
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1194 (while props
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1195 (overlay-put o1 (pop props) (pop props)))
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1196 o1))
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1197
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1198 (defun remove-overlays (beg end name val)
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1199 "Clear BEG and END of overlays whose property NAME has value VAL.
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1200 Overlays might be moved and or split."
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1201 (if (< end beg)
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1202 (setq beg (prog1 end (setq end beg))))
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1203 (save-excursion
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1204 (dolist (o (overlays-in beg end))
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1205 (when (eq (overlay-get o name) val)
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1206 ;; Either push this overlay outside beg...end
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1207 ;; or split it to exclude beg...end
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1208 ;; or delete it entirely (if it is contained in beg...end).
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1209 (if (< (overlay-start o) beg)
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1210 (if (> (overlay-end o) end)
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1211 (progn
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1212 (move-overlay (copy-overlay o)
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1213 (overlay-start o) beg)
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1214 (move-overlay o end (overlay-end o)))
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1215 (move-overlay o (overlay-start o) beg))
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1216 (if (> (overlay-end o) end)
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1217 (move-overlay o end (overlay-end o))
812e52cc5162 (copy-overlay, remove-overlays): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41187
diff changeset
1218 (delete-overlay o)))))))
42917
ec2db12c7670 (copy-without-properties): New function.
Richard M. Stallman <rms@gnu.org>
parents: 42266
diff changeset
1219
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1220 ;;;; Miscellanea.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1221
10254
1ac3c8fea14a (font-lock-defaults): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 10178
diff changeset
1222 ;; A number of major modes set this locally.
1ac3c8fea14a (font-lock-defaults): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 10178
diff changeset
1223 ;; Give it a global value to avoid compiler warnings.
1ac3c8fea14a (font-lock-defaults): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 10178
diff changeset
1224 (defvar font-lock-defaults nil)
1ac3c8fea14a (font-lock-defaults): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 10178
diff changeset
1225
20846
985a277c9b9a (suspend-hook, suspend-resume-hook): New defvars.
Richard M. Stallman <rms@gnu.org>
parents: 20687
diff changeset
1226 (defvar suspend-hook nil
985a277c9b9a (suspend-hook, suspend-resume-hook): New defvars.
Richard M. Stallman <rms@gnu.org>
parents: 20687
diff changeset
1227 "Normal hook run by `suspend-emacs', before suspending.")
985a277c9b9a (suspend-hook, suspend-resume-hook): New defvars.
Richard M. Stallman <rms@gnu.org>
parents: 20687
diff changeset
1228
985a277c9b9a (suspend-hook, suspend-resume-hook): New defvars.
Richard M. Stallman <rms@gnu.org>
parents: 20687
diff changeset
1229 (defvar suspend-resume-hook nil
985a277c9b9a (suspend-hook, suspend-resume-hook): New defvars.
Richard M. Stallman <rms@gnu.org>
parents: 20687
diff changeset
1230 "Normal hook run by `suspend-emacs', after Emacs is continued.")
985a277c9b9a (suspend-hook, suspend-resume-hook): New defvars.
Richard M. Stallman <rms@gnu.org>
parents: 20687
diff changeset
1231
42083
981f93cc55d1 (temp-buffer-show-hook, temp-buffer-setup-hook): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 42076
diff changeset
1232 (defvar temp-buffer-show-hook nil
981f93cc55d1 (temp-buffer-show-hook, temp-buffer-setup-hook): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 42076
diff changeset
1233 "Normal hook run by `with-output-to-temp-buffer' after displaying the buffer.
981f93cc55d1 (temp-buffer-show-hook, temp-buffer-setup-hook): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 42076
diff changeset
1234 When the hook runs, the temporary buffer is current, and the window it
981f93cc55d1 (temp-buffer-show-hook, temp-buffer-setup-hook): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 42076
diff changeset
1235 was displayed in is selected. This hook is normally set up with a
981f93cc55d1 (temp-buffer-show-hook, temp-buffer-setup-hook): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 42076
diff changeset
1236 function to make the buffer read only, and find function names and
981f93cc55d1 (temp-buffer-show-hook, temp-buffer-setup-hook): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 42076
diff changeset
1237 variable names in it, provided the major mode is still Help mode.")
981f93cc55d1 (temp-buffer-show-hook, temp-buffer-setup-hook): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 42076
diff changeset
1238
981f93cc55d1 (temp-buffer-show-hook, temp-buffer-setup-hook): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 42076
diff changeset
1239 (defvar temp-buffer-setup-hook nil
981f93cc55d1 (temp-buffer-show-hook, temp-buffer-setup-hook): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 42076
diff changeset
1240 "Normal hook run by `with-output-to-temp-buffer' at the start.
981f93cc55d1 (temp-buffer-show-hook, temp-buffer-setup-hook): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 42076
diff changeset
1241 When the hook runs, the temporary buffer is current.
981f93cc55d1 (temp-buffer-show-hook, temp-buffer-setup-hook): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 42076
diff changeset
1242 This hook is normally set up with a function to put the buffer in Help
981f93cc55d1 (temp-buffer-show-hook, temp-buffer-setup-hook): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 42076
diff changeset
1243 mode.")
981f93cc55d1 (temp-buffer-show-hook, temp-buffer-setup-hook): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 42076
diff changeset
1244
10254
1ac3c8fea14a (font-lock-defaults): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 10178
diff changeset
1245 ;; Avoid compiler warnings about this variable,
1ac3c8fea14a (font-lock-defaults): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 10178
diff changeset
1246 ;; which has a special meaning on certain system types.
1ac3c8fea14a (font-lock-defaults): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 10178
diff changeset
1247 (defvar buffer-file-type nil
1ac3c8fea14a (font-lock-defaults): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 10178
diff changeset
1248 "Non-nil if the visited file is a binary file.
1ac3c8fea14a (font-lock-defaults): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 10178
diff changeset
1249 This variable is meaningful on MS-DOG and Windows NT.
1ac3c8fea14a (font-lock-defaults): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 10178
diff changeset
1250 On those systems, it is automatically local in every buffer.
1ac3c8fea14a (font-lock-defaults): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 10178
diff changeset
1251 On other systems, this variable is normally always nil.")
1ac3c8fea14a (font-lock-defaults): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 10178
diff changeset
1252
14515
b35134a0e47a Added get-buffer-window-list.
Simon Marshall <simon@gnu.org>
parents: 14343
diff changeset
1253 ;; This should probably be written in C (i.e., without using `walk-windows').
14707
ddcae263bb18 Make get-buffer-window-list take MINIBUF arg.
Simon Marshall <simon@gnu.org>
parents: 14517
diff changeset
1254 (defun get-buffer-window-list (buffer &optional minibuf frame)
14515
b35134a0e47a Added get-buffer-window-list.
Simon Marshall <simon@gnu.org>
parents: 14343
diff changeset
1255 "Return windows currently displaying BUFFER, or nil if none.
14707
ddcae263bb18 Make get-buffer-window-list take MINIBUF arg.
Simon Marshall <simon@gnu.org>
parents: 14517
diff changeset
1256 See `walk-windows' for the meaning of MINIBUF and FRAME."
14517
8b88e5c2a6d5 Cope if get-buffer-window-list is given a buffer name (like get-buffer-window does).
Simon Marshall <simon@gnu.org>
parents: 14515
diff changeset
1257 (let ((buffer (if (bufferp buffer) buffer (get-buffer buffer))) windows)
14515
b35134a0e47a Added get-buffer-window-list.
Simon Marshall <simon@gnu.org>
parents: 14343
diff changeset
1258 (walk-windows (function (lambda (window)
b35134a0e47a Added get-buffer-window-list.
Simon Marshall <simon@gnu.org>
parents: 14343
diff changeset
1259 (if (eq (window-buffer window) buffer)
b35134a0e47a Added get-buffer-window-list.
Simon Marshall <simon@gnu.org>
parents: 14343
diff changeset
1260 (setq windows (cons window windows)))))
14707
ddcae263bb18 Make get-buffer-window-list take MINIBUF arg.
Simon Marshall <simon@gnu.org>
parents: 14517
diff changeset
1261 minibuf frame)
14515
b35134a0e47a Added get-buffer-window-list.
Simon Marshall <simon@gnu.org>
parents: 14343
diff changeset
1262 windows))
b35134a0e47a Added get-buffer-window-list.
Simon Marshall <simon@gnu.org>
parents: 14343
diff changeset
1263
8211
08fb5e917205 (ignore): Put doc string in right place.
Richard M. Stallman <rms@gnu.org>
parents: 7693
diff changeset
1264 (defun ignore (&rest ignore)
08fb5e917205 (ignore): Put doc string in right place.
Richard M. Stallman <rms@gnu.org>
parents: 7693
diff changeset
1265 "Do nothing and return nil.
08fb5e917205 (ignore): Put doc string in right place.
Richard M. Stallman <rms@gnu.org>
parents: 7693
diff changeset
1266 This function accepts any number of arguments, but ignores them."
7400
c415ff549eed (ignore): Allow interactive call.
Richard M. Stallman <rms@gnu.org>
parents: 7298
diff changeset
1267 (interactive)
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1268 nil)
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1269
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1270 (defun error (&rest args)
13936
24ff5e49ac27 (error): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 13812
diff changeset
1271 "Signal an error, making error message by passing all args to `format'.
24ff5e49ac27 (error): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 13812
diff changeset
1272 In Emacs, the convention is that error messages start with a capital
24ff5e49ac27 (error): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 13812
diff changeset
1273 letter but *do not* end with a period. Please follow this convention
24ff5e49ac27 (error): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 13812
diff changeset
1274 for the sake of consistency."
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1275 (while t
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1276 (signal 'error (list (apply 'format args)))))
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1277
5912
909b94d547c4 (user-original-login-name): Reduce to a defalias, since it's redundant with
Karl Heuer <kwzh@gnu.org>
parents: 5844
diff changeset
1278 (defalias 'user-original-login-name 'user-login-name)
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1279
44668
52222efc9d4d (insert-for-yank): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44473
diff changeset
1280 (defvar yank-excluded-properties)
52222efc9d4d (insert-for-yank): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44473
diff changeset
1281
44980
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1282 (defun remove-yank-excluded-properties (start end)
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1283 "Remove `yank-excluded-properties' between START and END positions.
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1284 Replaces `category' properties with their defined properties."
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1285 (let ((inhibit-read-only t))
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1286 ;; Replace any `category' property with the properties it stands for.
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1287 (unless (memq yank-excluded-properties '(t nil))
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1288 (save-excursion
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1289 (goto-char start)
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1290 (while (< (point) end)
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1291 (let ((cat (get-text-property (point) 'category))
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1292 run-end)
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1293 (when cat
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1294 (setq run-end
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1295 (next-single-property-change (point) 'category nil end))
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1296 (remove-list-of-text-properties (point) run-end '(category))
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1297 (add-text-properties (point) run-end (symbol-plist cat))
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1298 (goto-char (or run-end end)))
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1299 (setq run-end
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1300 (next-single-property-change (point) 'category nil end))
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1301 (goto-char (or run-end end))))))
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1302 (if (eq yank-excluded-properties t)
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1303 (set-text-properties start end nil)
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1304 (remove-list-of-text-properties start end
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1305 yank-excluded-properties))))
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1306
44668
52222efc9d4d (insert-for-yank): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44473
diff changeset
1307 (defun insert-for-yank (&rest strings)
52222efc9d4d (insert-for-yank): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44473
diff changeset
1308 "Insert STRINGS at point, stripping some text properties.
52222efc9d4d (insert-for-yank): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44473
diff changeset
1309 Strip text properties from the inserted text
52222efc9d4d (insert-for-yank): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44473
diff changeset
1310 according to `yank-excluded-properties'.
52222efc9d4d (insert-for-yank): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44473
diff changeset
1311 Otherwise just like (insert STRINGS...)."
52222efc9d4d (insert-for-yank): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44473
diff changeset
1312 (let ((opoint (point)))
52222efc9d4d (insert-for-yank): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44473
diff changeset
1313 (apply 'insert strings)
44980
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1314 (remove-yank-excluded-properties opoint (point))))
44723
f5b7b7055a64 (insert-buffer-substring-no-properties): New function.
Kim F. Storm <storm@cua.dk>
parents: 44668
diff changeset
1315
f5b7b7055a64 (insert-buffer-substring-no-properties): New function.
Kim F. Storm <storm@cua.dk>
parents: 44668
diff changeset
1316 (defun insert-buffer-substring-no-properties (buf &optional start end)
f5b7b7055a64 (insert-buffer-substring-no-properties): New function.
Kim F. Storm <storm@cua.dk>
parents: 44668
diff changeset
1317 "Insert before point a substring of buffer BUFFER, without text properties.
f5b7b7055a64 (insert-buffer-substring-no-properties): New function.
Kim F. Storm <storm@cua.dk>
parents: 44668
diff changeset
1318 BUFFER may be a buffer or a buffer name.
f5b7b7055a64 (insert-buffer-substring-no-properties): New function.
Kim F. Storm <storm@cua.dk>
parents: 44668
diff changeset
1319 Arguments START and END are character numbers specifying the substring.
f5b7b7055a64 (insert-buffer-substring-no-properties): New function.
Kim F. Storm <storm@cua.dk>
parents: 44668
diff changeset
1320 They default to the beginning and the end of BUFFER."
f5b7b7055a64 (insert-buffer-substring-no-properties): New function.
Kim F. Storm <storm@cua.dk>
parents: 44668
diff changeset
1321 (let ((opoint (point)))
f5b7b7055a64 (insert-buffer-substring-no-properties): New function.
Kim F. Storm <storm@cua.dk>
parents: 44668
diff changeset
1322 (insert-buffer-substring buf start end)
f5b7b7055a64 (insert-buffer-substring-no-properties): New function.
Kim F. Storm <storm@cua.dk>
parents: 44668
diff changeset
1323 (let ((inhibit-read-only t))
f5b7b7055a64 (insert-buffer-substring-no-properties): New function.
Kim F. Storm <storm@cua.dk>
parents: 44668
diff changeset
1324 (set-text-properties opoint (point) nil))))
f5b7b7055a64 (insert-buffer-substring-no-properties): New function.
Kim F. Storm <storm@cua.dk>
parents: 44668
diff changeset
1325
f5b7b7055a64 (insert-buffer-substring-no-properties): New function.
Kim F. Storm <storm@cua.dk>
parents: 44668
diff changeset
1326 (defun insert-buffer-substring-as-yank (buf &optional start end)
f5b7b7055a64 (insert-buffer-substring-no-properties): New function.
Kim F. Storm <storm@cua.dk>
parents: 44668
diff changeset
1327 "Insert before point a part of buffer BUFFER, stripping some text properties.
f5b7b7055a64 (insert-buffer-substring-no-properties): New function.
Kim F. Storm <storm@cua.dk>
parents: 44668
diff changeset
1328 BUFFER may be a buffer or a buffer name. Arguments START and END are
f5b7b7055a64 (insert-buffer-substring-no-properties): New function.
Kim F. Storm <storm@cua.dk>
parents: 44668
diff changeset
1329 character numbers specifying the substring. They default to the
f5b7b7055a64 (insert-buffer-substring-no-properties): New function.
Kim F. Storm <storm@cua.dk>
parents: 44668
diff changeset
1330 beginning and the end of BUFFER. Strip text properties from the
f5b7b7055a64 (insert-buffer-substring-no-properties): New function.
Kim F. Storm <storm@cua.dk>
parents: 44668
diff changeset
1331 inserted text according to `yank-excluded-properties'."
f5b7b7055a64 (insert-buffer-substring-no-properties): New function.
Kim F. Storm <storm@cua.dk>
parents: 44668
diff changeset
1332 (let ((opoint (point)))
f5b7b7055a64 (insert-buffer-substring-no-properties): New function.
Kim F. Storm <storm@cua.dk>
parents: 44668
diff changeset
1333 (insert-buffer-substring buf start end)
44980
5eb4aa56b278 (remove-yank-excluded-properties): New helper function.
Kim F. Storm <storm@cua.dk>
parents: 44945
diff changeset
1334 (remove-yank-excluded-properties opoint (point))))
44723
f5b7b7055a64 (insert-buffer-substring-no-properties): New function.
Kim F. Storm <storm@cua.dk>
parents: 44668
diff changeset
1335
44668
52222efc9d4d (insert-for-yank): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44473
diff changeset
1336
52222efc9d4d (insert-for-yank): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44473
diff changeset
1337 ;; Synchronous shell commands.
52222efc9d4d (insert-for-yank): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44473
diff changeset
1338
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1339 (defun start-process-shell-command (name buffer &rest args)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1340 "Start a program in a subprocess. Return the process object for it.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1341 Args are NAME BUFFER COMMAND &rest COMMAND-ARGS.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1342 NAME is name for process. It is modified if necessary to make it unique.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1343 BUFFER is the buffer or (buffer-name) to associate with the process.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1344 Process output goes at end of that buffer, unless you specify
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1345 an output stream or filter function to handle the output.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1346 BUFFER may be also nil, meaning that this process is not associated
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1347 with any buffer
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1348 Third arg is command name, the name of a shell command.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
1349 Remaining arguments are the arguments for the command.
5460
3bd42ee22d1f (start-process-shell-command): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5440
diff changeset
1350 Wildcards and redirection are handled as usual in the shell."
9822
248462096d25 (start-process-shell-command): Don't use exec on windows-nt.
Karl Heuer <kwzh@gnu.org>
parents: 9535
diff changeset
1351 (cond
248462096d25 (start-process-shell-command): Don't use exec on windows-nt.
Karl Heuer <kwzh@gnu.org>
parents: 9535
diff changeset
1352 ((eq system-type 'vax-vms)
248462096d25 (start-process-shell-command): Don't use exec on windows-nt.
Karl Heuer <kwzh@gnu.org>
parents: 9535
diff changeset
1353 (apply 'start-process name buffer args))
10025
3b058e13d177 (start-process-shell-command): Don't use `exec'--
Richard M. Stallman <rms@gnu.org>
parents: 9986
diff changeset
1354 ;; We used to use `exec' to replace the shell with the command,
3b058e13d177 (start-process-shell-command): Don't use `exec'--
Richard M. Stallman <rms@gnu.org>
parents: 9986
diff changeset
1355 ;; but that failed to handle (...) and semicolon, etc.
9822
248462096d25 (start-process-shell-command): Don't use exec on windows-nt.
Karl Heuer <kwzh@gnu.org>
parents: 9535
diff changeset
1356 (t
248462096d25 (start-process-shell-command): Don't use exec on windows-nt.
Karl Heuer <kwzh@gnu.org>
parents: 9535
diff changeset
1357 (start-process name buffer shell-file-name shell-command-switch
10025
3b058e13d177 (start-process-shell-command): Don't use `exec'--
Richard M. Stallman <rms@gnu.org>
parents: 9986
diff changeset
1358 (mapconcat 'identity args " ")))))
39598
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1359
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1360 (defun call-process-shell-command (command &optional infile buffer display
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1361 &rest args)
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1362 "Execute the shell command COMMAND synchronously in separate process.
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1363 The remaining arguments are optional.
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1364 The program's input comes from file INFILE (nil means `/dev/null').
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1365 Insert output in BUFFER before point; t means current buffer;
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1366 nil for BUFFER means discard it; 0 means discard and don't wait.
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1367 BUFFER can also have the form (REAL-BUFFER STDERR-FILE); in that case,
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1368 REAL-BUFFER says what to do with standard output, as above,
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1369 while STDERR-FILE says what to do with standard error in the child.
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1370 STDERR-FILE may be nil (discard standard error output),
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1371 t (mix it with ordinary output), or a file name string.
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1372
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1373 Fourth arg DISPLAY non-nil means redisplay buffer as output is inserted.
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1374 Remaining arguments are strings passed as additional arguments for COMMAND.
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1375 Wildcards and redirection are handled as usual in the shell.
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1376
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1377 If BUFFER is 0, `call-process-shell-command' returns immediately with value nil.
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1378 Otherwise it waits for COMMAND to terminate and returns a numeric exit
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1379 status or a signal description string.
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1380 If you quit, the process is killed with SIGINT, or SIGKILL if you quit again."
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1381 (cond
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1382 ((eq system-type 'vax-vms)
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1383 (apply 'call-process command infile buffer display args))
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1384 ;; We used to use `exec' to replace the shell with the command,
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1385 ;; but that failed to handle (...) and semicolon, etc.
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1386 (t
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1387 (call-process shell-file-name
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1388 infile buffer display
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1389 shell-command-switch
67884544e4c8 (call-process-shell-command): New function.
Miles Bader <miles@gnu.org>
parents: 39557
diff changeset
1390 (mapconcat 'identity (cons command args) " ")))))
16359
18cc78dc8b18 (with-temp-file): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16333
diff changeset
1391
16277
bbddbc86b82b (with-current-buffer): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 15983
diff changeset
1392 (defmacro with-current-buffer (buffer &rest body)
bbddbc86b82b (with-current-buffer): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 15983
diff changeset
1393 "Execute the forms in BODY with BUFFER as the current buffer.
16379
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1394 The value returned is the value of the last form in BODY.
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1395 See also `with-temp-buffer'."
26002
4f46db3c9d7d * subr.el (with-current-buffer): don't use backquotes to avoid
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 25706
diff changeset
1396 (cons 'save-current-buffer
4f46db3c9d7d * subr.el (with-current-buffer): don't use backquotes to avoid
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 25706
diff changeset
1397 (cons (list 'set-buffer buffer)
4f46db3c9d7d * subr.el (with-current-buffer): don't use backquotes to avoid
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 25706
diff changeset
1398 body)))
16277
bbddbc86b82b (with-current-buffer): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 15983
diff changeset
1399
23736
a1b85478a209 Added with-temp-message.
Simon Marshall <simon@gnu.org>
parents: 23437
diff changeset
1400 (defmacro with-temp-file (file &rest body)
a1b85478a209 Added with-temp-message.
Simon Marshall <simon@gnu.org>
parents: 23437
diff changeset
1401 "Create a new buffer, evaluate BODY there, and write the buffer to FILE.
a1b85478a209 Added with-temp-message.
Simon Marshall <simon@gnu.org>
parents: 23437
diff changeset
1402 The value returned is the value of the last form in BODY.
16379
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1403 See also `with-temp-buffer'."
16359
18cc78dc8b18 (with-temp-file): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16333
diff changeset
1404 (let ((temp-file (make-symbol "temp-file"))
16379
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1405 (temp-buffer (make-symbol "temp-buffer")))
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1406 `(let ((,temp-file ,file)
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1407 (,temp-buffer
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1408 (get-buffer-create (generate-new-buffer-name " *temp file*"))))
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1409 (unwind-protect
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1410 (prog1
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1411 (with-current-buffer ,temp-buffer
23736
a1b85478a209 Added with-temp-message.
Simon Marshall <simon@gnu.org>
parents: 23437
diff changeset
1412 ,@body)
16379
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1413 (with-current-buffer ,temp-buffer
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1414 (widen)
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1415 (write-region (point-min) (point-max) ,temp-file nil 0)))
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1416 (and (buffer-name ,temp-buffer)
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1417 (kill-buffer ,temp-buffer))))))
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1418
23736
a1b85478a209 Added with-temp-message.
Simon Marshall <simon@gnu.org>
parents: 23437
diff changeset
1419 (defmacro with-temp-message (message &rest body)
24011
f36caedebd5f Doc fix.
Simon Marshall <simon@gnu.org>
parents: 24000
diff changeset
1420 "Display MESSAGE temporarily if non-nil while BODY is evaluated.
23736
a1b85478a209 Added with-temp-message.
Simon Marshall <simon@gnu.org>
parents: 23437
diff changeset
1421 The original message is restored to the echo area after BODY has finished.
a1b85478a209 Added with-temp-message.
Simon Marshall <simon@gnu.org>
parents: 23437
diff changeset
1422 The value returned is the value of the last form in BODY.
24011
f36caedebd5f Doc fix.
Simon Marshall <simon@gnu.org>
parents: 24000
diff changeset
1423 MESSAGE is written to the message log buffer if `message-log-max' is non-nil.
f36caedebd5f Doc fix.
Simon Marshall <simon@gnu.org>
parents: 24000
diff changeset
1424 If MESSAGE is nil, the echo area and message log buffer are unchanged.
f36caedebd5f Doc fix.
Simon Marshall <simon@gnu.org>
parents: 24000
diff changeset
1425 Use a MESSAGE of \"\" to temporarily clear the echo area."
24000
2de7db40964d (with-temp-message): Don't display MESSAGE if nil.
Simon Marshall <simon@gnu.org>
parents: 23907
diff changeset
1426 (let ((current-message (make-symbol "current-message"))
2de7db40964d (with-temp-message): Don't display MESSAGE if nil.
Simon Marshall <simon@gnu.org>
parents: 23907
diff changeset
1427 (temp-message (make-symbol "with-temp-message")))
2de7db40964d (with-temp-message): Don't display MESSAGE if nil.
Simon Marshall <simon@gnu.org>
parents: 23907
diff changeset
1428 `(let ((,temp-message ,message)
2de7db40964d (with-temp-message): Don't display MESSAGE if nil.
Simon Marshall <simon@gnu.org>
parents: 23907
diff changeset
1429 (,current-message))
23736
a1b85478a209 Added with-temp-message.
Simon Marshall <simon@gnu.org>
parents: 23437
diff changeset
1430 (unwind-protect
a1b85478a209 Added with-temp-message.
Simon Marshall <simon@gnu.org>
parents: 23437
diff changeset
1431 (progn
24000
2de7db40964d (with-temp-message): Don't display MESSAGE if nil.
Simon Marshall <simon@gnu.org>
parents: 23907
diff changeset
1432 (when ,temp-message
2de7db40964d (with-temp-message): Don't display MESSAGE if nil.
Simon Marshall <simon@gnu.org>
parents: 23907
diff changeset
1433 (setq ,current-message (current-message))
24699
1ce8c890309e (with-temp-message): Fix the other call to message to use %s.
Karl Heuer <kwzh@gnu.org>
parents: 24385
diff changeset
1434 (message "%s" ,temp-message))
23736
a1b85478a209 Added with-temp-message.
Simon Marshall <simon@gnu.org>
parents: 23437
diff changeset
1435 ,@body)
42076
d6765861f6ea (with-temp-message): At the end, always discard
Richard M. Stallman <rms@gnu.org>
parents: 41975
diff changeset
1436 (and ,temp-message
d6765861f6ea (with-temp-message): At the end, always discard
Richard M. Stallman <rms@gnu.org>
parents: 41975
diff changeset
1437 (if ,current-message
d6765861f6ea (with-temp-message): At the end, always discard
Richard M. Stallman <rms@gnu.org>
parents: 41975
diff changeset
1438 (message "%s" ,current-message)
d6765861f6ea (with-temp-message): At the end, always discard
Richard M. Stallman <rms@gnu.org>
parents: 41975
diff changeset
1439 (message nil)))))))
23736
a1b85478a209 Added with-temp-message.
Simon Marshall <simon@gnu.org>
parents: 23437
diff changeset
1440
a1b85478a209 Added with-temp-message.
Simon Marshall <simon@gnu.org>
parents: 23437
diff changeset
1441 (defmacro with-temp-buffer (&rest body)
a1b85478a209 Added with-temp-message.
Simon Marshall <simon@gnu.org>
parents: 23437
diff changeset
1442 "Create a temporary buffer, and evaluate BODY there like `progn'.
16379
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1443 See also `with-temp-file' and `with-output-to-string'."
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1444 (let ((temp-buffer (make-symbol "temp-buffer")))
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1445 `(let ((,temp-buffer
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1446 (get-buffer-create (generate-new-buffer-name " *temp*"))))
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1447 (unwind-protect
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1448 (with-current-buffer ,temp-buffer
23736
a1b85478a209 Added with-temp-message.
Simon Marshall <simon@gnu.org>
parents: 23437
diff changeset
1449 ,@body)
16379
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1450 (and (buffer-name ,temp-buffer)
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1451 (kill-buffer ,temp-buffer))))))
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1452
16311
a56a8c6f2d8f (with-output-to-string): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16294
diff changeset
1453 (defmacro with-output-to-string (&rest body)
a56a8c6f2d8f (with-output-to-string): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16294
diff changeset
1454 "Execute BODY, return the text it sent to `standard-output', as a string."
16379
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1455 `(let ((standard-output
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1456 (get-buffer-create (generate-new-buffer-name " *string-output*"))))
16311
a56a8c6f2d8f (with-output-to-string): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16294
diff changeset
1457 (let ((standard-output standard-output))
a56a8c6f2d8f (with-output-to-string): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16294
diff changeset
1458 ,@body)
16379
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1459 (with-current-buffer standard-output
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1460 (prog1
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1461 (buffer-string)
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1462 (kill-buffer nil)))))
16549
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
1463
40822
b10e7d6fb95b (with-local-quit): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40282
diff changeset
1464 (defmacro with-local-quit (&rest body)
b10e7d6fb95b (with-local-quit): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40282
diff changeset
1465 "Execute BODY with `inhibit-quit' temporarily bound to nil."
b10e7d6fb95b (with-local-quit): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40282
diff changeset
1466 `(condition-case nil
b10e7d6fb95b (with-local-quit): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40282
diff changeset
1467 (let ((inhibit-quit nil))
b10e7d6fb95b (with-local-quit): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40282
diff changeset
1468 ,@body)
b10e7d6fb95b (with-local-quit): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40282
diff changeset
1469 (quit (setq quit-flag t))))
b10e7d6fb95b (with-local-quit): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40282
diff changeset
1470
16549
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
1471 (defmacro combine-after-change-calls (&rest body)
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
1472 "Execute BODY, but don't call the after-change functions till the end.
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
1473 If BODY makes changes in the buffer, they are recorded
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
1474 and the functions on `after-change-functions' are called several times
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
1475 when BODY is finished.
17146
b8536e42d4ef (combine-after-change-calls): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16845
diff changeset
1476 The return value is the value of the last form in BODY.
16549
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
1477
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
1478 If `before-change-functions' is non-nil, then calls to the after-change
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
1479 functions can't be deferred, so in that case this macro has no effect.
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
1480
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
1481 Do not alter `after-change-functions' or `before-change-functions'
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
1482 in BODY."
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
1483 `(unwind-protect
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
1484 (let ((combine-after-change-calls t))
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
1485 . ,body)
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
1486 (combine-after-change-execute)))
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
1487
28234
763c6639628b (combine-run-hooks): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28148
diff changeset
1488
40282
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1489 (defvar delay-mode-hooks nil
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1490 "If non-nil, `run-mode-hooks' should delay running the hooks.")
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1491 (defvar delayed-mode-hooks nil
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1492 "List of delayed mode hooks waiting to be run.")
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1493 (make-variable-buffer-local 'delayed-mode-hooks)
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1494
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1495 (defun run-mode-hooks (&rest hooks)
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1496 "Run mode hooks `delayed-mode-hooks' and HOOKS, or delay HOOKS.
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1497 Execution is delayed if `delay-mode-hooks' is non-nil.
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1498 Major mode functions should use this."
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1499 (if delay-mode-hooks
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1500 ;; Delaying case.
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1501 (dolist (hook hooks)
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1502 (push hook delayed-mode-hooks))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1503 ;; Normal case, just run the hook as before plus any delayed hooks.
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1504 (setq hooks (nconc (nreverse delayed-mode-hooks) hooks))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1505 (setq delayed-mode-hooks nil)
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1506 (apply 'run-hooks hooks)))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1507
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1508 (defmacro delay-mode-hooks (&rest body)
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1509 "Execute BODY, but delay any `run-mode-hooks'.
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1510 Only affects hooks run in the current buffer."
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1511 `(progn
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1512 (make-local-variable 'delay-mode-hooks)
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1513 (let ((delay-mode-hooks t))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1514 ,@body)))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1515
41975
2b1145fdbe6e (derived-mode-p): Moved here from derived.el.
Richard M. Stallman <rms@gnu.org>
parents: 41955
diff changeset
1516 ;; PUBLIC: find if the current mode derives from another.
2b1145fdbe6e (derived-mode-p): Moved here from derived.el.
Richard M. Stallman <rms@gnu.org>
parents: 41955
diff changeset
1517
2b1145fdbe6e (derived-mode-p): Moved here from derived.el.
Richard M. Stallman <rms@gnu.org>
parents: 41955
diff changeset
1518 (defun derived-mode-p (&rest modes)
2b1145fdbe6e (derived-mode-p): Moved here from derived.el.
Richard M. Stallman <rms@gnu.org>
parents: 41955
diff changeset
1519 "Non-nil if the current major mode is derived from one of MODES.
2b1145fdbe6e (derived-mode-p): Moved here from derived.el.
Richard M. Stallman <rms@gnu.org>
parents: 41955
diff changeset
1520 Uses the `derived-mode-parent' property of the symbol to trace backwards."
2b1145fdbe6e (derived-mode-p): Moved here from derived.el.
Richard M. Stallman <rms@gnu.org>
parents: 41955
diff changeset
1521 (let ((parent major-mode))
2b1145fdbe6e (derived-mode-p): Moved here from derived.el.
Richard M. Stallman <rms@gnu.org>
parents: 41955
diff changeset
1522 (while (and (not (memq parent modes))
2b1145fdbe6e (derived-mode-p): Moved here from derived.el.
Richard M. Stallman <rms@gnu.org>
parents: 41955
diff changeset
1523 (setq parent (get parent 'derived-mode-parent))))
2b1145fdbe6e (derived-mode-p): Moved here from derived.el.
Richard M. Stallman <rms@gnu.org>
parents: 41955
diff changeset
1524 parent))
2b1145fdbe6e (derived-mode-p): Moved here from derived.el.
Richard M. Stallman <rms@gnu.org>
parents: 41955
diff changeset
1525
27297
f5713c397636 (with-syntax-table): Moved from simple.el.
Richard M. Stallman <rms@gnu.org>
parents: 26084
diff changeset
1526 (defmacro with-syntax-table (table &rest body)
f5713c397636 (with-syntax-table): Moved from simple.el.
Richard M. Stallman <rms@gnu.org>
parents: 26084
diff changeset
1527 "Evaluate BODY with syntax table of current buffer set to a copy of TABLE.
f5713c397636 (with-syntax-table): Moved from simple.el.
Richard M. Stallman <rms@gnu.org>
parents: 26084
diff changeset
1528 The syntax table of the current buffer is saved, BODY is evaluated, and the
f5713c397636 (with-syntax-table): Moved from simple.el.
Richard M. Stallman <rms@gnu.org>
parents: 26084
diff changeset
1529 saved table is restored, even in case of an abnormal exit.
f5713c397636 (with-syntax-table): Moved from simple.el.
Richard M. Stallman <rms@gnu.org>
parents: 26084
diff changeset
1530 Value is what BODY returns."
27384
a10a13dd0670 (with-syntax-table): Use make-symbol, not gensym.
Richard M. Stallman <rms@gnu.org>
parents: 27383
diff changeset
1531 (let ((old-table (make-symbol "table"))
a10a13dd0670 (with-syntax-table): Use make-symbol, not gensym.
Richard M. Stallman <rms@gnu.org>
parents: 27383
diff changeset
1532 (old-buffer (make-symbol "buffer")))
27297
f5713c397636 (with-syntax-table): Moved from simple.el.
Richard M. Stallman <rms@gnu.org>
parents: 26084
diff changeset
1533 `(let ((,old-table (syntax-table))
f5713c397636 (with-syntax-table): Moved from simple.el.
Richard M. Stallman <rms@gnu.org>
parents: 26084
diff changeset
1534 (,old-buffer (current-buffer)))
f5713c397636 (with-syntax-table): Moved from simple.el.
Richard M. Stallman <rms@gnu.org>
parents: 26084
diff changeset
1535 (unwind-protect
f5713c397636 (with-syntax-table): Moved from simple.el.
Richard M. Stallman <rms@gnu.org>
parents: 26084
diff changeset
1536 (progn
f5713c397636 (with-syntax-table): Moved from simple.el.
Richard M. Stallman <rms@gnu.org>
parents: 26084
diff changeset
1537 (set-syntax-table (copy-syntax-table ,table))
f5713c397636 (with-syntax-table): Moved from simple.el.
Richard M. Stallman <rms@gnu.org>
parents: 26084
diff changeset
1538 ,@body)
f5713c397636 (with-syntax-table): Moved from simple.el.
Richard M. Stallman <rms@gnu.org>
parents: 26084
diff changeset
1539 (save-current-buffer
f5713c397636 (with-syntax-table): Moved from simple.el.
Richard M. Stallman <rms@gnu.org>
parents: 26084
diff changeset
1540 (set-buffer ,old-buffer)
f5713c397636 (with-syntax-table): Moved from simple.el.
Richard M. Stallman <rms@gnu.org>
parents: 26084
diff changeset
1541 (set-syntax-table ,old-table))))))
16379
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
1542
44668
52222efc9d4d (insert-for-yank): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44473
diff changeset
1543 ;;; Matching and substitution
52222efc9d4d (insert-for-yank): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44473
diff changeset
1544
15955
32d772cba2c1 (save-match-data): Use save-match-data-internal
Richard M. Stallman <rms@gnu.org>
parents: 15894
diff changeset
1545 (defvar save-match-data-internal)
32d772cba2c1 (save-match-data): Use save-match-data-internal
Richard M. Stallman <rms@gnu.org>
parents: 15894
diff changeset
1546
32d772cba2c1 (save-match-data): Use save-match-data-internal
Richard M. Stallman <rms@gnu.org>
parents: 15894
diff changeset
1547 ;; We use save-match-data-internal as the local variable because
32d772cba2c1 (save-match-data): Use save-match-data-internal
Richard M. Stallman <rms@gnu.org>
parents: 15894
diff changeset
1548 ;; that works ok in practice (people should not use that variable elsewhere).
32d772cba2c1 (save-match-data): Use save-match-data-internal
Richard M. Stallman <rms@gnu.org>
parents: 15894
diff changeset
1549 ;; We used to use an uninterned symbol; the compiler handles that properly
32d772cba2c1 (save-match-data): Use save-match-data-internal
Richard M. Stallman <rms@gnu.org>
parents: 15894
diff changeset
1550 ;; now, but it generates slower code.
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1551 (defmacro save-match-data (&rest body)
43527
d51d403fd80a (save-match-data): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 43498
diff changeset
1552 "Execute the BODY forms, restoring the global value of the match data.
d51d403fd80a (save-match-data): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 43498
diff changeset
1553 The value returned is the value of the last form in BODY."
26084
804cba424b64 Fix bootstrapping problems.
Paul Eggert <eggert@twinsun.com>
parents: 26002
diff changeset
1554 ;; It is better not to use backquote here,
804cba424b64 Fix bootstrapping problems.
Paul Eggert <eggert@twinsun.com>
parents: 26002
diff changeset
1555 ;; because that makes a bootstrapping problem
804cba424b64 Fix bootstrapping problems.
Paul Eggert <eggert@twinsun.com>
parents: 26002
diff changeset
1556 ;; if you need to recompile all the Lisp files using interpreted code.
804cba424b64 Fix bootstrapping problems.
Paul Eggert <eggert@twinsun.com>
parents: 26002
diff changeset
1557 (list 'let
804cba424b64 Fix bootstrapping problems.
Paul Eggert <eggert@twinsun.com>
parents: 26002
diff changeset
1558 '((save-match-data-internal (match-data)))
804cba424b64 Fix bootstrapping problems.
Paul Eggert <eggert@twinsun.com>
parents: 26002
diff changeset
1559 (list 'unwind-protect
804cba424b64 Fix bootstrapping problems.
Paul Eggert <eggert@twinsun.com>
parents: 26002
diff changeset
1560 (cons 'progn body)
804cba424b64 Fix bootstrapping problems.
Paul Eggert <eggert@twinsun.com>
parents: 26002
diff changeset
1561 '(set-match-data save-match-data-internal))))
144
535ec1aa78ef *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 114
diff changeset
1562
11115
9414f249cd8b Changed match-string to defun, but still return nil (no error) if no match.
Simon Marshall <simon@gnu.org>
parents: 11101
diff changeset
1563 (defun match-string (num &optional string)
11101
67231dca5f32 Change to macro, and return nil if there was no match at the specified depth.
Simon Marshall <simon@gnu.org>
parents: 11087
diff changeset
1564 "Return string of text matched by last search.
67231dca5f32 Change to macro, and return nil if there was no match at the specified depth.
Simon Marshall <simon@gnu.org>
parents: 11087
diff changeset
1565 NUM specifies which parenthesized expression in the last regexp.
67231dca5f32 Change to macro, and return nil if there was no match at the specified depth.
Simon Marshall <simon@gnu.org>
parents: 11087
diff changeset
1566 Value is nil if NUMth pair didn't match, or there were less than NUM pairs.
67231dca5f32 Change to macro, and return nil if there was no match at the specified depth.
Simon Marshall <simon@gnu.org>
parents: 11087
diff changeset
1567 Zero means the entire text matched by the whole regexp or whole string.
67231dca5f32 Change to macro, and return nil if there was no match at the specified depth.
Simon Marshall <simon@gnu.org>
parents: 11087
diff changeset
1568 STRING should be given if the last search was by `string-match' on STRING."
11115
9414f249cd8b Changed match-string to defun, but still return nil (no error) if no match.
Simon Marshall <simon@gnu.org>
parents: 11101
diff changeset
1569 (if (match-beginning num)
9414f249cd8b Changed match-string to defun, but still return nil (no error) if no match.
Simon Marshall <simon@gnu.org>
parents: 11101
diff changeset
1570 (if string
9414f249cd8b Changed match-string to defun, but still return nil (no error) if no match.
Simon Marshall <simon@gnu.org>
parents: 11101
diff changeset
1571 (substring string (match-beginning num) (match-end num))
9414f249cd8b Changed match-string to defun, but still return nil (no error) if no match.
Simon Marshall <simon@gnu.org>
parents: 11101
diff changeset
1572 (buffer-substring (match-beginning num) (match-end num)))))
10560
fd09d51dfd77 (match-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10368
diff changeset
1573
20491
d884af34ba47 (match-string-no-properties): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20476
diff changeset
1574 (defun match-string-no-properties (num &optional string)
d884af34ba47 (match-string-no-properties): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20476
diff changeset
1575 "Return string of text matched by last search, without text properties.
d884af34ba47 (match-string-no-properties): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20476
diff changeset
1576 NUM specifies which parenthesized expression in the last regexp.
d884af34ba47 (match-string-no-properties): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20476
diff changeset
1577 Value is nil if NUMth pair didn't match, or there were less than NUM pairs.
d884af34ba47 (match-string-no-properties): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20476
diff changeset
1578 Zero means the entire text matched by the whole regexp or whole string.
d884af34ba47 (match-string-no-properties): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20476
diff changeset
1579 STRING should be given if the last search was by `string-match' on STRING."
d884af34ba47 (match-string-no-properties): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20476
diff changeset
1580 (if (match-beginning num)
d884af34ba47 (match-string-no-properties): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20476
diff changeset
1581 (if string
d884af34ba47 (match-string-no-properties): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20476
diff changeset
1582 (let ((result
d884af34ba47 (match-string-no-properties): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20476
diff changeset
1583 (substring string (match-beginning num) (match-end num))))
d884af34ba47 (match-string-no-properties): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20476
diff changeset
1584 (set-text-properties 0 (length result) nil result)
d884af34ba47 (match-string-no-properties): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20476
diff changeset
1585 result)
d884af34ba47 (match-string-no-properties): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20476
diff changeset
1586 (buffer-substring-no-properties (match-beginning num)
d884af34ba47 (match-string-no-properties): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20476
diff changeset
1587 (match-end num)))))
d884af34ba47 (match-string-no-properties): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20476
diff changeset
1588
16314
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
1589 (defun split-string (string &optional separators)
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
1590 "Splits STRING into substrings where there are matches for SEPARATORS.
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
1591 Each match for SEPARATORS is a splitting point.
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
1592 The substrings between the splitting points are made into a list
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
1593 which is returned.
20476
f213a5906ea6 (split-string): Handle empty matches reasonably.
Richard M. Stallman <rms@gnu.org>
parents: 20472
diff changeset
1594 If SEPARATORS is absent, it defaults to \"[ \\f\\t\\n\\r\\v]+\".
f213a5906ea6 (split-string): Handle empty matches reasonably.
Richard M. Stallman <rms@gnu.org>
parents: 20472
diff changeset
1595
f213a5906ea6 (split-string): Handle empty matches reasonably.
Richard M. Stallman <rms@gnu.org>
parents: 20472
diff changeset
1596 If there is match for SEPARATORS at the beginning of STRING, we do not
f213a5906ea6 (split-string): Handle empty matches reasonably.
Richard M. Stallman <rms@gnu.org>
parents: 20472
diff changeset
1597 include a null substring for that. Likewise, if there is a match
27810
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1598 at the end of STRING, we don't include a null substring for that.
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1599
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1600 Modifies the match data; use `save-match-data' if necessary."
16314
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
1601 (let ((rexp (or separators "[ \f\t\n\r\v]+"))
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
1602 (start 0)
20476
f213a5906ea6 (split-string): Handle empty matches reasonably.
Richard M. Stallman <rms@gnu.org>
parents: 20472
diff changeset
1603 notfirst
16314
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
1604 (list nil))
20476
f213a5906ea6 (split-string): Handle empty matches reasonably.
Richard M. Stallman <rms@gnu.org>
parents: 20472
diff changeset
1605 (while (and (string-match rexp string
f213a5906ea6 (split-string): Handle empty matches reasonably.
Richard M. Stallman <rms@gnu.org>
parents: 20472
diff changeset
1606 (if (and notfirst
f213a5906ea6 (split-string): Handle empty matches reasonably.
Richard M. Stallman <rms@gnu.org>
parents: 20472
diff changeset
1607 (= start (match-beginning 0))
f213a5906ea6 (split-string): Handle empty matches reasonably.
Richard M. Stallman <rms@gnu.org>
parents: 20472
diff changeset
1608 (< start (length string)))
f213a5906ea6 (split-string): Handle empty matches reasonably.
Richard M. Stallman <rms@gnu.org>
parents: 20472
diff changeset
1609 (1+ start) start))
f213a5906ea6 (split-string): Handle empty matches reasonably.
Richard M. Stallman <rms@gnu.org>
parents: 20472
diff changeset
1610 (< (match-beginning 0) (length string)))
f213a5906ea6 (split-string): Handle empty matches reasonably.
Richard M. Stallman <rms@gnu.org>
parents: 20472
diff changeset
1611 (setq notfirst t)
16333
585956e62c87 (split-string): Fix minor bug.
Richard M. Stallman <rms@gnu.org>
parents: 16314
diff changeset
1612 (or (eq (match-beginning 0) 0)
20476
f213a5906ea6 (split-string): Handle empty matches reasonably.
Richard M. Stallman <rms@gnu.org>
parents: 20472
diff changeset
1613 (and (eq (match-beginning 0) (match-end 0))
f213a5906ea6 (split-string): Handle empty matches reasonably.
Richard M. Stallman <rms@gnu.org>
parents: 20472
diff changeset
1614 (eq (match-beginning 0) start))
16314
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
1615 (setq list
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
1616 (cons (substring string start (match-beginning 0))
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
1617 list)))
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
1618 (setq start (match-end 0)))
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
1619 (or (eq start (length string))
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
1620 (setq list
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
1621 (cons (substring string start)
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
1622 list)))
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
1623 (nreverse list)))
24089
70954a8be49b (subst-char-in-string): New function.
Andrew Innes <andrewi@gnu.org>
parents: 24011
diff changeset
1624
70954a8be49b (subst-char-in-string): New function.
Andrew Innes <andrewi@gnu.org>
parents: 24011
diff changeset
1625 (defun subst-char-in-string (fromchar tochar string &optional inplace)
70954a8be49b (subst-char-in-string): New function.
Andrew Innes <andrewi@gnu.org>
parents: 24011
diff changeset
1626 "Replace FROMCHAR with TOCHAR in STRING each time it occurs.
70954a8be49b (subst-char-in-string): New function.
Andrew Innes <andrewi@gnu.org>
parents: 24011
diff changeset
1627 Unless optional argument INPLACE is non-nil, return a new string."
33835
1b1555d26963 Undoing the changes erroneously committed just before.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33833
diff changeset
1628 (let ((i (length string))
1b1555d26963 Undoing the changes erroneously committed just before.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33833
diff changeset
1629 (newstr (if inplace string (copy-sequence string))))
1b1555d26963 Undoing the changes erroneously committed just before.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33833
diff changeset
1630 (while (> i 0)
1b1555d26963 Undoing the changes erroneously committed just before.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33833
diff changeset
1631 (setq i (1- i))
1b1555d26963 Undoing the changes erroneously committed just before.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33833
diff changeset
1632 (if (eq (aref newstr i) fromchar)
1b1555d26963 Undoing the changes erroneously committed just before.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33833
diff changeset
1633 (aset newstr i tochar)))
1b1555d26963 Undoing the changes erroneously committed just before.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33833
diff changeset
1634 newstr))
27810
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1635
28148
0f14966fe791 (replace-regexp-in-string): Renamed from
Dave Love <fx@gnu.org>
parents: 28065
diff changeset
1636 (defun replace-regexp-in-string (regexp rep string &optional
0f14966fe791 (replace-regexp-in-string): Renamed from
Dave Love <fx@gnu.org>
parents: 28065
diff changeset
1637 fixedcase literal subexp start)
27810
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1638 "Replace all matches for REGEXP with REP in STRING.
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1639
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1640 Return a new string containing the replacements.
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1641
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1642 Optional arguments FIXEDCASE, LITERAL and SUBEXP are like the
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1643 arguments with the same names of function `replace-match'. If START
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1644 is non-nil, start replacements at that index in STRING.
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1645
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1646 REP is either a string used as the NEWTEXT arg of `replace-match' or a
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1647 function. If it is a function it is applied to each match to generate
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1648 the replacement passed to `replace-match'; the match-data at this
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1649 point are such that match 0 is the function's argument.
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1650
28148
0f14966fe791 (replace-regexp-in-string): Renamed from
Dave Love <fx@gnu.org>
parents: 28065
diff changeset
1651 To replace only the first match (if any), make REGEXP match up to \\'
0f14966fe791 (replace-regexp-in-string): Renamed from
Dave Love <fx@gnu.org>
parents: 28065
diff changeset
1652 and replace a sub-expression, e.g.
0f14966fe791 (replace-regexp-in-string): Renamed from
Dave Love <fx@gnu.org>
parents: 28065
diff changeset
1653 (replace-regexp-in-string \"\\(foo\\).*\\'\" \"bar\" \" foo foo\" nil nil 1)
0f14966fe791 (replace-regexp-in-string): Renamed from
Dave Love <fx@gnu.org>
parents: 28065
diff changeset
1654 => \" bar foo\"
0f14966fe791 (replace-regexp-in-string): Renamed from
Dave Love <fx@gnu.org>
parents: 28065
diff changeset
1655 "
27810
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1656
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1657 ;; To avoid excessive consing from multiple matches in long strings,
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1658 ;; don't just call `replace-match' continually. Walk down the
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1659 ;; string looking for matches of REGEXP and building up a (reversed)
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1660 ;; list MATCHES. This comprises segments of STRING which weren't
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1661 ;; matched interspersed with replacements for segments that were.
39557
fb85410efef7 (define-key-after): Allow `key' to be longer than 1.
Gerd Moellmann <gerd@gnu.org>
parents: 38760
diff changeset
1662 ;; [For a `large' number of replacements it's more efficient to
27810
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1663 ;; operate in a temporary buffer; we can't tell from the function's
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1664 ;; args whether to choose the buffer-based implementation, though it
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1665 ;; might be reasonable to do so for long enough STRING.]
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1666 (let ((l (length string))
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1667 (start (or start 0))
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1668 matches str mb me)
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1669 (save-match-data
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1670 (while (and (< start l) (string-match regexp string start))
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1671 (setq mb (match-beginning 0)
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1672 me (match-end 0))
28065
093dcd5f39b2 (replace-regexps-in-string): Properly handle the case where
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27908
diff changeset
1673 ;; If we matched the empty string, make sure we advance by one char
093dcd5f39b2 (replace-regexps-in-string): Properly handle the case where
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27908
diff changeset
1674 (when (= me mb) (setq me (min l (1+ mb))))
093dcd5f39b2 (replace-regexps-in-string): Properly handle the case where
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27908
diff changeset
1675 ;; Generate a replacement for the matched substring.
093dcd5f39b2 (replace-regexps-in-string): Properly handle the case where
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27908
diff changeset
1676 ;; Operate only on the substring to minimize string consing.
093dcd5f39b2 (replace-regexps-in-string): Properly handle the case where
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27908
diff changeset
1677 ;; Set up match data for the substring for replacement;
093dcd5f39b2 (replace-regexps-in-string): Properly handle the case where
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27908
diff changeset
1678 ;; presumably this is likely to be faster than munging the
093dcd5f39b2 (replace-regexps-in-string): Properly handle the case where
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27908
diff changeset
1679 ;; match data directly in Lisp.
093dcd5f39b2 (replace-regexps-in-string): Properly handle the case where
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27908
diff changeset
1680 (string-match regexp (setq str (substring string mb me)))
093dcd5f39b2 (replace-regexps-in-string): Properly handle the case where
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27908
diff changeset
1681 (setq matches
093dcd5f39b2 (replace-regexps-in-string): Properly handle the case where
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27908
diff changeset
1682 (cons (replace-match (if (stringp rep)
093dcd5f39b2 (replace-regexps-in-string): Properly handle the case where
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27908
diff changeset
1683 rep
093dcd5f39b2 (replace-regexps-in-string): Properly handle the case where
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27908
diff changeset
1684 (funcall rep (match-string 0 str)))
093dcd5f39b2 (replace-regexps-in-string): Properly handle the case where
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27908
diff changeset
1685 fixedcase literal str subexp)
093dcd5f39b2 (replace-regexps-in-string): Properly handle the case where
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27908
diff changeset
1686 (cons (substring string start mb) ; unmatched prefix
093dcd5f39b2 (replace-regexps-in-string): Properly handle the case where
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27908
diff changeset
1687 matches)))
093dcd5f39b2 (replace-regexps-in-string): Properly handle the case where
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27908
diff changeset
1688 (setq start me))
27810
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1689 ;; Reconstruct a string from the pieces.
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1690 (setq matches (cons (substring string start l) matches)) ; leftover
1d7650c95e0a (when, unless, split-string): Doc fix.
Dave Love <fx@gnu.org>
parents: 27482
diff changeset
1691 (apply #'concat (nreverse matches)))))
16359
18cc78dc8b18 (with-temp-file): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16333
diff changeset
1692
5385
53077bf7c718 (shell-quote-argument): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5302
diff changeset
1693 (defun shell-quote-argument (argument)
53077bf7c718 (shell-quote-argument): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5302
diff changeset
1694 "Quote an argument for passing as argument to an inferior shell."
12465
0d404ef125ea (shell-quote-argument): Don't do anything, on MS-DOS.
Richard M. Stallman <rms@gnu.org>
parents: 12395
diff changeset
1695 (if (eq system-type 'ms-dos)
25706
498eb90e1723 (shell-quote-argument): Quote argument with double
Eli Zaretskii <eliz@gnu.org>
parents: 25631
diff changeset
1696 ;; Quote using double quotes, but escape any existing quotes in
498eb90e1723 (shell-quote-argument): Quote argument with double
Eli Zaretskii <eliz@gnu.org>
parents: 25631
diff changeset
1697 ;; the argument with backslashes.
498eb90e1723 (shell-quote-argument): Quote argument with double
Eli Zaretskii <eliz@gnu.org>
parents: 25631
diff changeset
1698 (let ((result "")
498eb90e1723 (shell-quote-argument): Quote argument with double
Eli Zaretskii <eliz@gnu.org>
parents: 25631
diff changeset
1699 (start 0)
498eb90e1723 (shell-quote-argument): Quote argument with double
Eli Zaretskii <eliz@gnu.org>
parents: 25631
diff changeset
1700 end)
498eb90e1723 (shell-quote-argument): Quote argument with double
Eli Zaretskii <eliz@gnu.org>
parents: 25631
diff changeset
1701 (if (or (null (string-match "[^\"]" argument))
498eb90e1723 (shell-quote-argument): Quote argument with double
Eli Zaretskii <eliz@gnu.org>
parents: 25631
diff changeset
1702 (< (match-end 0) (length argument)))
498eb90e1723 (shell-quote-argument): Quote argument with double
Eli Zaretskii <eliz@gnu.org>
parents: 25631
diff changeset
1703 (while (string-match "[\"]" argument start)
498eb90e1723 (shell-quote-argument): Quote argument with double
Eli Zaretskii <eliz@gnu.org>
parents: 25631
diff changeset
1704 (setq end (match-beginning 0)
498eb90e1723 (shell-quote-argument): Quote argument with double
Eli Zaretskii <eliz@gnu.org>
parents: 25631
diff changeset
1705 result (concat result (substring argument start end)
498eb90e1723 (shell-quote-argument): Quote argument with double
Eli Zaretskii <eliz@gnu.org>
parents: 25631
diff changeset
1706 "\\" (substring argument end (1+ end)))
498eb90e1723 (shell-quote-argument): Quote argument with double
Eli Zaretskii <eliz@gnu.org>
parents: 25631
diff changeset
1707 start (1+ end))))
498eb90e1723 (shell-quote-argument): Quote argument with double
Eli Zaretskii <eliz@gnu.org>
parents: 25631
diff changeset
1708 (concat "\"" result (substring argument start) "\""))
12465
0d404ef125ea (shell-quote-argument): Don't do anything, on MS-DOS.
Richard M. Stallman <rms@gnu.org>
parents: 12395
diff changeset
1709 (if (eq system-type 'windows-nt)
0d404ef125ea (shell-quote-argument): Don't do anything, on MS-DOS.
Richard M. Stallman <rms@gnu.org>
parents: 12395
diff changeset
1710 (concat "\"" argument "\"")
17610
f95fbf6f1234 (shell-quote-argument): Quote null string usefully.
Richard M. Stallman <rms@gnu.org>
parents: 17437
diff changeset
1711 (if (equal argument "")
f95fbf6f1234 (shell-quote-argument): Quote null string usefully.
Richard M. Stallman <rms@gnu.org>
parents: 17437
diff changeset
1712 "''"
f95fbf6f1234 (shell-quote-argument): Quote null string usefully.
Richard M. Stallman <rms@gnu.org>
parents: 17437
diff changeset
1713 ;; Quote everything except POSIX filename characters.
f95fbf6f1234 (shell-quote-argument): Quote null string usefully.
Richard M. Stallman <rms@gnu.org>
parents: 17437
diff changeset
1714 ;; This should be safe enough even for really weird shells.
f95fbf6f1234 (shell-quote-argument): Quote null string usefully.
Richard M. Stallman <rms@gnu.org>
parents: 17437
diff changeset
1715 (let ((result "") (start 0) end)
f95fbf6f1234 (shell-quote-argument): Quote null string usefully.
Richard M. Stallman <rms@gnu.org>
parents: 17437
diff changeset
1716 (while (string-match "[^-0-9a-zA-Z_./]" argument start)
f95fbf6f1234 (shell-quote-argument): Quote null string usefully.
Richard M. Stallman <rms@gnu.org>
parents: 17437
diff changeset
1717 (setq end (match-beginning 0)
f95fbf6f1234 (shell-quote-argument): Quote null string usefully.
Richard M. Stallman <rms@gnu.org>
parents: 17437
diff changeset
1718 result (concat result (substring argument start end)
f95fbf6f1234 (shell-quote-argument): Quote null string usefully.
Richard M. Stallman <rms@gnu.org>
parents: 17437
diff changeset
1719 "\\" (substring argument end (1+ end)))
f95fbf6f1234 (shell-quote-argument): Quote null string usefully.
Richard M. Stallman <rms@gnu.org>
parents: 17437
diff changeset
1720 start (1+ end)))
f95fbf6f1234 (shell-quote-argument): Quote null string usefully.
Richard M. Stallman <rms@gnu.org>
parents: 17437
diff changeset
1721 (concat result (substring argument start)))))))
5385
53077bf7c718 (shell-quote-argument): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5302
diff changeset
1722
5844
445de172c217 (make-syntax-table): Behave like copy-syntax-table if an argument is given,
Karl Heuer <kwzh@gnu.org>
parents: 5460
diff changeset
1723 (defun make-syntax-table (&optional oldtable)
5421
a248a39fa4b8 (make-syntax-table): New function; no longer an alias
Richard M. Stallman <rms@gnu.org>
parents: 5385
diff changeset
1724 "Return a new syntax table.
40822
b10e7d6fb95b (with-local-quit): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40282
diff changeset
1725 Create a syntax table which inherits from OLDTABLE (if non-nil) or
b10e7d6fb95b (with-local-quit): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40282
diff changeset
1726 from `standard-syntax-table' otherwise."
b10e7d6fb95b (with-local-quit): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40282
diff changeset
1727 (let ((table (make-char-table 'syntax-table nil)))
b10e7d6fb95b (with-local-quit): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40282
diff changeset
1728 (set-char-table-parent table (or oldtable (standard-syntax-table)))
b10e7d6fb95b (with-local-quit): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40282
diff changeset
1729 table))
17146
b8536e42d4ef (combine-after-change-calls): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16845
diff changeset
1730
b8536e42d4ef (combine-after-change-calls): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16845
diff changeset
1731 (defun add-to-invisibility-spec (arg)
b8536e42d4ef (combine-after-change-calls): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16845
diff changeset
1732 "Add elements to `buffer-invisibility-spec'.
b8536e42d4ef (combine-after-change-calls): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16845
diff changeset
1733 See documentation for `buffer-invisibility-spec' for the kind of elements
b8536e42d4ef (combine-after-change-calls): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16845
diff changeset
1734 that can be added."
b8536e42d4ef (combine-after-change-calls): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16845
diff changeset
1735 (cond
b8536e42d4ef (combine-after-change-calls): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16845
diff changeset
1736 ((or (null buffer-invisibility-spec) (eq buffer-invisibility-spec t))
b8536e42d4ef (combine-after-change-calls): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16845
diff changeset
1737 (setq buffer-invisibility-spec (list arg)))
b8536e42d4ef (combine-after-change-calls): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16845
diff changeset
1738 (t
17158
f181580c182c (when, unless): Symbol props moved from cl.el.
Karl Heuer <kwzh@gnu.org>
parents: 17152
diff changeset
1739 (setq buffer-invisibility-spec
f181580c182c (when, unless): Symbol props moved from cl.el.
Karl Heuer <kwzh@gnu.org>
parents: 17152
diff changeset
1740 (cons arg buffer-invisibility-spec)))))
17146
b8536e42d4ef (combine-after-change-calls): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16845
diff changeset
1741
b8536e42d4ef (combine-after-change-calls): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16845
diff changeset
1742 (defun remove-from-invisibility-spec (arg)
b8536e42d4ef (combine-after-change-calls): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16845
diff changeset
1743 "Remove elements from `buffer-invisibility-spec'."
24245
418feab1639c *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 24089
diff changeset
1744 (if (consp buffer-invisibility-spec)
17152
3c55ec545afb Fix typo in previous change.
Karl Heuer <kwzh@gnu.org>
parents: 17146
diff changeset
1745 (setq buffer-invisibility-spec (delete arg buffer-invisibility-spec))))
10825
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1746
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1747 (defun global-set-key (key command)
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1748 "Give KEY a global binding as COMMAND.
20410
af925352116e (global-set-key, local-set-key): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 19662
diff changeset
1749 COMMAND is the command definition to use; usually it is
af925352116e (global-set-key, local-set-key): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 19662
diff changeset
1750 a symbol naming an interactively-callable function.
af925352116e (global-set-key, local-set-key): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 19662
diff changeset
1751 KEY is a key sequence; noninteractively, it is a string or vector
af925352116e (global-set-key, local-set-key): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 19662
diff changeset
1752 of characters or event types, and non-ASCII characters with codes
af925352116e (global-set-key, local-set-key): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 19662
diff changeset
1753 above 127 (such as ISO Latin-1) can be included if you use a vector.
af925352116e (global-set-key, local-set-key): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 19662
diff changeset
1754
af925352116e (global-set-key, local-set-key): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 19662
diff changeset
1755 Note that if KEY has a local binding in the current buffer,
af925352116e (global-set-key, local-set-key): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 19662
diff changeset
1756 that local binding will continue to shadow any global binding
af925352116e (global-set-key, local-set-key): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 19662
diff changeset
1757 that you make with this function."
10825
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1758 (interactive "KSet key globally: \nCSet key %s to command: ")
43498
ecd03935bb98 (global-set-key, local-set-key): Undo 2002-02-06
Kim F. Storm <storm@cua.dk>
parents: 43435
diff changeset
1759 (or (vectorp key) (stringp key)
10825
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1760 (signal 'wrong-type-argument (list 'arrayp key)))
21578
6175866e1b71 (local-set-key, global-set-key): Return what define-key returns.
Richard M. Stallman <rms@gnu.org>
parents: 21409
diff changeset
1761 (define-key (current-global-map) key command))
5421
a248a39fa4b8 (make-syntax-table): New function; no longer an alias
Richard M. Stallman <rms@gnu.org>
parents: 5385
diff changeset
1762
10825
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1763 (defun local-set-key (key command)
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1764 "Give KEY a local binding as COMMAND.
20410
af925352116e (global-set-key, local-set-key): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 19662
diff changeset
1765 COMMAND is the command definition to use; usually it is
af925352116e (global-set-key, local-set-key): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 19662
diff changeset
1766 a symbol naming an interactively-callable function.
af925352116e (global-set-key, local-set-key): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 19662
diff changeset
1767 KEY is a key sequence; noninteractively, it is a string or vector
af925352116e (global-set-key, local-set-key): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 19662
diff changeset
1768 of characters or event types, and non-ASCII characters with codes
af925352116e (global-set-key, local-set-key): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 19662
diff changeset
1769 above 127 (such as ISO Latin-1) can be included if you use a vector.
af925352116e (global-set-key, local-set-key): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 19662
diff changeset
1770
10825
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1771 The binding goes in the current buffer's local map,
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1772 which in most cases is shared with all other buffers in the same major mode."
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1773 (interactive "KSet key locally: \nCSet key %s locally to command: ")
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1774 (let ((map (current-local-map)))
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1775 (or map
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1776 (use-local-map (setq map (make-sparse-keymap))))
43498
ecd03935bb98 (global-set-key, local-set-key): Undo 2002-02-06
Kim F. Storm <storm@cua.dk>
parents: 43435
diff changeset
1777 (or (vectorp key) (stringp key)
10825
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1778 (signal 'wrong-type-argument (list 'arrayp key)))
21578
6175866e1b71 (local-set-key, global-set-key): Return what define-key returns.
Richard M. Stallman <rms@gnu.org>
parents: 21409
diff changeset
1779 (define-key map key command)))
10825
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1780
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1781 (defun global-unset-key (key)
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1782 "Remove global binding of KEY.
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1783 KEY is a string representing a sequence of keystrokes."
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1784 (interactive "kUnset key globally: ")
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1785 (global-set-key key nil))
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1786
10826
bd0ab0601489 (local-unset-key): Fix args in previous change.
Karl Heuer <kwzh@gnu.org>
parents: 10825
diff changeset
1787 (defun local-unset-key (key)
10825
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1788 "Remove local binding of KEY.
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1789 KEY is a string representing a sequence of keystrokes."
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1790 (interactive "kUnset key locally: ")
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1791 (if (current-local-map)
10826
bd0ab0601489 (local-unset-key): Fix args in previous change.
Karl Heuer <kwzh@gnu.org>
parents: 10825
diff changeset
1792 (local-set-key key nil))
10825
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1793 nil)
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1794
12016
3fd7ef954be6 (frame-configuration-p): Moved here from frame.el.
Karl Heuer <kwzh@gnu.org>
parents: 11640
diff changeset
1795 ;; We put this here instead of in frame.el so that it's defined even on
3fd7ef954be6 (frame-configuration-p): Moved here from frame.el.
Karl Heuer <kwzh@gnu.org>
parents: 11640
diff changeset
1796 ;; systems where frame.el isn't loaded.
3fd7ef954be6 (frame-configuration-p): Moved here from frame.el.
Karl Heuer <kwzh@gnu.org>
parents: 11640
diff changeset
1797 (defun frame-configuration-p (object)
3fd7ef954be6 (frame-configuration-p): Moved here from frame.el.
Karl Heuer <kwzh@gnu.org>
parents: 11640
diff changeset
1798 "Return non-nil if OBJECT seems to be a frame configuration.
3fd7ef954be6 (frame-configuration-p): Moved here from frame.el.
Karl Heuer <kwzh@gnu.org>
parents: 11640
diff changeset
1799 Any list whose car is `frame-configuration' is assumed to be a frame
3fd7ef954be6 (frame-configuration-p): Moved here from frame.el.
Karl Heuer <kwzh@gnu.org>
parents: 11640
diff changeset
1800 configuration."
3fd7ef954be6 (frame-configuration-p): Moved here from frame.el.
Karl Heuer <kwzh@gnu.org>
parents: 11640
diff changeset
1801 (and (consp object)
3fd7ef954be6 (frame-configuration-p): Moved here from frame.el.
Karl Heuer <kwzh@gnu.org>
parents: 11640
diff changeset
1802 (eq (car object) 'frame-configuration)))
3fd7ef954be6 (frame-configuration-p): Moved here from frame.el.
Karl Heuer <kwzh@gnu.org>
parents: 11640
diff changeset
1803
17418
726a87ac1486 (functionp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 17215
diff changeset
1804 (defun functionp (object)
40822
b10e7d6fb95b (with-local-quit): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40282
diff changeset
1805 "Non-nil iff OBJECT is a type of object that can be called as a function."
41140
dc77550aede3 (eval-after-load): Make it work with features as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40832
diff changeset
1806 (or (and (symbolp object) (fboundp object)
45246
aec4852e765a (functionp): Catch errors in indirect-function.
Richard M. Stallman <rms@gnu.org>
parents: 45078
diff changeset
1807 (condition-case nil
aec4852e765a (functionp): Catch errors in indirect-function.
Richard M. Stallman <rms@gnu.org>
parents: 45078
diff changeset
1808 (setq object (indirect-function object))
aec4852e765a (functionp): Catch errors in indirect-function.
Richard M. Stallman <rms@gnu.org>
parents: 45078
diff changeset
1809 (error nil))
40822
b10e7d6fb95b (with-local-quit): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40282
diff changeset
1810 (eq (car-safe object) 'autoload)
41187
f3b21013637a (functionp): Do use cdr-safe on object.
Richard M. Stallman <rms@gnu.org>
parents: 41140
diff changeset
1811 (not (car-safe (cdr-safe (cdr-safe (cdr-safe (cdr-safe object)))))))
40822
b10e7d6fb95b (with-local-quit): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40282
diff changeset
1812 (subrp object) (byte-code-function-p object)
40832
33d8d61c63dd (functionp): Don't consider macros as functions.
Miles Bader <miles@gnu.org>
parents: 40830
diff changeset
1813 (eq (car-safe object) 'lambda)))
17418
726a87ac1486 (functionp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 17215
diff changeset
1814
37054
dec182bcbaa4 (interactive-form): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37028
diff changeset
1815 (defun interactive-form (function)
dec182bcbaa4 (interactive-form): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37028
diff changeset
1816 "Return the interactive form of FUNCTION.
dec182bcbaa4 (interactive-form): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37028
diff changeset
1817 If function is a command (see `commandp'), value is a list of the form
37055
4cb750b910d1 Fix typo.
Gerd Moellmann <gerd@gnu.org>
parents: 37054
diff changeset
1818 \(interactive SPEC). If function is not a command, return nil."
37054
dec182bcbaa4 (interactive-form): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37028
diff changeset
1819 (setq function (indirect-function function))
dec182bcbaa4 (interactive-form): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37028
diff changeset
1820 (when (commandp function)
dec182bcbaa4 (interactive-form): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37028
diff changeset
1821 (cond ((byte-code-function-p function)
dec182bcbaa4 (interactive-form): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37028
diff changeset
1822 (when (> (length function) 5)
dec182bcbaa4 (interactive-form): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37028
diff changeset
1823 (let ((spec (aref function 5)))
dec182bcbaa4 (interactive-form): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37028
diff changeset
1824 (if spec
dec182bcbaa4 (interactive-form): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37028
diff changeset
1825 (list 'interactive spec)
dec182bcbaa4 (interactive-form): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37028
diff changeset
1826 (list 'interactive)))))
dec182bcbaa4 (interactive-form): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37028
diff changeset
1827 ((subrp function)
dec182bcbaa4 (interactive-form): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37028
diff changeset
1828 (subr-interactive-form function))
dec182bcbaa4 (interactive-form): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37028
diff changeset
1829 ((eq (car-safe function) 'lambda)
dec182bcbaa4 (interactive-form): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37028
diff changeset
1830 (setq function (cddr function))
dec182bcbaa4 (interactive-form): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37028
diff changeset
1831 (when (stringp (car function))
dec182bcbaa4 (interactive-form): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37028
diff changeset
1832 (setq function (cdr function)))
dec182bcbaa4 (interactive-form): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37028
diff changeset
1833 (let ((form (car function)))
37070
838adca2d2fd (interactive-form): Fix paren typo.
Miles Bader <miles@gnu.org>
parents: 37055
diff changeset
1834 (when (eq (car-safe form) 'interactive)
37054
dec182bcbaa4 (interactive-form): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37028
diff changeset
1835 (copy-sequence form)))))))
787
3cece0106722 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 779
diff changeset
1836
27908
1c1e1ebca7f8 (assq-delete-all): Renamed from assoc-delete-all.
Gerd Moellmann <gerd@gnu.org>
parents: 27821
diff changeset
1837 (defun assq-delete-all (key alist)
25140
e4493f0697ae (assoc-delete-all): New function, renamed from frame-delete-all.
Dave Love <fx@gnu.org>
parents: 24757
diff changeset
1838 "Delete from ALIST all elements whose car is KEY.
e4493f0697ae (assoc-delete-all): New function, renamed from frame-delete-all.
Dave Love <fx@gnu.org>
parents: 24757
diff changeset
1839 Return the modified alist."
e4493f0697ae (assoc-delete-all): New function, renamed from frame-delete-all.
Dave Love <fx@gnu.org>
parents: 24757
diff changeset
1840 (let ((tail alist))
e4493f0697ae (assoc-delete-all): New function, renamed from frame-delete-all.
Dave Love <fx@gnu.org>
parents: 24757
diff changeset
1841 (while tail
e4493f0697ae (assoc-delete-all): New function, renamed from frame-delete-all.
Dave Love <fx@gnu.org>
parents: 24757
diff changeset
1842 (if (eq (car (car tail)) key)
e4493f0697ae (assoc-delete-all): New function, renamed from frame-delete-all.
Dave Love <fx@gnu.org>
parents: 24757
diff changeset
1843 (setq alist (delq (car tail) alist)))
e4493f0697ae (assoc-delete-all): New function, renamed from frame-delete-all.
Dave Love <fx@gnu.org>
parents: 24757
diff changeset
1844 (setq tail (cdr tail)))
e4493f0697ae (assoc-delete-all): New function, renamed from frame-delete-all.
Dave Love <fx@gnu.org>
parents: 24757
diff changeset
1845 alist))
e4493f0697ae (assoc-delete-all): New function, renamed from frame-delete-all.
Dave Love <fx@gnu.org>
parents: 24757
diff changeset
1846
44945
27acb2b2a2a9 (make-temp-file): New arg SUFFIX.
Richard M. Stallman <rms@gnu.org>
parents: 44900
diff changeset
1847 (defun make-temp-file (prefix &optional dir-flag suffix)
25631
0987f52a0674 (make-temp-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 25580
diff changeset
1848 "Create a temporary file.
0987f52a0674 (make-temp-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 25580
diff changeset
1849 The returned file name (created by appending some random characters at the end
0987f52a0674 (make-temp-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 25580
diff changeset
1850 of PREFIX, and expanding against `temporary-file-directory' if necessary,
0987f52a0674 (make-temp-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 25580
diff changeset
1851 is guaranteed to point to a newly created empty file.
0987f52a0674 (make-temp-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 25580
diff changeset
1852 You can then use `write-region' to write new data into the file.
0987f52a0674 (make-temp-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 25580
diff changeset
1853
44945
27acb2b2a2a9 (make-temp-file): New arg SUFFIX.
Richard M. Stallman <rms@gnu.org>
parents: 44900
diff changeset
1854 If DIR-FLAG is non-nil, create a new empty directory instead of a file.
27acb2b2a2a9 (make-temp-file): New arg SUFFIX.
Richard M. Stallman <rms@gnu.org>
parents: 44900
diff changeset
1855
27acb2b2a2a9 (make-temp-file): New arg SUFFIX.
Richard M. Stallman <rms@gnu.org>
parents: 44900
diff changeset
1856 If SUFFIX is non-nil, add that at the end of the file name."
25631
0987f52a0674 (make-temp-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 25580
diff changeset
1857 (let (file)
0987f52a0674 (make-temp-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 25580
diff changeset
1858 (while (condition-case ()
0987f52a0674 (make-temp-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 25580
diff changeset
1859 (progn
0987f52a0674 (make-temp-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 25580
diff changeset
1860 (setq file
0987f52a0674 (make-temp-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 25580
diff changeset
1861 (make-temp-name
0987f52a0674 (make-temp-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 25580
diff changeset
1862 (expand-file-name prefix temporary-file-directory)))
44945
27acb2b2a2a9 (make-temp-file): New arg SUFFIX.
Richard M. Stallman <rms@gnu.org>
parents: 44900
diff changeset
1863 (if suffix
27acb2b2a2a9 (make-temp-file): New arg SUFFIX.
Richard M. Stallman <rms@gnu.org>
parents: 44900
diff changeset
1864 (setq file (concat file suffix)))
25631
0987f52a0674 (make-temp-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 25580
diff changeset
1865 (if dir-flag
0987f52a0674 (make-temp-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 25580
diff changeset
1866 (make-directory file)
0987f52a0674 (make-temp-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 25580
diff changeset
1867 (write-region "" nil file nil 'silent nil 'excl))
0987f52a0674 (make-temp-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 25580
diff changeset
1868 nil)
39557
fb85410efef7 (define-key-after): Allow `key' to be longer than 1.
Gerd Moellmann <gerd@gnu.org>
parents: 38760
diff changeset
1869 (file-already-exists t))
25631
0987f52a0674 (make-temp-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 25580
diff changeset
1870 ;; the file was somehow created by someone else between
0987f52a0674 (make-temp-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 25580
diff changeset
1871 ;; `make-temp-name' and `write-region', let's try again.
0987f52a0674 (make-temp-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 25580
diff changeset
1872 nil)
0987f52a0674 (make-temp-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 25580
diff changeset
1873 file))
0987f52a0674 (make-temp-file): New function.
Richard M. Stallman <rms@gnu.org>
parents: 25580
diff changeset
1874
28720
f8379b011476 (add-minor-mode): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28628
diff changeset
1875
28751
6a79bbe8bf72 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28730
diff changeset
1876 (defun add-minor-mode (toggle name &optional keymap after toggle-fun)
28720
f8379b011476 (add-minor-mode): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28628
diff changeset
1877 "Register a new minor mode.
28751
6a79bbe8bf72 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28730
diff changeset
1878
31979
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1879 This is an XEmacs-compatibility function. Use `define-minor-mode' instead.
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1880
28751
6a79bbe8bf72 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28730
diff changeset
1881 TOGGLE is a symbol which is the name of a buffer-local variable that
6a79bbe8bf72 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28730
diff changeset
1882 is toggled on or off to say whether the minor mode is active or not.
6a79bbe8bf72 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28730
diff changeset
1883
6a79bbe8bf72 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28730
diff changeset
1884 NAME specifies what will appear in the mode line when the minor mode
6a79bbe8bf72 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28730
diff changeset
1885 is active. NAME should be either a string starting with a space, or a
6a79bbe8bf72 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28730
diff changeset
1886 symbol whose value is such a string.
6a79bbe8bf72 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28730
diff changeset
1887
6a79bbe8bf72 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28730
diff changeset
1888 Optional KEYMAP is the keymap for the minor mode that will be added
6a79bbe8bf72 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28730
diff changeset
1889 to `minor-mode-map-alist'.
6a79bbe8bf72 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28730
diff changeset
1890
6a79bbe8bf72 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28730
diff changeset
1891 Optional AFTER specifies that TOGGLE should be added after AFTER
6a79bbe8bf72 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28730
diff changeset
1892 in `minor-mode-alist'.
6a79bbe8bf72 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28730
diff changeset
1893
31979
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1894 Optional TOGGLE-FUN is an interactive function to toggle the mode.
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1895 It defaults to (and should by convention be) TOGGLE.
31563
96b9757bfd45 (add-minor-mode): Use toggle-fun arg.
Dave Love <fx@gnu.org>
parents: 30515
diff changeset
1896
31979
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1897 If TOGGLE has a non-nil `:included' property, an entry for the mode is
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1898 included in the mode-line minor mode menu.
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1899 If TOGGLE has a `:menu-tag', that is used for the menu item's label."
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1900 (unless toggle-fun (setq toggle-fun toggle))
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1901 ;; Add the name to the minor-mode-alist.
28751
6a79bbe8bf72 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28730
diff changeset
1902 (when name
31979
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1903 (let ((existing (assq toggle minor-mode-alist)))
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1904 (when (and (stringp name) (not (get-text-property 0 'local-map name)))
31563
96b9757bfd45 (add-minor-mode): Use toggle-fun arg.
Dave Love <fx@gnu.org>
parents: 30515
diff changeset
1905 (setq name
38760
ad2af6022ebb (add-minor-mode): Use mode-line-minor-mode-keymap for
Gerd Moellmann <gerd@gnu.org>
parents: 38414
diff changeset
1906 (propertize name
ad2af6022ebb (add-minor-mode): Use mode-line-minor-mode-keymap for
Gerd Moellmann <gerd@gnu.org>
parents: 38414
diff changeset
1907 'local-map mode-line-minor-mode-keymap
ad2af6022ebb (add-minor-mode): Use mode-line-minor-mode-keymap for
Gerd Moellmann <gerd@gnu.org>
parents: 38414
diff changeset
1908 'help-echo "mouse-3: minor mode menu")))
31979
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1909 (if existing
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1910 (setcdr existing (list name))
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1911 (let ((tail minor-mode-alist) found)
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1912 (while (and tail (not found))
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1913 (if (eq after (caar tail))
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1914 (setq found tail)
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1915 (setq tail (cdr tail))))
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1916 (if found
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1917 (let ((rest (cdr found)))
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1918 (setcdr found nil)
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1919 (nconc found (list (list toggle name)) rest))
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1920 (setq minor-mode-alist (cons (list toggle name)
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1921 minor-mode-alist)))))))
43126
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1922 ;; Add the toggle to the minor-modes menu if requested.
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1923 (when (get toggle :included)
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1924 (define-key mode-line-mode-menu
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1925 (vector toggle)
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1926 (list 'menu-item
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1927 (concat
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1928 (or (get toggle :menu-tag)
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1929 (if (stringp name) name (symbol-name toggle)))
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1930 (let ((mode-name (if (stringp name) name
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1931 (if (symbolp name) (symbol-value name)))))
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1932 (if mode-name
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1933 (concat " (" mode-name ")"))))
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1934 toggle-fun
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1935 :button (cons :toggle toggle))))
6f39ff1c6d8f (atomic-change-group, prepare-change-group, activate-change-group)
Richard M. Stallman <rms@gnu.org>
parents: 42941
diff changeset
1936
31979
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1937 ;; Add the map to the minor-mode-map-alist.
28751
6a79bbe8bf72 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28730
diff changeset
1938 (when keymap
6a79bbe8bf72 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28730
diff changeset
1939 (let ((existing (assq toggle minor-mode-map-alist)))
31979
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1940 (if existing
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1941 (setcdr existing keymap)
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1942 (let ((tail minor-mode-map-alist) found)
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1943 (while (and tail (not found))
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1944 (if (eq after (caar tail))
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1945 (setq found tail)
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1946 (setq tail (cdr tail))))
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1947 (if found
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1948 (let ((rest (cdr found)))
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1949 (setcdr found nil)
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1950 (nconc found (list (cons toggle keymap)) rest))
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1951 (setq minor-mode-map-alist (cons (cons toggle keymap)
6085a3297ebc (add-minor-mode): Don't eval NAME.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31563
diff changeset
1952 minor-mode-map-alist))))))))
44668
52222efc9d4d (insert-for-yank): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44473
diff changeset
1953
40282
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1954 ;; Clones ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1955
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1956 (defun text-clone-maintain (ol1 after beg end &optional len)
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1957 "Propagate the changes made under the overlay OL1 to the other clones.
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1958 This is used on the `modification-hooks' property of text clones."
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1959 (when (and after (not undo-in-progress) (overlay-start ol1))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1960 (let ((margin (if (overlay-get ol1 'text-clone-spreadp) 1 0)))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1961 (setq beg (max beg (+ (overlay-start ol1) margin)))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1962 (setq end (min end (- (overlay-end ol1) margin)))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1963 (when (<= beg end)
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1964 (save-excursion
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1965 (when (overlay-get ol1 'text-clone-syntax)
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1966 ;; Check content of the clone's text.
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1967 (let ((cbeg (+ (overlay-start ol1) margin))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1968 (cend (- (overlay-end ol1) margin)))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1969 (goto-char cbeg)
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1970 (save-match-data
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1971 (if (not (re-search-forward
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1972 (overlay-get ol1 'text-clone-syntax) cend t))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1973 ;; Mark the overlay for deletion.
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1974 (overlay-put ol1 'text-clones nil)
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1975 (when (< (match-end 0) cend)
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1976 ;; Shrink the clone at its end.
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1977 (setq end (min end (match-end 0)))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1978 (move-overlay ol1 (overlay-start ol1)
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1979 (+ (match-end 0) margin)))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1980 (when (> (match-beginning 0) cbeg)
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1981 ;; Shrink the clone at its beginning.
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1982 (setq beg (max (match-beginning 0) beg))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1983 (move-overlay ol1 (- (match-beginning 0) margin)
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1984 (overlay-end ol1)))))))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1985 ;; Now go ahead and update the clones.
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1986 (let ((head (- beg (overlay-start ol1)))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1987 (tail (- (overlay-end ol1) end))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1988 (str (buffer-substring beg end))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1989 (nothing-left t)
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1990 (inhibit-modification-hooks t))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1991 (dolist (ol2 (overlay-get ol1 'text-clones))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1992 (let ((oe (overlay-end ol2)))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1993 (unless (or (eq ol1 ol2) (null oe))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1994 (setq nothing-left nil)
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1995 (let ((mod-beg (+ (overlay-start ol2) head)))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1996 ;;(overlay-put ol2 'modification-hooks nil)
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1997 (goto-char (- (overlay-end ol2) tail))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1998 (unless (> mod-beg (point))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
1999 (save-excursion (insert str))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2000 (delete-region mod-beg (point)))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2001 ;;(overlay-put ol2 'modification-hooks '(text-clone-maintain))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2002 ))))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2003 (if nothing-left (delete-overlay ol1))))))))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2004
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2005 (defun text-clone-create (start end &optional spreadp syntax)
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2006 "Create a text clone of START...END at point.
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2007 Text clones are chunks of text that are automatically kept identical:
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2008 changes done to one of the clones will be immediately propagated to the other.
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2009
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2010 The buffer's content at point is assumed to be already identical to
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2011 the one between START and END.
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2012 If SYNTAX is provided it's a regexp that describes the possible text of
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2013 the clones; the clone will be shrunk or killed if necessary to ensure that
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2014 its text matches the regexp.
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2015 If SPREADP is non-nil it indicates that text inserted before/after the
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2016 clone should be incorporated in the clone."
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2017 ;; To deal with SPREADP we can either use an overlay with `nil t' along
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2018 ;; with insert-(behind|in-front-of)-hooks or use a slightly larger overlay
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2019 ;; (with a one-char margin at each end) with `t nil'.
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2020 ;; We opted for a larger overlay because it behaves better in the case
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2021 ;; where the clone is reduced to the empty string (we want the overlay to
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2022 ;; stay when the clone's content is the empty string and we want to use
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2023 ;; `evaporate' to make sure those overlays get deleted when needed).
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2024 ;;
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2025 (let* ((pt-end (+ (point) (- end start)))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2026 (start-margin (if (or (not spreadp) (bobp) (<= start (point-min)))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2027 0 1))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2028 (end-margin (if (or (not spreadp)
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2029 (>= pt-end (point-max))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2030 (>= start (point-max)))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2031 0 1))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2032 (ol1 (make-overlay (- start start-margin) (+ end end-margin) nil t))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2033 (ol2 (make-overlay (- (point) start-margin) (+ pt-end end-margin) nil t))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2034 (dups (list ol1 ol2)))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2035 (overlay-put ol1 'modification-hooks '(text-clone-maintain))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2036 (when spreadp (overlay-put ol1 'text-clone-spreadp t))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2037 (when syntax (overlay-put ol1 'text-clone-syntax syntax))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2038 ;;(overlay-put ol1 'face 'underline)
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2039 (overlay-put ol1 'evaporate t)
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2040 (overlay-put ol1 'text-clones dups)
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2041 ;;
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2042 (overlay-put ol2 'modification-hooks '(text-clone-maintain))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2043 (when spreadp (overlay-put ol2 'text-clone-spreadp t))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2044 (when syntax (overlay-put ol2 'text-clone-syntax syntax))
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2045 ;;(overlay-put ol2 'face 'underline)
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2046 (overlay-put ol2 'evaporate t)
7f05eff77ea2 (delay-mode-hooks, delayed-mode-hooks, run-mode-hooks): New vars and functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39725
diff changeset
2047 (overlay-put ol2 'text-clones dups)))
44668
52222efc9d4d (insert-for-yank): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44473
diff changeset
2048
44422
5f7f8b191a8c (play-sound): Move here from simple.el.
Pavel Janík <Pavel@Janik.cz>
parents: 44285
diff changeset
2049 (defun play-sound (sound)
5f7f8b191a8c (play-sound): Move here from simple.el.
Pavel Janík <Pavel@Janik.cz>
parents: 44285
diff changeset
2050 "SOUND is a list of the form `(sound KEYWORD VALUE...)'.
5f7f8b191a8c (play-sound): Move here from simple.el.
Pavel Janík <Pavel@Janik.cz>
parents: 44285
diff changeset
2051 The following keywords are recognized:
5f7f8b191a8c (play-sound): Move here from simple.el.
Pavel Janík <Pavel@Janik.cz>
parents: 44285
diff changeset
2052
5f7f8b191a8c (play-sound): Move here from simple.el.
Pavel Janík <Pavel@Janik.cz>
parents: 44285
diff changeset
2053 :file FILE - read sound data from FILE. If FILE isn't an
5f7f8b191a8c (play-sound): Move here from simple.el.
Pavel Janík <Pavel@Janik.cz>
parents: 44285
diff changeset
2054 absolute file name, it is searched in `data-directory'.
5f7f8b191a8c (play-sound): Move here from simple.el.
Pavel Janík <Pavel@Janik.cz>
parents: 44285
diff changeset
2055
5f7f8b191a8c (play-sound): Move here from simple.el.
Pavel Janík <Pavel@Janik.cz>
parents: 44285
diff changeset
2056 :data DATA - read sound data from string DATA.
5f7f8b191a8c (play-sound): Move here from simple.el.
Pavel Janík <Pavel@Janik.cz>
parents: 44285
diff changeset
2057
5f7f8b191a8c (play-sound): Move here from simple.el.
Pavel Janík <Pavel@Janik.cz>
parents: 44285
diff changeset
2058 Exactly one of :file or :data must be present.
5f7f8b191a8c (play-sound): Move here from simple.el.
Pavel Janík <Pavel@Janik.cz>
parents: 44285
diff changeset
2059
5f7f8b191a8c (play-sound): Move here from simple.el.
Pavel Janík <Pavel@Janik.cz>
parents: 44285
diff changeset
2060 :volume VOL - set volume to VOL. VOL must an integer in the
5f7f8b191a8c (play-sound): Move here from simple.el.
Pavel Janík <Pavel@Janik.cz>
parents: 44285
diff changeset
2061 range 0..100 or a float in the range 0..1.0. If not specified,
5f7f8b191a8c (play-sound): Move here from simple.el.
Pavel Janík <Pavel@Janik.cz>
parents: 44285
diff changeset
2062 don't change the volume setting of the sound device.
5f7f8b191a8c (play-sound): Move here from simple.el.
Pavel Janík <Pavel@Janik.cz>
parents: 44285
diff changeset
2063
5f7f8b191a8c (play-sound): Move here from simple.el.
Pavel Janík <Pavel@Janik.cz>
parents: 44285
diff changeset
2064 :device DEVICE - play sound on DEVICE. If not specified,
5f7f8b191a8c (play-sound): Move here from simple.el.
Pavel Janík <Pavel@Janik.cz>
parents: 44285
diff changeset
2065 a system-dependent default device name is used."
5f7f8b191a8c (play-sound): Move here from simple.el.
Pavel Janík <Pavel@Janik.cz>
parents: 44285
diff changeset
2066 (unless (fboundp 'play-sound-internal)
5f7f8b191a8c (play-sound): Move here from simple.el.
Pavel Janík <Pavel@Janik.cz>
parents: 44285
diff changeset
2067 (error "This Emacs binary lacks sound support"))
5f7f8b191a8c (play-sound): Move here from simple.el.
Pavel Janík <Pavel@Janik.cz>
parents: 44285
diff changeset
2068 (play-sound-internal sound))
5f7f8b191a8c (play-sound): Move here from simple.el.
Pavel Janík <Pavel@Janik.cz>
parents: 44285
diff changeset
2069
787
3cece0106722 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 779
diff changeset
2070 ;;; subr.el ends here