summaryrefslogtreecommitdiff
path: root/lisp/macros.el
diff options
context:
space:
mode:
authorKarl Heuer <kwzh@gnu.org>1995-03-31 18:52:51 +0000
committerKarl Heuer <kwzh@gnu.org>1995-03-31 18:52:51 +0000
commit75eb1a5effa30cac18ebbaa6e5c9e1eaf6690823 (patch)
tree44cf37a9892ed1e3e32c0345202ba6c3c19a43c1 /lisp/macros.el
parent78639d45cc3036039a120a92f6da1dce98da3d3f (diff)
downloademacs-75eb1a5effa30cac18ebbaa6e5c9e1eaf6690823.tar.gz
(insert-kbd-macro): Do something reasonable for vectors.
Diffstat (limited to 'lisp/macros.el')
-rw-r--r--lisp/macros.el48
1 files changed, 42 insertions, 6 deletions
diff --git a/lisp/macros.el b/lisp/macros.el
index ca588fa995f..0fe325aadd3 100644
--- a/lisp/macros.el
+++ b/lisp/macros.el
@@ -70,11 +70,11 @@ use this command, and then save the file."
(insert "(fset '"))
(prin1 macroname (current-buffer))
(insert "\n ")
- (let ((beg (point)) end)
- (prin1 definition (current-buffer))
- (setq end (point-marker))
- (goto-char beg)
- (if (stringp definition)
+ (if (stringp definition)
+ (let ((beg (point)) end)
+ (prin1 definition (current-buffer))
+ (setq end (point-marker))
+ (goto-char beg)
(while (< (point) end)
(let ((char (following-char)))
(cond ((= char 0)
@@ -114,7 +114,43 @@ use this command, and then save the file."
(insert "\\M-" (- char 128)))
((= char 255)
(delete-region (point) (1+ (point)))
- (insert "\\M-\\C-?")))))))
+ (insert "\\M-\\C-?"))))))
+ (if (vectorp definition)
+ (let ((len (length definition)) (i 0) char)
+ (while (< i len)
+ (insert (if (zerop i) ?\[ ?\ ))
+ (setq char (aref definition i)
+ i (1+ i))
+ (cond ((not (and (wholenump char) (< char 256)))
+ (prin1 char (current-buffer)))
+ ((= char 0)
+ (insert "?\\C-@"))
+ ((< char 27)
+ (insert "?\\C-" (+ 96 char)))
+ ((= char ?\C-\\)
+ (insert "?\\C-\\\\"))
+ ((< char 32)
+ (insert "?\\C-" (+ 64 char)))
+ ((< char 127)
+ (insert ?? char))
+ ((= char 127)
+ (insert "?\\C-?"))
+ ((= char 128)
+ (insert "?\\M-\\C-@"))
+ ((= char (aref "\M-\C-\\" 0))
+ (insert "?\\M-\\C-\\\\"))
+ ((< char 155)
+ (insert "?\\M-\\C-" (- char 32)))
+ ((< char 160)
+ (insert "?\\M-\\C-" (- char 64)))
+ ((= char (aref "\M-\\" 0))
+ (insert "?\\M-\\\\"))
+ ((< char 255)
+ (insert "?\\M-" (- char 128)))
+ ((= char 255)
+ (insert "?\\M-\\C-?"))))
+ (insert ?\]))
+ (prin1 definition (current-buffer))))
(insert ")\n")
(if keys
(let ((keys (where-is-internal macroname '(keymap))))