annotate lisp/subr.el @ 19860:c17fd465ea95 libc-970911 libc-970912 libc-970913 libc-970914 libc-970915 libc-970916 libc-970917 libc-970918 libc-970919 libc-970920 libc-970921 libc-970922 libc-970923 libc-970924 libc-970925 libc-970926 libc-970927 libc-970928 libc-970929 libc-970930 libc-971001 libc-971018 libc-971019 libc-971020 libc-971021 libc-971022 libc-971023 libc-971024 libc-971025 libc-971026 libc-971027 libc-971028 libc-971029 libc-971030 libc-971031 libc-971101 libc-971102 libc-971103 libc-971104 libc-971105 libc-971106 libc-971107 libc-971108 libc-971109 libc-971110 libc-971111 libc-971112 libc-971113 libc-971114 libc-971115 libc-971116 libc-971117 libc-971118 libc-971120 libc-971121 libc-971122 libc-971123 libc-971124 libc-971125 libc-971126 libc-971127 libc-971128 libc-971129 libc-971130 libc-971201 libc-971203 libc-971204 libc-971205 libc-971206 libc-971207 libc-971208 libc-971209 libc-971210 libc-971211 libc-971212 libc-971213 libc-971214 libc-971217 libc-971218 libc-971219 libc-971220 libc-971221 libc-971222 libc-971223 libc-971224 libc-971225 libc-971226 libc-971227 libc-971228 libc-971229 libc-971230 libc-971231 libc-980103 libc-980104 libc-980105 libc-980106 libc-980107 libc-980108 libc-980109 libc-980110 libc-980111 libc-980112 libc-980114 libc-980115 libc-980116 libc-980117 libc-980118 libc-980119 libc-980120 libc-980121 libc-980122 libc-980123 libc-980124 libc-980125 libc-980126 libc-980127 libc-980128

