|
|
1.1 root 1: ;; Basic lisp subroutines for Emacs
2: ;; Copyright (C) 1985 Richard M. Stallman.
3:
4: ;; This file is part of GNU Emacs.
5:
6: ;; GNU Emacs is distributed in the hope that it will be useful,
7: ;; but WITHOUT ANY WARRANTY. No author or distributor
8: ;; accepts responsibility to anyone for the consequences of using it
9: ;; or for whether it serves any particular purpose or works at all,
10: ;; unless he says so in writing. Refer to the GNU Emacs General Public
11: ;; License for full details.
12:
13: ;; Everyone is granted permission to copy, modify and redistribute
14: ;; GNU Emacs, but only under the conditions described in the
15: ;; GNU Emacs General Public License. A copy of this license is
16: ;; supposed to have been given to you along with GNU Emacs so you
17: ;; can know your rights and responsibilities. It should be in a
18: ;; file named COPYING. Among other things, the copyright notice
19: ;; and this notice must be preserved on all copies.
20:
21:
22: (defun read-quoted-char (&optional prompt)
23: "Like read-char, except that if the first character read is an octal
24: digit, we read up to two more octal digits and return the character
25: represented by the octal number consisting of those digits"
26: (let ((count 0) (code 0) char)
27: (while (< count 3)
28: (let ((inhibit-quit (zerop count))
29: (help-form nil))
30: (and prompt (message "%s-" prompt))
31: (setq char (read-char))
32: (if inhibit-quit (setq quit-flag nil)))
33: (cond ((null char))
34: ((and (<= ?0 char) (<= char ?7))
35: (setq code (+ (* code 8) (- char ?0))
36: count (1+ count))
37: (and prompt (message (setq prompt
38: (format "%s %c" prompt char)))))
39: ((> count 0)
40: (setq unread-command-char char count 259))
41: (t (setq code char count 259))))
42: (logand 255 code)))
43:
44: (defun error (&rest format-args)
45: "Signal an error, making error message by passing all args to format."
46: (while t
47: (signal 'error (list (apply 'format format-args)))))
48:
49: (defun undefined ()
50: (interactive)
51: (ding))
52:
53: ;Prevent the \{...} documentation construct
54: ;from mentioning keys that run this command.
55: (put 'undefined 'suppress-keymap t)
56:
57: (defun suppress-keymap (map &optional nodigits)
58: "Make MAP override all buffer-modifying commands to be undefined.
59: Works by knowing which commands are normally buffer-modifying.
60: Normally also makes digits set numeric arg,
61: but optional second arg NODIGITS non-nil prevents this."
62: (let ((i ? ))
63: (while (< i 127)
64: (aset map i 'undefined)
65: (setq i (1+ i))))
66: (or nodigits
67: (let (loop)
68: (aset map ?- 'negative-argument)
69: ;; Make plain numbers do numeric args.
70: (setq loop ?0)
71: (while (<= loop ?9)
72: (aset map loop 'digit-argument)
73: (setq loop (1+ loop))))))
74:
75: (defun copy-alist (alist)
76: "Return a copy of ALIST.
77: This is a new alist which represents the same mapping
78: from objects to objects, but does not share the alist structure with ALIST.
79: The objects mapped (cars and cdrs of elements of the alist)
80: are shared, however."
81: (setq alist (copy-sequence alist))
82: (let ((tail alist))
83: (while tail
84: (if (consp (car tail))
85: (setcar tail (cons (car (car tail)) (cdr (car tail)))))
86: (setq tail (cdr tail))))
87: alist)
88:
89: (defun copy-keymap (keymap)
90: "Return a copy of KEYMAP"
91: (while (not (keymapp keymap))
92: (setq keymap (signal 'wrong-type-argument (list 'keymapp keymap))))
93: (if (vectorp keymap)
94: (copy-sequence keymap)
95: (copy-alist keymap)))
96:
97: (fset 'beep 'ding) ;preserve lingual purtity
98:
99: ;; Avoids useless byte-compilation.
100: ;; In the future, would be better to fix byte compiler
101: ;; not to really compile in cases like this,
102: ;; and use defun here.
103: (fset 'ignore '(lambda (&rest ignore) nil))
104:
105: ; old name
106: (fset 'make-syntax-table 'copy-syntax-table)
107:
108:
109: (defun run-hooks (&rest hooklist)
110: "Takes hook names and runs each one in turn. Major mode functions use this.
111: Each argument should be a symbol, a hook variable.
112: These symbols are processed in the order specified.
113: If a hook symbol has a non-nil value, that value is called
114: with no arguments to run the hook."
115: (while hooklist
116: (let ((sym (car hooklist)))
117: (and (boundp sym)
118: (symbol-value sym)
119: (funcall (symbol-value sym))))
120: (setq hooklist (cdr hooklist))))
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.