diff options
author | Richard M. Stallman <rms@gnu.org> | 1995-08-22 16:47:19 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 1995-08-22 16:47:19 +0000 |
commit | 06453152fda37be84de73e08f38968515f5afe6c (patch) | |
tree | 4cbc45bddef730e61773afc384b302f896f60fbe /lisp/macros.el | |
parent | 73660b8064f674a584064c4bc950534b263e865c (diff) | |
download | emacs-06453152fda37be84de73e08f38968515f5afe6c.tar.gz |
(insert-kbd-macro): Express vector char modifiers with
escape prefixes. Express big basic char codes in octal.
Diffstat (limited to 'lisp/macros.el')
-rw-r--r-- | lisp/macros.el | 59 |
1 files changed, 31 insertions, 28 deletions
diff --git a/lisp/macros.el b/lisp/macros.el index a8f9648af7f..d834dca8806 100644 --- a/lisp/macros.el +++ b/lisp/macros.el @@ -116,39 +116,42 @@ use this command, and then save the file." (delete-region (point) (1+ (point))) (insert "\\M-\\C-?")))))) (if (vectorp definition) - (let ((len (length definition)) (i 0) char) + (let ((len (length definition)) (i 0) char mods) (while (< i len) (insert (if (zerop i) ?\[ ?\ )) (setq char (aref definition i) i (1+ i)) - (cond ((not (and (wholenump char) (< char 256))) + (cond ((not (numberp char)) (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-?")))) + (t + (insert "?") + (setq mods (event-modifiers char) + char (event-basic-type char)) + (while mods + (cond ((eq (car mods) 'control) + (insert "\\C-")) + ((eq (car mods) 'meta) + (insert "\\M-")) + ((eq (car mods) 'hyper) + (insert "\\H-")) + ((eq (car mods) 'super) + (insert "\\s-")) + ((eq (car mods) 'alt) + (insert "\\A-")) + ((and (eq (car mods) 'shift) + (>= char ?a) + (<= char ?z)) + (setq char (upcase char))) + ((eq (car mods) 'shift) + (insert "\\S-"))) + (setq mods (cdr mods))) + (cond ((= char ?\\) + (insert "\\\\")) + ((= char 127) + (insert "\\C-?")) + ((< char 127) + (insert char)) + (t (insert "\\" (format "%o" char))))))) (insert ?\])) (prin1 definition (current-buffer)))) (insert ")\n") |