typos.
author Jeff Law <law@redhat.com>
date Wed, 10 Sep 1997 21:16:20 +0000
parents 791a40c16c0b
children af925352116e
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
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13936
diff changeset
3 ;; Copyright (C) 1985, 1986, 1992, 1994, 1995 Free Software Foundation, Inc.
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
4
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
5 ;; This file is part of GNU Emacs.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
6
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
7 ;; GNU Emacs is free software; you can redistribute it and/or modify
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
8 ;; 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
9 ;; the Free Software Foundation; either version 2, or (at your option)
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
10 ;; any later version.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
11
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
12 ;; GNU Emacs is distributed in the hope that it will be useful,
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
13 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
14 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
15 ;; GNU General Public License for more details.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
16
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
17 ;; 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
18 ;; 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
19 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13936
diff changeset
20 ;; Boston, MA 02111-1307, USA.
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
21
787
3cece0106722 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 779
diff changeset
22 ;;; Code:
18880
1ed40ed8e0c1 (custom-declare-variable-early): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18828
diff changeset
23 (defvar custom-declare-variable-list nil
1ed40ed8e0c1 (custom-declare-variable-early): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18828
diff changeset
24 "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
25 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
26
19662
791a40c16c0b Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 19584
diff changeset
27 ;; 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
28 ;; before custom.el.
1ed40ed8e0c1 (custom-declare-variable-early): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18828
diff changeset
29 (defun custom-declare-variable-early (&rest arguments)
1ed40ed8e0c1 (custom-declare-variable-early): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18828
diff changeset
30 (setq custom-declare-variable-list
1ed40ed8e0c1 (custom-declare-variable-early): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18828
diff changeset
31 (cons arguments custom-declare-variable-list)))
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
32
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
33 ;;;; Lisp language features.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
34
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
35 (defmacro lambda (&rest cdr)
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
36 "Return a lambda expression.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
37 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
38 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
39 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
40 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
41 funcall or mapcar, etc.
be0081d9ba76 (lambda): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 10025
diff changeset
42
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
43 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
44 DOCSTRING is an optional documentation string.
71727759437e (lambda): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12296
diff changeset
45 If present, it should describe how to call the function.
71727759437e (lambda): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12296
diff changeset
46 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
47 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
48 It may also be omitted.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
49 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
50 ;; 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
51 ;; depend on backquote.el.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
52 (list 'function (cons 'lambda cdr)))
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
53
16845
adc714dc8e3c (when, unless): Definitions moved from cl.el.
Richard M. Stallman <rms@gnu.org>
parents: 16556
diff changeset
54 (defmacro when (cond &rest body)
adc714dc8e3c (when, unless): Definitions moved from cl.el.
Richard M. Stallman <rms@gnu.org>
parents: 16556
diff changeset
55 "(when COND BODY...): if COND yields non-nil, do BODY, else return nil."
adc714dc8e3c (when, unless): Definitions moved from cl.el.
Richard M. Stallman <rms@gnu.org>
parents: 16556
diff changeset
56 (list 'if cond (cons 'progn body)))
17158
f181580c182c (when, unless): Symbol props moved from cl.el.
Karl Heuer <kwzh@gnu.org>
parents: 17152
diff changeset
57 (put 'when 'lisp-indent-function 1)
f181580c182c (when, unless): Symbol props moved from cl.el.
Karl Heuer <kwzh@gnu.org>
parents: 17152
diff changeset
58 (put 'when 'edebug-form-spec '(&rest form))
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
59
16845
adc714dc8e3c (when, unless): Definitions moved from cl.el.
Richard M. Stallman <rms@gnu.org>
parents: 16556
diff changeset
60 (defmacro unless (cond &rest body)
adc714dc8e3c (when, unless): Definitions moved from cl.el.
Richard M. Stallman <rms@gnu.org>
parents: 16556
diff changeset
61 "(unless COND BODY...): if COND yields nil, do BODY, else return nil."
adc714dc8e3c (when, unless): Definitions moved from cl.el.
Richard M. Stallman <rms@gnu.org>
parents: 16556
diff changeset
62 (cons 'if (cons cond (cons nil body))))
17158
f181580c182c (when, unless): Symbol props moved from cl.el.
Karl Heuer <kwzh@gnu.org>
parents: 17152
diff changeset
63 (put 'unless 'lisp-indent-function 1)
f181580c182c (when, unless): Symbol props moved from cl.el.
Karl Heuer <kwzh@gnu.org>
parents: 17152
diff changeset
64 (put 'unless 'edebug-form-spec '(&rest form))
19491
f5fd22f3462c (caar, cadr, cdar, cddr): Definitions moved here and changed into defsubsts.
Richard M. Stallman <rms@gnu.org>
parents: 19176
diff changeset
65
f5fd22f3462c (caar, cadr, cdar, cddr): Definitions moved here and changed into defsubsts.
Richard M. Stallman <rms@gnu.org>
parents: 19176
diff changeset
66 (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
67 "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
68 (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
69
f5fd22f3462c (caar, cadr, cdar, cddr): Definitions moved here and changed into defsubsts.
Richard M. Stallman <rms@gnu.org>
parents: 19176
diff changeset
70 (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
71 "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
72 (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
73
f5fd22f3462c (caar, cadr, cdar, cddr): Definitions moved here and changed into defsubsts.
Richard M. Stallman <rms@gnu.org>
parents: 19176
diff changeset
74 (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
75 "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
76 (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
77
f5fd22f3462c (caar, cadr, cdar, cddr): Definitions moved here and changed into defsubsts.
Richard M. Stallman <rms@gnu.org>
parents: 19176
diff changeset
78 (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
79 "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
80 (cdr (cdr x)))
19492
892a09772457 (last): New function.
Richard M. Stallman <rms@gnu.org>
parents: 19491
diff changeset
81
19584
17db1ee36bbb (last): Accept optional second argument.
Richard M. Stallman <rms@gnu.org>
parents: 19492
diff changeset
82 (defun last (x &optional n)
17db1ee36bbb (last): Accept optional second argument.
Richard M. Stallman <rms@gnu.org>
parents: 19492
diff changeset
83 "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
84 If X is nil, return nil.
17db1ee36bbb (last): Accept optional second argument.
Richard M. Stallman <rms@gnu.org>
parents: 19492
diff changeset
85 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
86 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
87 (if n
17db1ee36bbb (last): Accept optional second argument.
Richard M. Stallman <rms@gnu.org>
parents: 19492
diff changeset
88 (let ((m 0) (p x))
17db1ee36bbb (last): Accept optional second argument.
Richard M. Stallman <rms@gnu.org>
parents: 19492
diff changeset
89 (while (consp p)
17db1ee36bbb (last): Accept optional second argument.
Richard M. Stallman <rms@gnu.org>
parents: 19492
diff changeset
90 (setq m (1+ m) p (cdr p)))
17db1ee36bbb (last): Accept optional second argument.
Richard M. Stallman <rms@gnu.org>
parents: 19492
diff changeset
91 (if (<= n 0) p
17db1ee36bbb (last): Accept optional second argument.
Richard M. Stallman <rms@gnu.org>
parents: 19492
diff changeset
92 (if (< n m) (nthcdr (- m n) x) x)))
17db1ee36bbb (last): Accept optional second argument.
Richard M. Stallman <rms@gnu.org>
parents: 19492
diff changeset
93 (while (cdr x)
17db1ee36bbb (last): Accept optional second argument.
Richard M. Stallman <rms@gnu.org>
parents: 19492
diff changeset
94 (setq x (cdr x)))
17db1ee36bbb (last): Accept optional second argument.
Richard M. Stallman <rms@gnu.org>
parents: 19492
diff changeset
95 x))
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
96
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
97 ;;;; Keymap support.
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
98
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
99 (defun undefined ()
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
100 (interactive)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
101 (ding))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
102
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
103 ;Prevent the \{...} documentation construct
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
104 ;from mentioning keys that run this command.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
105 (put 'undefined 'suppress-keymap t)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
106
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
107 (defun suppress-keymap (map &optional nodigits)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
108 "Make MAP override all normally self-inserting keys to be undefined.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
109 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
110 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
111 (substitute-key-definition 'self-insert-command 'undefined map global-map)
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
112 (or nodigits
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
113 (let (loop)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
114 (define-key map "-" 'negative-argument)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
115 ;; Make plain numbers do numeric args.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
116 (setq loop ?0)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
117 (while (<= loop ?9)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
118 (define-key map (char-to-string loop) 'digit-argument)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
119 (setq loop (1+ loop))))))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
120
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
121 ;Moved to keymap.c
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
122 ;(defun copy-keymap (keymap)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
123 ; "Return a copy of KEYMAP"
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
124 ; (while (not (keymapp keymap))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
125 ; (setq keymap (signal 'wrong-type-argument (list 'keymapp keymap))))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
126 ; (if (vectorp keymap)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
127 ; (copy-sequence keymap)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
128 ; (copy-alist keymap)))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
129
6167
1ad8f8ccdc2b (substitute-key-definition): Avoid infinite recursion.
Karl Heuer <kwzh@gnu.org>
parents: 6039
diff changeset
130 (defvar key-substitution-in-progress nil
1ad8f8ccdc2b (substitute-key-definition): Avoid infinite recursion.
Karl Heuer <kwzh@gnu.org>
parents: 6039
diff changeset
131 "Used internally by substitute-key-definition.")
1ad8f8ccdc2b (substitute-key-definition): Avoid infinite recursion.
Karl Heuer <kwzh@gnu.org>
parents: 6039
diff changeset
132
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
133 (defun substitute-key-definition (olddef newdef keymap &optional oldmap prefix)
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
134 "Replace OLDDEF with NEWDEF for any keys in KEYMAP now defined as OLDDEF.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
135 In other words, OLDDEF is replaced with NEWDEF where ever it appears.
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
136 If optional fourth argument OLDMAP is specified, we redefine
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
137 in KEYMAP as NEWDEF those chars which are defined as OLDDEF in OLDMAP."
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
138 (or prefix (setq prefix ""))
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
139 (let* ((scan (or oldmap keymap))
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
140 (vec1 (vector nil))
6167
1ad8f8ccdc2b (substitute-key-definition): Avoid infinite recursion.
Karl Heuer <kwzh@gnu.org>
parents: 6039
diff changeset
141 (prefix1 (vconcat prefix vec1))
1ad8f8ccdc2b (substitute-key-definition): Avoid infinite recursion.
Karl Heuer <kwzh@gnu.org>
parents: 6039
diff changeset
142 (key-substitution-in-progress
1ad8f8ccdc2b (substitute-key-definition): Avoid infinite recursion.
Karl Heuer <kwzh@gnu.org>
parents: 6039
diff changeset
143 (cons scan key-substitution-in-progress)))
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
144 ;; Scan OLDMAP, finding each char or event-symbol that
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
145 ;; has any definition, and act on it with hack-key.
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
146 (while (consp scan)
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
147 (if (consp (car scan))
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
148 (let ((char (car (car scan)))
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
149 (defn (cdr (car scan))))
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
150 ;; The inside of this let duplicates exactly
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
151 ;; the inside of the following let that handles array elements.
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
152 (aset vec1 0 char)
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
153 (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
154 (let (inner-def skipped)
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
155 ;; Skip past menu-prompt.
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
156 (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
157 (setq skipped (cons (car defn) skipped))
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
158 (setq defn (cdr defn)))
7615
49176059d040 (substitute-key-definition): Skip cached menu key-equivs.
Richard M. Stallman <rms@gnu.org>
parents: 7548
diff changeset
159 ;; 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
160 (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
161 (setq defn (cdr defn)))
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
162 (setq inner-def defn)
7615
49176059d040 (substitute-key-definition): Skip cached menu key-equivs.
Richard M. Stallman <rms@gnu.org>
parents: 7548
diff changeset
163 ;; Look past a symbol that names a keymap.
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
164 (while (and (symbolp inner-def)
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
165 (fboundp inner-def))
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
166 (setq inner-def (symbol-function inner-def)))
17215
21e3f467224e (substitute-key-definition):
Richard M. Stallman <rms@gnu.org>
parents: 17158
diff changeset
167 (if (or (eq defn olddef)
21e3f467224e (substitute-key-definition):
Richard M. Stallman <rms@gnu.org>
parents: 17158
diff changeset
168 ;; Compare with equal if definition is a key sequence.
21e3f467224e (substitute-key-definition):
Richard M. Stallman <rms@gnu.org>
parents: 17158
diff changeset
169 ;; That is useful for operating on function-key-map.
21e3f467224e (substitute-key-definition):
Richard M. Stallman <rms@gnu.org>
parents: 17158
diff changeset
170 (and (or (stringp defn) (vectorp defn))
21e3f467224e (substitute-key-definition):
Richard M. Stallman <rms@gnu.org>
parents: 17158
diff changeset
171 (equal defn olddef)))
6005
bf1c9fd5669b (substitute-key-definition): Don't discard menu strings.
Richard M. Stallman <rms@gnu.org>
parents: 5912
diff changeset
172 (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
173 (if (and (keymapp defn)
9986
df605fcd1e75 (substitute-key-definition): Don't recursively scan
Richard M. Stallman <rms@gnu.org>
parents: 9822
diff changeset
174 ;; Avoid recursively scanning
df605fcd1e75 (substitute-key-definition): Don't recursively scan
Richard M. Stallman <rms@gnu.org>
parents: 9822
diff changeset
175 ;; 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
176 (let ((elt (lookup-key keymap prefix1)))
04ffbdd37d2d (substitute-key-definition): Do recursively scan
Richard M. Stallman <rms@gnu.org>
parents: 12730
diff changeset
177 (or (null elt)
04ffbdd37d2d (substitute-key-definition): Do recursively scan
Richard M. Stallman <rms@gnu.org>
parents: 12730
diff changeset
178 (keymapp elt)))
9986
df605fcd1e75 (substitute-key-definition): Don't recursively scan
Richard M. Stallman <rms@gnu.org>
parents: 9822
diff changeset
179 ;; Avoid recursively rescanning keymap being scanned.
6167
1ad8f8ccdc2b (substitute-key-definition): Avoid infinite recursion.
Karl Heuer <kwzh@gnu.org>
parents: 6039
diff changeset
180 (not (memq inner-def
1ad8f8ccdc2b (substitute-key-definition): Avoid infinite recursion.
Karl Heuer <kwzh@gnu.org>
parents: 6039
diff changeset
181 key-substitution-in-progress)))
7615
49176059d040 (substitute-key-definition): Skip cached menu key-equivs.
Richard M. Stallman <rms@gnu.org>
parents: 7548
diff changeset
182 ;; 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
183 ;; scan it now.
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
184 (substitute-key-definition olddef newdef keymap
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
185 inner-def
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
186 prefix1)))))
18044
3e4924d01221 (substitute-key-definition): Check vectorp, not arrayp.
Richard M. Stallman <rms@gnu.org>
parents: 17943
diff changeset
187 (if (vectorp (car scan))
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
188 (let* ((array (car scan))
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
189 (len (length array))
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
190 (i 0))
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
191 (while (< i len)
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
192 (let ((char i) (defn (aref array i)))
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
193 ;; The inside of this let duplicates exactly
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
194 ;; the inside of the previous let.
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
195 (aset vec1 0 char)
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
196 (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
197 (let (inner-def skipped)
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
198 ;; Skip past menu-prompt.
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
199 (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
200 (setq skipped (cons (car defn) skipped))
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
201 (setq defn (cdr defn)))
7615
49176059d040 (substitute-key-definition): Skip cached menu key-equivs.
Richard M. Stallman <rms@gnu.org>
parents: 7548
diff changeset
202 (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
203 (setq defn (cdr defn)))
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
204 (setq inner-def defn)
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
205 (while (and (symbolp inner-def)
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
206 (fboundp inner-def))
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
207 (setq inner-def (symbol-function inner-def)))
17215
21e3f467224e (substitute-key-definition):
Richard M. Stallman <rms@gnu.org>
parents: 17158
diff changeset
208 (if (or (eq defn olddef)
21e3f467224e (substitute-key-definition):
Richard M. Stallman <rms@gnu.org>
parents: 17158
diff changeset
209 (and (or (stringp defn) (vectorp defn))
21e3f467224e (substitute-key-definition):
Richard M. Stallman <rms@gnu.org>
parents: 17158
diff changeset
210 (equal defn olddef)))
6005
bf1c9fd5669b (substitute-key-definition): Don't discard menu strings.
Richard M. Stallman <rms@gnu.org>
parents: 5912
diff changeset
211 (define-key keymap prefix1
bf1c9fd5669b (substitute-key-definition): Don't discard menu strings.
Richard M. Stallman <rms@gnu.org>
parents: 5912
diff changeset
212 (nconc (nreverse skipped) newdef))
6167
1ad8f8ccdc2b (substitute-key-definition): Avoid infinite recursion.
Karl Heuer <kwzh@gnu.org>
parents: 6039
diff changeset
213 (if (and (keymapp defn)
13039
04ffbdd37d2d (substitute-key-definition): Do recursively scan
Richard M. Stallman <rms@gnu.org>
parents: 12730
diff changeset
214 (let ((elt (lookup-key keymap prefix1)))
04ffbdd37d2d (substitute-key-definition): Do recursively scan
Richard M. Stallman <rms@gnu.org>
parents: 12730
diff changeset
215 (or (null elt)
04ffbdd37d2d (substitute-key-definition): Do recursively scan
Richard M. Stallman <rms@gnu.org>
parents: 12730
diff changeset
216 (keymapp elt)))
6167
1ad8f8ccdc2b (substitute-key-definition): Avoid infinite recursion.
Karl Heuer <kwzh@gnu.org>
parents: 6039
diff changeset
217 (not (memq inner-def
1ad8f8ccdc2b (substitute-key-definition): Avoid infinite recursion.
Karl Heuer <kwzh@gnu.org>
parents: 6039
diff changeset
218 key-substitution-in-progress)))
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
219 (substitute-key-definition olddef newdef keymap
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
220 inner-def
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
221 prefix1)))))
17922
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
222 (setq i (1+ i))))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
223 (if (char-table-p (car scan))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
224 (map-char-table
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
225 (function (lambda (char defn)
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
226 (let ()
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
227 ;; The inside of this let duplicates exactly
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
228 ;; the inside of the previous let,
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
229 ;; except that it uses set-char-table-range
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
230 ;; instead of define-key.
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
231 (aset vec1 0 char)
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
232 (aset prefix1 (length prefix) char)
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
233 (let (inner-def skipped)
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
234 ;; Skip past menu-prompt.
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
235 (while (stringp (car-safe defn))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
236 (setq skipped (cons (car defn) skipped))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
237 (setq defn (cdr defn)))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
238 (and (consp defn) (consp (car defn))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
239 (setq defn (cdr defn)))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
240 (setq inner-def defn)
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
241 (while (and (symbolp inner-def)
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
242 (fboundp inner-def))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
243 (setq inner-def (symbol-function inner-def)))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
244 (if (or (eq defn olddef)
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
245 (and (or (stringp defn) (vectorp defn))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
246 (equal defn olddef)))
17943
15dc805eadee (substitute-key-definition): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17922
diff changeset
247 (define-key keymap prefix1
15dc805eadee (substitute-key-definition): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17922
diff changeset
248 (nconc (nreverse skipped) newdef))
17922
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
249 (if (and (keymapp defn)
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
250 (let ((elt (lookup-key keymap prefix1)))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
251 (or (null elt)
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
252 (keymapp elt)))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
253 (not (memq inner-def
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
254 key-substitution-in-progress)))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
255 (substitute-key-definition olddef newdef keymap
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
256 inner-def
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
257 prefix1)))))))
29d58e05d603 (substitute-key-definition): Handle chartables.
Richard M. Stallman <rms@gnu.org>
parents: 17707
diff changeset
258 (car scan)))))
1176
60e0dc538df3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1166
diff changeset
259 (setq scan (cdr scan)))))
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
260
3902
717f2e24975e (define-key-after): Renamed from define-key-in-sequence.
Richard M. Stallman <rms@gnu.org>
parents: 3901
diff changeset
261 (defun define-key-after (keymap key definition after)
3901
c78753b7eea8 (define-key-in-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3860
diff changeset
262 "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
263 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
264 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
265 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
266 \(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
267
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
268 If AFTER is t, the new binding goes at the end of the keymap.
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
269
6725
e044bd05a1da (define-key-after): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 6553
diff changeset
270 KEY must contain just one event type--that is to say, it must be
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
271 a string or vector of length 1.
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
272
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
273 The order of bindings in a keymap matters when it is used as a menu."
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
274
3901
c78753b7eea8 (define-key-in-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3860
diff changeset
275 (or (keymapp keymap)
c78753b7eea8 (define-key-in-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3860
diff changeset
276 (signal 'wrong-type-argument (list 'keymapp keymap)))
4188
10fd517cb2e9 (define-key-after): Fix typo in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 4070
diff changeset
277 (if (> (length key) 1)
4070
5a97f81baf65 (define-key-after): Error if KEY has two elements.
Richard M. Stallman <rms@gnu.org>
parents: 3991
diff changeset
278 (error "multi-event key specified in `define-key-after'"))
3927
1f1fefc400ed (define-key-after): Delete duplicate bindings that come
Richard M. Stallman <rms@gnu.org>
parents: 3902
diff changeset
279 (let ((tail keymap) done inserted
3901
c78753b7eea8 (define-key-in-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3860
diff changeset
280 (first (aref key 0)))
c78753b7eea8 (define-key-in-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3860
diff changeset
281 (while (and (not done) tail)
c78753b7eea8 (define-key-in-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3860
diff changeset
282 ;; Delete any earlier bindings for the same key.
c78753b7eea8 (define-key-in-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3860
diff changeset
283 (if (eq (car-safe (car (cdr tail))) first)
c78753b7eea8 (define-key-in-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3860
diff changeset
284 (setcdr tail (cdr (cdr tail))))
c78753b7eea8 (define-key-in-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3860
diff changeset
285 ;; 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
286 ;; 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
287 ;; 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
288 (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
289 (not (eq after t)))
3927
1f1fefc400ed (define-key-after): Delete duplicate bindings that come
Richard M. Stallman <rms@gnu.org>
parents: 3902
diff changeset
290 (eq (car (cdr tail)) 'keymap)
1f1fefc400ed (define-key-after): Delete duplicate bindings that come
Richard M. Stallman <rms@gnu.org>
parents: 3902
diff changeset
291 (null (cdr tail)))
3901
c78753b7eea8 (define-key-in-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3860
diff changeset
292 (progn
3927
1f1fefc400ed (define-key-after): Delete duplicate bindings that come
Richard M. Stallman <rms@gnu.org>
parents: 3902
diff changeset
293 ;; 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
294 ;; 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
295 ;; 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
296 (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
297 (setq done t))
1f1fefc400ed (define-key-after): Delete duplicate bindings that come
Richard M. Stallman <rms@gnu.org>
parents: 3902
diff changeset
298 ;; 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
299 (or inserted
1f1fefc400ed (define-key-after): Delete duplicate bindings that come
Richard M. Stallman <rms@gnu.org>
parents: 3902
diff changeset
300 (setcdr tail (cons (cons (aref key 0) definition) (cdr tail))))
1f1fefc400ed (define-key-after): Delete duplicate bindings that come
Richard M. Stallman <rms@gnu.org>
parents: 3902
diff changeset
301 (setq inserted t)))
3901
c78753b7eea8 (define-key-in-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3860
diff changeset
302 (setq tail (cdr tail)))))
c78753b7eea8 (define-key-in-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3860
diff changeset
303
17437
d7f9b21fdfd2 (kbd): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 17418
diff changeset
304 (defmacro kbd (keys)
d7f9b21fdfd2 (kbd): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 17418
diff changeset
305 "Convert KEYS to the internal Emacs key representation.
d7f9b21fdfd2 (kbd): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 17418
diff changeset
306 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
307 saving keyboard macros (see `insert-kbd-macro')."
d7f9b21fdfd2 (kbd): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 17418
diff changeset
308 (read-kbd-macro keys))
d7f9b21fdfd2 (kbd): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 17418
diff changeset
309
15894
efd2835a7c96 (keyboard-translate): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents: 15599
diff changeset
310 (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
311
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
312 (defun keyboard-translate (from to)
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
313 "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
314 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
315 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
316 (or (char-table-p keyboard-translate-table)
efd2835a7c96 (keyboard-translate): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents: 15599
diff changeset
317 (setq keyboard-translate-table
efd2835a7c96 (keyboard-translate): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents: 15599
diff changeset
318 (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
319 (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
320
2071
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
321
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
322 ;;;; The global keymap tree.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
323
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
324 ;;; 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
325 ;;; 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
326
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
327 (defvar global-map nil
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
328 "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
329 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
330 global map.")
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
331
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
332 (defvar esc-map nil
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
333 "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
334 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
335
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
336 (defvar ctl-x-map nil
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
337 "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
338 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
339
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
340 (defvar ctl-x-4-map (make-sparse-keymap)
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
341 "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
342 (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
343 (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
344
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
345 (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
346 "Keymap for frame commands.")
2569
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
347 (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
348 (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
349
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
350
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
351 ;;;; Event manipulation functions.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
352
10693
0875851842f0 (listify-key-sequence-1, event-modifiers): Don't presume internal bit layout
Karl Heuer <kwzh@gnu.org>
parents: 10681
diff changeset
353 ;; 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
354 ;; 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
355 ;; 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
356 (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
357
2021
8b9286bffef8 (listify-key-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1959
diff changeset
358 (defun listify-key-sequence (key)
8b9286bffef8 (listify-key-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1959
diff changeset
359 "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
360 (if (vectorp key)
8b9286bffef8 (listify-key-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1959
diff changeset
361 (append key nil)
8b9286bffef8 (listify-key-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1959
diff changeset
362 (mapcar (function (lambda (c)
8b9286bffef8 (listify-key-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1959
diff changeset
363 (if (> c 127)
3153
4c94c9faf1af (listify-key-sequence): Avoid the constant ?\M-\200.
Richard M. Stallman <rms@gnu.org>
parents: 2963
diff changeset
364 (logxor c listify-key-sequence-1)
2021
8b9286bffef8 (listify-key-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1959
diff changeset
365 c)))
8b9286bffef8 (listify-key-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1959
diff changeset
366 (append key nil))))
8b9286bffef8 (listify-key-sequence): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1959
diff changeset
367
2040
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
368 (defsubst eventp (obj)
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
369 "True if the argument is an event object."
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
370 (or (integerp obj)
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
371 (and (symbolp obj)
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
372 (get obj 'event-symbol-elements))
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
373 (and (consp obj)
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
374 (symbolp (car obj))
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
375 (get (car obj) 'event-symbol-elements))))
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
376
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
377 (defun event-modifiers (event)
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
378 "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
379 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
380 `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
381 and `down'."
2040
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
382 (let ((type event))
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
383 (if (listp type)
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
384 (setq type (car type)))
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
385 (if (symbolp type)
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
386 (cdr (get type 'event-symbol-elements))
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
387 (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
388 (or (zerop (logand type ?\M-\^@))
2040
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
389 (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
390 (or (and (zerop (logand type ?\C-\^@))
2040
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
391 (>= (logand type 127) 32))
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
392 (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
393 (or (and (zerop (logand type ?\S-\^@))
2040
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
394 (= (logand type 255) (downcase (logand type 255))))
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
395 (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
396 (or (zerop (logand type ?\H-\^@))
2040
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
397 (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
398 (or (zerop (logand type ?\s-\^@))
2040
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
399 (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
400 (or (zerop (logand type ?\A-\^@))
2040
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
401 (setq list (cons 'alt list)))
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
402 list))))
aa926beb4caa (event-modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2033
diff changeset
403
2063
2f0555b428c4 (event-basic-type): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2040
diff changeset
404 (defun event-basic-type (event)
2f0555b428c4 (event-basic-type): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2040
diff changeset
405 "Returns the basic type of the given event (all modifiers removed).
2f0555b428c4 (event-basic-type): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2040
diff changeset
406 The value is an ASCII 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
407 (if (consp event)
d2df5ca46b39 * subr.el (event-basic-type): Deal with listy events properly.
Jim Blandy <jimb@redhat.com>
parents: 3591
diff changeset
408 (setq event (car event)))
2063
2f0555b428c4 (event-basic-type): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2040
diff changeset
409 (if (symbolp event)
2f0555b428c4 (event-basic-type): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2040
diff changeset
410 (car (get event 'event-symbol-elements))
2f0555b428c4 (event-basic-type): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2040
diff changeset
411 (let ((base (logand event (1- (lsh 1 18)))))
2f0555b428c4 (event-basic-type): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2040
diff changeset
412 (downcase (if (< base 32) (logior base 64) base)))))
2f0555b428c4 (event-basic-type): New function.
Richard M. Stallman <rms@gnu.org>
parents: 2040
diff changeset
413
2071
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
414 (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
415 "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
416 (and (consp object)
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
417 (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
418
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
419 (defsubst event-start (event)
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
420 "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
421 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
422 of the event.
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
423 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
424 The return value is of the form
6039
4eb7f4633370 (posn-x-y): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6005
diff changeset
425 (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
426 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
427 (nth 1 event))
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
428
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
429 (defsubst event-end (event)
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
430 "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
431 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
432 The return value is of the form
6039
4eb7f4633370 (posn-x-y): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6005
diff changeset
433 (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
434 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
435 (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
436
4414
3356419b94c1 (add-hook): Change a single function into a list.
Richard M. Stallman <rms@gnu.org>
parents: 4235
diff changeset
437 (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
438 "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
439 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
440 (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
441
2071
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
442 (defsubst posn-window (position)
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
443 "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
444 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
445 (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
446 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
447 (nth 0 position))
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
448
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
449 (defsubst posn-point (position)
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
450 "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
451 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
452 (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
453 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
454 (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
455 (car (nth 1 position))
ad2bd545983e * subr.el (posn-point): Properly extract the BUFFER-POSITION field
Jim Blandy <jimb@redhat.com>
parents: 3927
diff changeset
456 (nth 1 position)))
2071
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
457
6039
4eb7f4633370 (posn-x-y): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6005
diff changeset
458 (defsubst posn-x-y (position)
4eb7f4633370 (posn-x-y): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6005
diff changeset
459 "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
460 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
461 (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
462 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
463 (nth 2 position))
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
464
7636
83dba60657ef (posn-col-row): Do something useful for scroll bar event.
Richard M. Stallman <rms@gnu.org>
parents: 7615
diff changeset
465 (defun posn-col-row (position)
7693
5fcf0620b8d3 (posn-col-row): Test for consp, not symbolp.
Karl Heuer <kwzh@gnu.org>
parents: 7640
diff changeset
466 "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
467 POSITION should be a list of the form
4eb7f4633370 (posn-x-y): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6005
diff changeset
468 (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
469 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
470 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
471 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
472 (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
473 (window (posn-window position)))
7693
5fcf0620b8d3 (posn-col-row): Test for consp, not symbolp.
Karl Heuer <kwzh@gnu.org>
parents: 7640
diff changeset
474 (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
475 (car (nth 1 position))
5fcf0620b8d3 (posn-col-row): Test for consp, not symbolp.
Karl Heuer <kwzh@gnu.org>
parents: 7640
diff changeset
476 (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
477 'vertical-scroll-bar)
83dba60657ef (posn-col-row): Do something useful for scroll bar event.
Richard M. Stallman <rms@gnu.org>
parents: 7615
diff changeset
478 (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
479 (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
480 (car (nth 1 position))
5fcf0620b8d3 (posn-col-row): Test for consp, not symbolp.
Karl Heuer <kwzh@gnu.org>
parents: 7640
diff changeset
481 (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
482 'horizontal-scroll-bar)
83dba60657ef (posn-col-row): Do something useful for scroll bar event.
Richard M. Stallman <rms@gnu.org>
parents: 7615
diff changeset
483 (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
484 (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
485 (x (/ (car pair) (frame-char-width frame)))
9b1194796ef5 (posn-col-row): Use let*.
Richard M. Stallman <rms@gnu.org>
parents: 7636
diff changeset
486 (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
487 (cons x y))))))
6039
4eb7f4633370 (posn-x-y): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6005
diff changeset
488
2071
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
489 (defsubst posn-timestamp (position)
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
490 "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
491 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
492 (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
3411
d91b3097bb76 (posn-timestamp): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 3210
diff changeset
493 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
494 (nth 3 position))
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
495
2071
8f410f56d98f (posn-timestamp, posn-col-row, posn-point, posn-window):
Richard M. Stallman <rms@gnu.org>
parents: 2063
diff changeset
496
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
497 ;;;; Obsolescent names for functions.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
498
2569
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
499 (defalias 'dot 'point)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
500 (defalias 'dot-marker 'point-marker)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
501 (defalias 'dot-min 'point-min)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
502 (defalias 'dot-max 'point-max)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
503 (defalias 'window-dot 'window-point)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
504 (defalias 'set-window-dot 'set-window-point)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
505 (defalias 'read-input 'read-string)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
506 (defalias 'send-string 'process-send-string)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
507 (defalias 'send-region 'process-send-region)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
508 (defalias 'show-buffer 'set-window-buffer)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
509 (defalias 'buffer-flush-undo 'buffer-disable-undo)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
510 (defalias 'eval-current-buffer 'eval-buffer)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
511 (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
512 (defalias 'define-function 'defalias)
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
513
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
514 ;; 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
515 (defun baud-rate ()
3210
3176c6395ada (baud-rate): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 3153
diff changeset
516 "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
517 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
518 baud-rate)
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
519
15599
7d3af2dcd864 (unfocus-frame, focus-frame): Define as no-ops.
Miles Bader <miles@gnu.org>
parents: 14707
diff changeset
520 (defalias 'focus-frame 'ignore)
7d3af2dcd864 (unfocus-frame, focus-frame): Define as no-ops.
Miles Bader <miles@gnu.org>
parents: 14707
diff changeset
521 (defalias 'unfocus-frame 'ignore)
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
522
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
523 ;;;; 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
524
2569
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
525 (defalias 'string= 'string-equal)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
526 (defalias 'string< 'string-lessp)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
527 (defalias 'move-marker 'set-marker)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
528 (defalias 'not 'null)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
529 (defalias 'rplaca 'setcar)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
530 (defalias 'rplacd 'setcdr)
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3411
diff changeset
531 (defalias 'beep 'ding) ;preserve lingual purity
2569
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
532 (defalias 'indent-to-column 'indent-to)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
533 (defalias 'backward-delete-char 'delete-backward-char)
39ad4eda7fea All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2504
diff changeset
534 (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
535 (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
536 (defalias 'int-to-string 'number-to-string)
6551
99ca8123a3ca (set-match-data): New alias.
Richard M. Stallman <rms@gnu.org>
parents: 6441
diff changeset
537 (defalias 'set-match-data 'store-match-data)
1903
87f63305319f * subr.el (string-to-int): Make this an alias for
Jim Blandy <jimb@redhat.com>
parents: 1867
diff changeset
538
87f63305319f * subr.el (string-to-int): Make this an alias for
Jim Blandy <jimb@redhat.com>
parents: 1867
diff changeset
539 ;;; 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
540 ;;; 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
541 (defalias 'string-to-int 'string-to-number)
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
542
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
543 ;;;; Hook manipulation functions.
388
498bcec1cf3a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 384
diff changeset
544
9195
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
545 (defun make-local-hook (hook)
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
546 "Make the hook HOOK local to the current buffer.
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
547 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
548 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
549 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
550 of the hook variable.
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
551
12258
95ebca0a74d8 (make-local-hook): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12108
diff changeset
552 This function works by making `t' a member of the buffer-local value,
95ebca0a74d8 (make-local-hook): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12108
diff changeset
553 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
554 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
555 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
556 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
557 one.
95ebca0a74d8 (make-local-hook): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12108
diff changeset
558
95ebca0a74d8 (make-local-hook): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12108
diff changeset
559 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
560 buffer.
9195
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
561
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
562 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
563 (if (local-variable-p hook)
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
564 nil
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
565 (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
566 (make-local-variable hook)
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
567 (set hook (list t))))
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
568
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
569 (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
570 "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
571 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
572 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
573 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
574 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
575
9195
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
576 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
577 the hook's buffer-local value rather than its default value.
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
578 This makes no difference if the hook is not buffer-local.
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
579 To make a hook variable buffer-local, always use
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
580 `make-local-hook', not `make-local-variable'.
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
581
4414
3356419b94c1 (add-hook): Change a single function into a list.
Richard M. Stallman <rms@gnu.org>
parents: 4235
diff changeset
582 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
583 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
584 function, it is changed to a list of functions."
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
585 (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
586 (or (default-boundp hook) (set-default hook nil))
4414
3356419b94c1 (add-hook): Change a single function into a list.
Richard M. Stallman <rms@gnu.org>
parents: 4235
diff changeset
587 ;; If the hook value is a single function, turn it into a list.
3356419b94c1 (add-hook): Change a single function into a list.
Richard M. Stallman <rms@gnu.org>
parents: 4235
diff changeset
588 (let ((old (symbol-value hook)))
3356419b94c1 (add-hook): Change a single function into a list.
Richard M. Stallman <rms@gnu.org>
parents: 4235
diff changeset
589 (if (or (not (listp old)) (eq (car old) 'lambda))
3356419b94c1 (add-hook): Change a single function into a list.
Richard M. Stallman <rms@gnu.org>
parents: 4235
diff changeset
590 (set hook (list old))))
9202
92d6de82426a (add-hook, remove-hook): If the hook was made local
Richard M. Stallman <rms@gnu.org>
parents: 9195
diff changeset
591 (if (or local
92d6de82426a (add-hook, remove-hook): If the hook was made local
Richard M. Stallman <rms@gnu.org>
parents: 9195
diff changeset
592 ;; Detect the case where make-local-variable was used on a hook
92d6de82426a (add-hook, remove-hook): If the hook was made local
Richard M. Stallman <rms@gnu.org>
parents: 9195
diff changeset
593 ;; and do what we used to do.
12296
005a5b596618 (add-hook): Use local local-variable-if-set-p.
Richard M. Stallman <rms@gnu.org>
parents: 12258
diff changeset
594 (and (local-variable-if-set-p hook)
9202
92d6de82426a (add-hook, remove-hook): If the hook was made local
Richard M. Stallman <rms@gnu.org>
parents: 9195
diff changeset
595 (not (memq t (symbol-value hook)))))
9195
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
596 ;; Alter the local value only.
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
597 (or (if (consp function)
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
598 (member function (symbol-value hook))
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
599 (memq function (symbol-value hook)))
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
600 (set hook
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
601 (if append
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
602 (append (symbol-value hook) (list function))
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
603 (cons function (symbol-value hook)))))
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
604 ;; Alter the global value (which is also the only value,
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
605 ;; if the hook doesn't have a local value).
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
606 (or (if (consp function)
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
607 (member function (default-value hook))
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
608 (memq function (default-value hook)))
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
609 (set-default hook
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
610 (if append
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
611 (append (default-value hook) (list function))
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
612 (cons function (default-value hook)))))))
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
613
9195
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
614 (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
615 "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
616 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
617 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
618 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
619
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
620 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
621 the hook's buffer-local value rather than its default value.
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
622 This makes no difference if the hook is not buffer-local.
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
623 To make a hook variable buffer-local, always use
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
624 `make-local-hook', not `make-local-variable'."
4964
78c13f3054e5 (remove-hook): New function, analogous to add-hook. This
Richard M. Stallman <rms@gnu.org>
parents: 4767
diff changeset
625 (if (or (not (boundp hook)) ;unbound symbol, or
9195
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
626 (not (default-boundp 'hook))
4964
78c13f3054e5 (remove-hook): New function, analogous to add-hook. This
Richard M. Stallman <rms@gnu.org>
parents: 4767
diff changeset
627 (null (symbol-value hook)) ;value is nil, or
78c13f3054e5 (remove-hook): New function, analogous to add-hook. This
Richard M. Stallman <rms@gnu.org>
parents: 4767
diff changeset
628 (null function)) ;function is nil, then
78c13f3054e5 (remove-hook): New function, analogous to add-hook. This
Richard M. Stallman <rms@gnu.org>
parents: 4767
diff changeset
629 nil ;Do nothing.
9202
92d6de82426a (add-hook, remove-hook): If the hook was made local
Richard M. Stallman <rms@gnu.org>
parents: 9195
diff changeset
630 (if (or local
92d6de82426a (add-hook, remove-hook): If the hook was made local
Richard M. Stallman <rms@gnu.org>
parents: 9195
diff changeset
631 ;; Detect the case where make-local-variable was used on a hook
92d6de82426a (add-hook, remove-hook): If the hook was made local
Richard M. Stallman <rms@gnu.org>
parents: 9195
diff changeset
632 ;; and do what we used to do.
92d6de82426a (add-hook, remove-hook): If the hook was made local
Richard M. Stallman <rms@gnu.org>
parents: 9195
diff changeset
633 (and (local-variable-p hook)
92d6de82426a (add-hook, remove-hook): If the hook was made local
Richard M. Stallman <rms@gnu.org>
parents: 9195
diff changeset
634 (not (memq t (symbol-value hook)))))
9195
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
635 (let ((hook-value (symbol-value hook)))
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
636 (if (consp hook-value)
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
637 (if (member function hook-value)
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
638 (setq hook-value (delete function (copy-sequence hook-value))))
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
639 (if (equal hook-value function)
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
640 (setq hook-value nil)))
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
641 (set hook hook-value))
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
642 (let ((hook-value (default-value hook)))
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
643 (if (consp hook-value)
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
644 (if (member function hook-value)
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
645 (setq hook-value (delete function (copy-sequence hook-value))))
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
646 (if (equal hook-value function)
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
647 (setq hook-value nil)))
70b00615cb75 (add-hook): Initialize default value and local value.
Richard M. Stallman <rms@gnu.org>
parents: 8959
diff changeset
648 (set-default hook hook-value)))))
9510
f03544494d1c (add-to-list): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9202
diff changeset
649
f03544494d1c (add-to-list): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9202
diff changeset
650 (defun add-to-list (list-var element)
9535
a2908d5da32a (add-to-list): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 9510
diff changeset
651 "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
652 The test for presence of ELEMENT is done with `equal'.
9535
a2908d5da32a (add-to-list): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 9510
diff changeset
653 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
654 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
655 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
656 `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
657 other hooks, such as major mode hooks, can do the job."
9510
f03544494d1c (add-to-list): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9202
diff changeset
658 (or (member element (symbol-value list-var))
f03544494d1c (add-to-list): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9202
diff changeset
659 (set list-var (cons element (symbol-value list-var)))))
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
660
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
661 ;;;; 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
662
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
663 (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
664 "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
665 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
666 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
667 It does nothing if FORM is already on the list for FILE.
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
668 FILE should be the name of a library, with no directory name."
10794
4443f78a2117 (eval-after-load): Run FORM now if FILE's already loaded.
Richard M. Stallman <rms@gnu.org>
parents: 10693
diff changeset
669 ;; Make sure there is an element for FILE.
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
670 (or (assoc file after-load-alist)
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
671 (setq after-load-alist (cons (list file) 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
672 ;; Add FORM to the element if it isn't there.
5440
856ecdc5228a (eval-after-load): Do nothing if FORM is already on the list.
Richard M. Stallman <rms@gnu.org>
parents: 5421
diff changeset
673 (let ((elt (assoc file after-load-alist)))
856ecdc5228a (eval-after-load): Do nothing if FORM is already on the list.
Richard M. Stallman <rms@gnu.org>
parents: 5421
diff changeset
674 (or (member form (cdr elt))
10794
4443f78a2117 (eval-after-load): Run FORM now if FILE's already loaded.
Richard M. Stallman <rms@gnu.org>
parents: 10693
diff changeset
675 (progn
4443f78a2117 (eval-after-load): Run FORM now if FILE's already loaded.
Richard M. Stallman <rms@gnu.org>
parents: 10693
diff changeset
676 (nconc elt (list form))
4443f78a2117 (eval-after-load): Run FORM now if FILE's already loaded.
Richard M. Stallman <rms@gnu.org>
parents: 10693
diff changeset
677 ;; If the file has been loaded already, run FORM right away.
4443f78a2117 (eval-after-load): Run FORM now if FILE's already loaded.
Richard M. Stallman <rms@gnu.org>
parents: 10693
diff changeset
678 (and (assoc file load-history)
4443f78a2117 (eval-after-load): Run FORM now if FILE's already loaded.
Richard M. Stallman <rms@gnu.org>
parents: 10693
diff changeset
679 (eval form)))))
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
680 form)
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
681
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
682 (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
683 "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
684 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
685 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
686 (eval-after-load file (read)))
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
687
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
688
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
689 ;;;; Input and display facilities.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
690
18880
1ed40ed8e0c1 (custom-declare-variable-early): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18828
diff changeset
691 (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
692 "*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
693 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
694
1ed40ed8e0c1 (custom-declare-variable-early): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18828
diff changeset
695 (custom-declare-variable-early
1ed40ed8e0c1 (custom-declare-variable-early): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18828
diff changeset
696 'read-quoted-char-radix 8
1ed40ed8e0c1 (custom-declare-variable-early): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18828
diff changeset
697 "*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
698 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
699 :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
700 :group 'editing-basics)
4837387f683c (read-quoted-char): Handle non-character events.
Richard M. Stallman <rms@gnu.org>
parents: 18821
diff changeset
701
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
702 (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
703 "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
704 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
705 we read any number of octal digits and return the
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
706 soecified 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
707 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
708 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
709
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
710 The optional argument PROMPT specifies a string to use to prompt the user."
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
711 (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
712 (while (not done)
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
713 (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
714 ;; 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
715 (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
716 (help-form
f75e47f673f4 (read-quoted-char): Turn on help-form and turn off help-char.
Karl Heuer <kwzh@gnu.org>
parents: 12016
diff changeset
717 "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
718 or the octal character code.
18828
4837387f683c (read-quoted-char): Handle non-character events.
Richard M. Stallman <rms@gnu.org>
parents: 18821
diff changeset
719 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
720 any other non-digit terminates the character code and is then used as input."))
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
721 (and prompt (message "%s-" prompt))
18828
4837387f683c (read-quoted-char): Handle non-character events.
Richard M. Stallman <rms@gnu.org>
parents: 18821
diff changeset
722 (setq char (read-event))
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
723 (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
724 ;; 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
725 (and char
faab6e4baa7d (read-quoted-char): Convert function keys like Return
Richard M. Stallman <rms@gnu.org>
parents: 18880
diff changeset
726 (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
727 (if (arrayp translated)
18948
faab6e4baa7d (read-quoted-char): Convert function keys like Return
Richard M. Stallman <rms@gnu.org>
parents: 18880
diff changeset
728 (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
729 (cond ((null char))
18828
4837387f683c (read-quoted-char): Handle non-character events.
Richard M. Stallman <rms@gnu.org>
parents: 18821
diff changeset
730 ((not (integerp char))
4837387f683c (read-quoted-char): Handle non-character events.
Richard M. Stallman <rms@gnu.org>
parents: 18821
diff changeset
731 (setq unread-command-events (list char)
4837387f683c (read-quoted-char): Handle non-character events.
Richard M. Stallman <rms@gnu.org>
parents: 18821
diff changeset
732 done t))
19175
3d80c899a15d (read-quoted-char): Fix handling of meta-chars.
Richard M. Stallman <rms@gnu.org>
parents: 19002
diff changeset
733 ((/= (logand char ?\M-\^@) 0)
3d80c899a15d (read-quoted-char): Fix handling of meta-chars.
Richard M. Stallman <rms@gnu.org>
parents: 19002
diff changeset
734 ;; 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
735 (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
736 done t))
18828
4837387f683c (read-quoted-char): Handle non-character events.
Richard M. Stallman <rms@gnu.org>
parents: 18821
diff changeset
737 ((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
738 (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
739 (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
740 ((and (<= ?a (downcase char))
4837387f683c (read-quoted-char): Handle non-character events.
Richard M. Stallman <rms@gnu.org>
parents: 18821
diff changeset
741 (< (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
742 (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
743 (+ 10 (- (downcase char) ?a))))
18828
4837387f683c (read-quoted-char): Handle non-character events.
Richard M. Stallman <rms@gnu.org>
parents: 18821
diff changeset
744 (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
745 ((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
746 (setq done t))
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
747 ((not first)
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
748 (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
749 done t))
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
750 (t (setq code char
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
751 done t)))
83425393d550 (read-quoted-char): Read any number of octal digits,
Richard M. Stallman <rms@gnu.org>
parents: 18044
diff changeset
752 (setq first nil))
19175
3d80c899a15d (read-quoted-char): Fix handling of meta-chars.
Richard M. Stallman <rms@gnu.org>
parents: 19002
diff changeset
753 code))
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
754
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
755 (defun force-mode-line-update (&optional all)
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
756 "Force the mode-line of the current buffer to be redisplayed.
6795
a379e974be7c (force-mode-line-update): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6725
diff changeset
757 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
758 (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
759 (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
760
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
761 (defun momentary-string-display (string pos &optional exit-char message)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
762 "Momentarily display STRING in the buffer at POS.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
763 Display remains until next character is typed.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
764 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
765 otherwise it is then available as input (as a command if nothing else).
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
766 Display MESSAGE (optional fourth arg) in the echo area.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
767 If MESSAGE is nil, instructions to type EXIT-CHAR are displayed there."
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
768 (or exit-char (setq exit-char ?\ ))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
769 (let ((buffer-read-only nil)
6553
fca6271b0983 (momentary-string-display): Avoid modifying the undo list.
Richard M. Stallman <rms@gnu.org>
parents: 6551
diff changeset
770 ;; 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
771 (buffer-undo-list t)
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
772 (modified (buffer-modified-p))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
773 (name buffer-file-name)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
774 insert-end)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
775 (unwind-protect
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
776 (progn
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
777 (save-excursion
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
778 (goto-char pos)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
779 ;; defeat file locking... don't try this at home, kids!
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
780 (setq buffer-file-name nil)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
781 (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
782 (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
783 ;; If the message end is off screen, recenter now.
5474175de175 (momentary-string-display): Scroll to keep the string on the screen.
Richard M. Stallman <rms@gnu.org>
parents: 4518
diff changeset
784 (if (> (window-end) insert-end)
5474175de175 (momentary-string-display): Scroll to keep the string on the screen.
Richard M. Stallman <rms@gnu.org>
parents: 4518
diff changeset
785 (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
786 ;; 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
787 ;; 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
788 (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
789 (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
790 (progn
5474175de175 (momentary-string-display): Scroll to keep the string on the screen.
Richard M. Stallman <rms@gnu.org>
parents: 4518
diff changeset
791 (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
792 (recenter 0))))
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
793 (message (or message "Type %s to continue editing.")
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
794 (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
795 (let ((char (read-event)))
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
796 (or (eq char exit-char)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1695
diff changeset
797 (setq unread-command-events (list char)))))
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
798 (if insert-end
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
799 (save-excursion
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
800 (delete-region pos insert-end)))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
801 (setq buffer-file-name name)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
802 (set-buffer-modified-p modified))))
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
803
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
804
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
805 ;;;; Miscellanea.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
806
10254
1ac3c8fea14a (font-lock-defaults): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 10178
diff changeset
807 ;; A number of major modes set this locally.
1ac3c8fea14a (font-lock-defaults): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 10178
diff changeset
808 ;; 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
809 (defvar font-lock-defaults nil)
1ac3c8fea14a (font-lock-defaults): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 10178
diff changeset
810
1ac3c8fea14a (font-lock-defaults): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 10178
diff changeset
811 ;; Avoid compiler warnings about this variable,
1ac3c8fea14a (font-lock-defaults): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 10178
diff changeset
812 ;; 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
813 (defvar buffer-file-type nil
1ac3c8fea14a (font-lock-defaults): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 10178
diff changeset
814 "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
815 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
816 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
817 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
818
14515
b35134a0e47a Added get-buffer-window-list.
Simon Marshall <simon@gnu.org>
parents: 14343
diff changeset
819 ;; 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
820 (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
821 "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
822 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
823 (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
824 (walk-windows (function (lambda (window)
b35134a0e47a Added get-buffer-window-list.
Simon Marshall <simon@gnu.org>
parents: 14343
diff changeset
825 (if (eq (window-buffer window) buffer)
b35134a0e47a Added get-buffer-window-list.
Simon Marshall <simon@gnu.org>
parents: 14343
diff changeset
826 (setq windows (cons window windows)))))
14707
ddcae263bb18 Make get-buffer-window-list take MINIBUF arg.
Simon Marshall <simon@gnu.org>
parents: 14517
diff changeset
827 minibuf frame)
14515
b35134a0e47a Added get-buffer-window-list.
Simon Marshall <simon@gnu.org>
parents: 14343
diff changeset
828 windows))
b35134a0e47a Added get-buffer-window-list.
Simon Marshall <simon@gnu.org>
parents: 14343
diff changeset
829
8211
08fb5e917205 (ignore): Put doc string in right place.
Richard M. Stallman <rms@gnu.org>
parents: 7693
diff changeset
830 (defun ignore (&rest ignore)
08fb5e917205 (ignore): Put doc string in right place.
Richard M. Stallman <rms@gnu.org>
parents: 7693
diff changeset
831 "Do nothing and return nil.
08fb5e917205 (ignore): Put doc string in right place.
Richard M. Stallman <rms@gnu.org>
parents: 7693
diff changeset
832 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
833 (interactive)
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
834 nil)
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
835
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
836 (defun error (&rest args)
13936
24ff5e49ac27 (error): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 13812
diff changeset
837 "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
838 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
839 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
840 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
841 (while t
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
842 (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
843
5912
909b94d547c4 (user-original-login-name): Reduce to a defalias, since it's redundant with
Karl Heuer <kwzh@gnu.org>
parents: 5844
diff changeset
844 (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
845
114
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
846 (defun start-process-shell-command (name buffer &rest args)
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
847 "Start a program in a subprocess. Return the process object for it.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
848 Args are NAME BUFFER COMMAND &rest COMMAND-ARGS.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
849 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
850 BUFFER is the buffer or (buffer-name) to associate with the process.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
851 Process output goes at end of that buffer, unless you specify
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
852 an output stream or filter function to handle the output.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
853 BUFFER may be also nil, meaning that this process is not associated
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
854 with any buffer
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
855 Third arg is command name, the name of a shell command.
899728e6052a Initial revision
David Lawrence <tale@gnu.org>
parents:
diff changeset
856 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
857 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
858 (cond
248462096d25 (start-process-shell-command): Don't use exec on windows-nt.
Karl Heuer <kwzh@gnu.org>
parents: 9535
diff changeset
859 ((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
860 (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
861 ;; 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
862 ;; 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
863 (t
248462096d25 (start-process-shell-command): Don't use exec on windows-nt.
Karl Heuer <kwzh@gnu.org>
parents: 9535
diff changeset
864 (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
865 (mapconcat 'identity args " ")))))
16359
18cc78dc8b18 (with-temp-file): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16333
diff changeset
866
16277
bbddbc86b82b (with-current-buffer): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 15983
diff changeset
867 (defmacro with-current-buffer (buffer &rest body)
bbddbc86b82b (with-current-buffer): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 15983
diff changeset
868 "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
869 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
870 See also `with-temp-buffer'."
16277
bbddbc86b82b (with-current-buffer): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 15983
diff changeset
871 `(save-current-buffer
bbddbc86b82b (with-current-buffer): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 15983
diff changeset
872 (set-buffer ,buffer)
16379
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
873 ,@body))
16277
bbddbc86b82b (with-current-buffer): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 15983
diff changeset
874
16359
18cc78dc8b18 (with-temp-file): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16333
diff changeset
875 (defmacro with-temp-file (file &rest forms)
18cc78dc8b18 (with-temp-file): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16333
diff changeset
876 "Create a new buffer, evaluate FORMS there, and write the buffer to FILE.
16379
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
877 The value of the last form in FORMS is returned, like `progn'.
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
878 See also `with-temp-buffer'."
16359
18cc78dc8b18 (with-temp-file): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16333
diff changeset
879 (let ((temp-file (make-symbol "temp-file"))
16379
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
880 (temp-buffer (make-symbol "temp-buffer")))
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
881 `(let ((,temp-file ,file)
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
882 (,temp-buffer
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
883 (get-buffer-create (generate-new-buffer-name " *temp file*"))))
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
884 (unwind-protect
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
885 (prog1
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
886 (with-current-buffer ,temp-buffer
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
887 ,@forms)
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
888 (with-current-buffer ,temp-buffer
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
889 (widen)
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
890 (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
891 (and (buffer-name ,temp-buffer)
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
892 (kill-buffer ,temp-buffer))))))
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
893
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
894 (defmacro with-temp-buffer (&rest forms)
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
895 "Create a temporary buffer, and evaluate FORMS there like `progn'.
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
896 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
897 (let ((temp-buffer (make-symbol "temp-buffer")))
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
898 `(let ((,temp-buffer
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
899 (get-buffer-create (generate-new-buffer-name " *temp*"))))
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
900 (unwind-protect
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
901 (with-current-buffer ,temp-buffer
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
902 ,@forms)
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
903 (and (buffer-name ,temp-buffer)
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
904 (kill-buffer ,temp-buffer))))))
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
905
16311
a56a8c6f2d8f (with-output-to-string): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16294
diff changeset
906 (defmacro with-output-to-string (&rest body)
a56a8c6f2d8f (with-output-to-string): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16294
diff changeset
907 "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
908 `(let ((standard-output
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
909 (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
910 (let ((standard-output standard-output))
a56a8c6f2d8f (with-output-to-string): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16294
diff changeset
911 ,@body)
16379
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
912 (with-current-buffer standard-output
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
913 (prog1
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
914 (buffer-string)
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
915 (kill-buffer nil)))))
16549
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
916
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
917 (defmacro combine-after-change-calls (&rest body)
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
918 "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
919 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
920 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
921 when BODY is finished.
17146
b8536e42d4ef (combine-after-change-calls): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16845
diff changeset
922 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
923
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
924 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
925 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
926
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
927 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
928 in BODY."
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
929 `(unwind-protect
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
930 (let ((combine-after-change-calls t))
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
931 . ,body)
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
932 (combine-after-change-execute)))
30ddd0e52ace (combine-after-change-calls): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16437
diff changeset
933
16379
dcc3625f52e2 (with-current-buffer): Minor cleanup.
Erik Naggum <erik@naggum.no>
parents: 16359
diff changeset
934
15955
32d772cba2c1 (save-match-data): Use save-match-data-internal
Richard M. Stallman <rms@gnu.org>
parents: 15894
diff changeset
935 (defvar save-match-data-internal)
32d772cba2c1 (save-match-data): Use save-match-data-internal
Richard M. Stallman <rms@gnu.org>
parents: 15894
diff changeset
936
32d772cba2c1 (save-match-data): Use save-match-data-internal
Richard M. Stallman <rms@gnu.org>
parents: 15894
diff changeset
937 ;; 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
938 ;; 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
939 ;; 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
940 ;; 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
941 (defmacro save-match-data (&rest body)
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
942 "Execute the BODY forms, restoring the global value of the match data."
15983
9a41bae14122 (save-match-data): Fix typo in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15965
diff changeset
943 `(let ((save-match-data-internal (match-data)))
15955
32d772cba2c1 (save-match-data): Use save-match-data-internal
Richard M. Stallman <rms@gnu.org>
parents: 15894
diff changeset
944 (unwind-protect
32d772cba2c1 (save-match-data): Use save-match-data-internal
Richard M. Stallman <rms@gnu.org>
parents: 15894
diff changeset
945 (progn ,@body)
15965
daebc0d7f610 (save-match-data): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15955
diff changeset
946 (store-match-data save-match-data-internal))))
144
535ec1aa78ef *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 114
diff changeset
947
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
948 (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
949 "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
950 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
951 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
952 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
953 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
954 (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
955 (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
956 (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
957 (buffer-substring (match-beginning num) (match-end num)))))
10560
fd09d51dfd77 (match-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10368
diff changeset
958
16314
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
959 (defun split-string (string &optional separators)
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
960 "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
961 Each match for SEPARATORS is a splitting point.
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
962 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
963 which is returned.
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
964 If SEPARATORS is absent, it defaults to \"[ \\f\\t\\n\\r\\v]+\"."
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
965 (let ((rexp (or separators "[ \f\t\n\r\v]+"))
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
966 (start 0)
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
967 (list nil))
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
968 (while (string-match rexp string start)
16333
585956e62c87 (split-string): Fix minor bug.
Richard M. Stallman <rms@gnu.org>
parents: 16314
diff changeset
969 (or (eq (match-beginning 0) 0)
16314
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
970 (setq list
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
971 (cons (substring string start (match-beginning 0))
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
972 list)))
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
973 (setq start (match-end 0)))
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
974 (or (eq start (length string))
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
975 (setq list
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
976 (cons (substring string start)
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
977 list)))
c72b7ee606a3 (split-string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16311
diff changeset
978 (nreverse list)))
16359
18cc78dc8b18 (with-temp-file): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16333
diff changeset
979
5385
53077bf7c718 (shell-quote-argument): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5302
diff changeset
980 (defun shell-quote-argument (argument)
53077bf7c718 (shell-quote-argument): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5302
diff changeset
981 "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
982 (if (eq system-type 'ms-dos)
0d404ef125ea (shell-quote-argument): Don't do anything, on MS-DOS.
Richard M. Stallman <rms@gnu.org>
parents: 12395
diff changeset
983 ;; MS-DOS shells don't have quoting, so don't do any.
0d404ef125ea (shell-quote-argument): Don't do anything, on MS-DOS.
Richard M. Stallman <rms@gnu.org>
parents: 12395
diff changeset
984 argument
0d404ef125ea (shell-quote-argument): Don't do anything, on MS-DOS.
Richard M. Stallman <rms@gnu.org>
parents: 12395
diff changeset
985 (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
986 (concat "\"" argument "\"")
17610
f95fbf6f1234 (shell-quote-argument): Quote null string usefully.
Richard M. Stallman <rms@gnu.org>
parents: 17437
diff changeset
987 (if (equal argument "")
f95fbf6f1234 (shell-quote-argument): Quote null string usefully.
Richard M. Stallman <rms@gnu.org>
parents: 17437
diff changeset
988 "''"
f95fbf6f1234 (shell-quote-argument): Quote null string usefully.
Richard M. Stallman <rms@gnu.org>
parents: 17437
diff changeset
989 ;; Quote everything except POSIX filename characters.
f95fbf6f1234 (shell-quote-argument): Quote null string usefully.
Richard M. Stallman <rms@gnu.org>
parents: 17437
diff changeset
990 ;; 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
991 (let ((result "") (start 0) end)
f95fbf6f1234 (shell-quote-argument): Quote null string usefully.
Richard M. Stallman <rms@gnu.org>
parents: 17437
diff changeset
992 (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
993 (setq end (match-beginning 0)
f95fbf6f1234 (shell-quote-argument): Quote null string usefully.
Richard M. Stallman <rms@gnu.org>
parents: 17437
diff changeset
994 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
995 "\\" (substring argument end (1+ end)))
f95fbf6f1234 (shell-quote-argument): Quote null string usefully.
Richard M. Stallman <rms@gnu.org>
parents: 17437
diff changeset
996 start (1+ end)))
f95fbf6f1234 (shell-quote-argument): Quote null string usefully.
Richard M. Stallman <rms@gnu.org>
parents: 17437
diff changeset
997 (concat result (substring argument start)))))))
5385
53077bf7c718 (shell-quote-argument): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5302
diff changeset
998
5844
445de172c217 (make-syntax-table): Behave like copy-syntax-table if an argument is given,
Karl Heuer <kwzh@gnu.org>
parents: 5460
diff changeset
999 (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
1000 "Return a new syntax table.
17612
beaac591604a (make-syntax-table): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 17610
diff changeset
1001 If OLDTABLE is non-nil, copy OLDTABLE.
beaac591604a (make-syntax-table): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 17610
diff changeset
1002 Otherwise, create a syntax table which inherits
beaac591604a (make-syntax-table): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 17610
diff changeset
1003 all letters and control characters from the standard syntax table;
beaac591604a (make-syntax-table): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 17610
diff changeset
1004 other characters are copied from the standard syntax table."
5844
445de172c217 (make-syntax-table): Behave like copy-syntax-table if an argument is given,
Karl Heuer <kwzh@gnu.org>
parents: 5460
diff changeset
1005 (if oldtable
445de172c217 (make-syntax-table): Behave like copy-syntax-table if an argument is given,
Karl Heuer <kwzh@gnu.org>
parents: 5460
diff changeset
1006 (copy-syntax-table oldtable)
445de172c217 (make-syntax-table): Behave like copy-syntax-table if an argument is given,
Karl Heuer <kwzh@gnu.org>
parents: 5460
diff changeset
1007 (let ((table (copy-syntax-table))
445de172c217 (make-syntax-table): Behave like copy-syntax-table if an argument is given,
Karl Heuer <kwzh@gnu.org>
parents: 5460
diff changeset
1008 i)
445de172c217 (make-syntax-table): Behave like copy-syntax-table if an argument is given,
Karl Heuer <kwzh@gnu.org>
parents: 5460
diff changeset
1009 (setq i 0)
445de172c217 (make-syntax-table): Behave like copy-syntax-table if an argument is given,
Karl Heuer <kwzh@gnu.org>
parents: 5460
diff changeset
1010 (while (<= i 31)
13186
6d3d7b32c519 (make-syntax-table): Use nil for "inherit".
Richard M. Stallman <rms@gnu.org>
parents: 13039
diff changeset
1011 (aset table i nil)
5844
445de172c217 (make-syntax-table): Behave like copy-syntax-table if an argument is given,
Karl Heuer <kwzh@gnu.org>
parents: 5460
diff changeset
1012 (setq i (1+ i)))
445de172c217 (make-syntax-table): Behave like copy-syntax-table if an argument is given,
Karl Heuer <kwzh@gnu.org>
parents: 5460
diff changeset
1013 (setq i ?A)
445de172c217 (make-syntax-table): Behave like copy-syntax-table if an argument is given,
Karl Heuer <kwzh@gnu.org>
parents: 5460
diff changeset
1014 (while (<= i ?Z)
13186
6d3d7b32c519 (make-syntax-table): Use nil for "inherit".
Richard M. Stallman <rms@gnu.org>
parents: 13039
diff changeset
1015 (aset table i nil)
5844
445de172c217 (make-syntax-table): Behave like copy-syntax-table if an argument is given,
Karl Heuer <kwzh@gnu.org>
parents: 5460
diff changeset
1016 (setq i (1+ i)))
445de172c217 (make-syntax-table): Behave like copy-syntax-table if an argument is given,
Karl Heuer <kwzh@gnu.org>
parents: 5460
diff changeset
1017 (setq i ?a)
445de172c217 (make-syntax-table): Behave like copy-syntax-table if an argument is given,
Karl Heuer <kwzh@gnu.org>
parents: 5460
diff changeset
1018 (while (<= i ?z)
13186
6d3d7b32c519 (make-syntax-table): Use nil for "inherit".
Richard M. Stallman <rms@gnu.org>
parents: 13039
diff changeset
1019 (aset table i nil)
5844
445de172c217 (make-syntax-table): Behave like copy-syntax-table if an argument is given,
Karl Heuer <kwzh@gnu.org>
parents: 5460
diff changeset
1020 (setq i (1+ i)))
445de172c217 (make-syntax-table): Behave like copy-syntax-table if an argument is given,
Karl Heuer <kwzh@gnu.org>
parents: 5460
diff changeset
1021 (setq i 128)
445de172c217 (make-syntax-table): Behave like copy-syntax-table if an argument is given,
Karl Heuer <kwzh@gnu.org>
parents: 5460
diff changeset
1022 (while (<= i 255)
13186
6d3d7b32c519 (make-syntax-table): Use nil for "inherit".
Richard M. Stallman <rms@gnu.org>
parents: 13039
diff changeset
1023 (aset table i nil)
5844
445de172c217 (make-syntax-table): Behave like copy-syntax-table if an argument is given,
Karl Heuer <kwzh@gnu.org>
parents: 5460
diff changeset
1024 (setq i (1+ i)))
445de172c217 (make-syntax-table): Behave like copy-syntax-table if an argument is given,
Karl Heuer <kwzh@gnu.org>
parents: 5460
diff changeset
1025 table)))
17146
b8536e42d4ef (combine-after-change-calls): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16845
diff changeset
1026
b8536e42d4ef (combine-after-change-calls): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16845
diff changeset
1027 (defun add-to-invisibility-spec (arg)
b8536e42d4ef (combine-after-change-calls): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16845
diff changeset
1028 "Add elements to `buffer-invisibility-spec'.
b8536e42d4ef (combine-after-change-calls): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16845
diff changeset
1029 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
1030 that can be added."
b8536e42d4ef (combine-after-change-calls): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16845
diff changeset
1031 (cond
b8536e42d4ef (combine-after-change-calls): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16845
diff changeset
1032 ((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
1033 (setq buffer-invisibility-spec (list arg)))
b8536e42d4ef (combine-after-change-calls): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16845
diff changeset
1034 (t
17158
f181580c182c (when, unless): Symbol props moved from cl.el.
Karl Heuer <kwzh@gnu.org>
parents: 17152
diff changeset
1035 (setq buffer-invisibility-spec
f181580c182c (when, unless): Symbol props moved from cl.el.
Karl Heuer <kwzh@gnu.org>
parents: 17152
diff changeset
1036 (cons arg buffer-invisibility-spec)))))
17146
b8536e42d4ef (combine-after-change-calls): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16845
diff changeset
1037
b8536e42d4ef (combine-after-change-calls): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16845
diff changeset
1038 (defun remove-from-invisibility-spec (arg)
b8536e42d4ef (combine-after-change-calls): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16845
diff changeset
1039 "Remove elements from `buffer-invisibility-spec'."
b8536e42d4ef (combine-after-change-calls): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16845
diff changeset
1040 (if buffer-invisibility-spec
17152
3c55ec545afb Fix typo in previous change.
Karl Heuer <kwzh@gnu.org>
parents: 17146
diff changeset
1041 (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
1042
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1043 (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
1044 "Give KEY a global binding as COMMAND.
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1045 COMMAND is a symbol naming an interactively-callable function.
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1046 KEY is a key sequence (a string or vector of characters or event types).
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1047 Non-ASCII characters with codes above 127 (such as ISO Latin-1)
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1048 can be included if you use a vector.
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1049 Note that if KEY has a local binding in the current buffer
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1050 that local binding will continue to shadow any global binding."
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1051 (interactive "KSet key globally: \nCSet key %s to command: ")
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1052 (or (vectorp key) (stringp key)
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1053 (signal 'wrong-type-argument (list 'arrayp key)))
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1054 (define-key (current-global-map) key command)
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1055 nil)
5421
a248a39fa4b8 (make-syntax-table): New function; no longer an alias
Richard M. Stallman <rms@gnu.org>
parents: 5385
diff changeset
1056
10825
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1057 (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
1058 "Give KEY a local binding as COMMAND.
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1059 COMMAND is a symbol naming an interactively-callable function.
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1060 KEY is a key sequence (a string or vector of characters or event types).
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1061 Non-ASCII characters with codes above 127 (such as ISO Latin-1)
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1062 can be included if you use a vector.
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1063 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
1064 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
1065 (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
1066 (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
1067 (or map
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1068 (use-local-map (setq map (make-sparse-keymap))))
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1069 (or (vectorp key) (stringp key)
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1070 (signal 'wrong-type-argument (list 'arrayp key)))
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1071 (define-key map key command))
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1072 nil)
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1073
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1074 (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
1075 "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
1076 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
1077 (interactive "kUnset key globally: ")
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1078 (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
1079
10826
bd0ab0601489 (local-unset-key): Fix args in previous change.
Karl Heuer <kwzh@gnu.org>
parents: 10825
diff changeset
1080 (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
1081 "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
1082 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
1083 (interactive "kUnset key locally: ")
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1084 (if (current-local-map)
10826
bd0ab0601489 (local-unset-key): Fix args in previous change.
Karl Heuer <kwzh@gnu.org>
parents: 10825
diff changeset
1085 (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
1086 nil)
4dba26c66bf5 (global_set_key, local_set_key, global_unset_key)
Richard M. Stallman <rms@gnu.org>
parents: 10794
diff changeset
1087
12016
3fd7ef954be6 (frame-configuration-p): Moved here from frame.el.
Karl Heuer <kwzh@gnu.org>
parents: 11640
diff changeset
1088 ;; 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
1089 ;; 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
1090 (defun frame-configuration-p (object)
3fd7ef954be6 (frame-configuration-p): Moved here from frame.el.
Karl Heuer <kwzh@gnu.org>
parents: 11640
diff changeset
1091 "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
1092 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
1093 configuration."
3fd7ef954be6 (frame-configuration-p): Moved here from frame.el.
Karl Heuer <kwzh@gnu.org>
parents: 11640
diff changeset
1094 (and (consp object)
3fd7ef954be6 (frame-configuration-p): Moved here from frame.el.
Karl Heuer <kwzh@gnu.org>
parents: 11640
diff changeset
1095 (eq (car object) 'frame-configuration)))
3fd7ef954be6 (frame-configuration-p): Moved here from frame.el.
Karl Heuer <kwzh@gnu.org>
parents: 11640
diff changeset
1096
17418
726a87ac1486 (functionp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 17215
diff changeset
1097 (defun functionp (object)
18880
1ed40ed8e0c1 (custom-declare-variable-early): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18828
diff changeset
1098 "Non-nil if OBJECT is a type of object that can be called as a function."
19176
d8eb24685152 (functionp): Use byte-code-function-p, not compiled-function-p.
Richard M. Stallman <rms@gnu.org>
parents: 19175
diff changeset
1099 (or (subrp object) (byte-code-function-p object)
17418
726a87ac1486 (functionp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 17215
diff changeset
1100 (eq (car-safe object) 'lambda)
726a87ac1486 (functionp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 17215
diff changeset
1101 (and (symbolp object) (fboundp object))))
726a87ac1486 (functionp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 17215
diff changeset
1102
2504
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1103 ;; now in fns.c
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1104 ;(defun nth (n list)
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1105 ; "Returns the Nth element of LIST.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1106 ;N counts from zero. If LIST is not that long, nil is returned."
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1107 ; (car (nthcdr n list)))
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1108 ;
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1109 ;(defun copy-alist (alist)
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1110 ; "Return a copy of ALIST.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1111 ;This is a new alist which represents the same mapping
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1112 ;from objects to objects, but does not share the alist structure with ALIST.
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1113 ;The objects mapped (cars and cdrs of elements of the alist)
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1114 ;are shared, however."
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1115 ; (setq alist (copy-sequence alist))
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1116 ; (let ((tail alist))
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1117 ; (while tail
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1118 ; (if (consp (car tail))
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1119 ; (setcar tail (cons (car (car tail)) (cdr (car tail)))))
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1120 ; (setq tail (cdr tail))))
181eef669324 * subr.el (overlay-start, overlay-end, overlay-buffer): New
Jim Blandy <jimb@redhat.com>
parents: 2428
diff changeset
1121 ; alist)
787
3cece0106722 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 779
diff changeset
1122
3cece0106722 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 779
diff changeset
1123 ;;; subr.el ends here