From 07d1e73a74af58d199a89e57d6094c80dca4f799 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Tue, 22 Aug 1995 16:47:19 +0000 Subject: [PATCH] (insert-kbd-macro): Express vector char modifiers with escape prefixes. Express big basic char codes in octal. --- lisp/macros.el | 59 ++++++++++++++++++++++++++------------------------ 1 file 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") -- 2.39.2