summaryrefslogtreecommitdiff
path: root/lisp/macros.el
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1992-10-23 09:31:22 +0000
committerRichard M. Stallman <rms@gnu.org>1992-10-23 09:31:22 +0000
commitb4b3b736039138f81c825f92eb124b5878abf5f0 (patch)
treeabfa4e89d3989b328f0b53f5af87171a22b5bdac /lisp/macros.el
parentade349a0bf6dcbc8aaed56717052b6e4a1015983 (diff)
downloademacs-b4b3b736039138f81c825f92eb124b5878abf5f0.tar.gz
(insert-kbd-macro): Replace nonprinting chars with escapes.
Diffstat (limited to 'lisp/macros.el')
-rw-r--r--lisp/macros.el28
1 files changed, 25 insertions, 3 deletions
diff --git a/lisp/macros.el b/lisp/macros.el
index f3f8181586d..4344a04f306 100644
--- a/lisp/macros.el
+++ b/lisp/macros.el
@@ -41,7 +41,7 @@ Such a \"function\" cannot be called from Lisp, but it is a valid editor command
(defun insert-kbd-macro (macroname &optional keys)
"Insert in buffer the definition of kbd macro NAME, as Lisp code.
Optional second arg KEYS means also record the keys it is on
-(this is the prefix argument, when calling interactively).
+\(this is the prefix argument, when calling interactively).
This Lisp code will, when executed, define the kbd macro with the same
definition it has now. If you say to record the keys, the Lisp code
@@ -49,13 +49,35 @@ will also rebind those keys to the macro. Only global key bindings
are recorded since executing this Lisp code always makes global
bindings.
-To save a kbd macro, visit a file of Lisp code such as your ~/.emacs,
+To save a kbd macro, visit a file of Lisp code such as your `~/.emacs',
use this command, and then save the file."
(interactive "CInsert kbd macro (name): \nP")
(insert "(fset '")
(prin1 macroname (current-buffer))
(insert "\n ")
- (prin1 (symbol-function macroname) (current-buffer))
+ (let ((beg (point)) end)
+ (prin1 (symbol-function macroname) (current-buffer))
+ (setq end (point-marker))
+ (goto-char beg)
+ (while (< (point) end)
+ (let ((char (following-char)))
+ (cond ((< char 32)
+ (delete-region (point) (1+ (point)))
+ (insert "\\C-" (+ 96 char)))
+ ((< char 127)
+ (forward-char 1))
+ ((= char 127)
+ (delete-region (point) (1+ (point)))
+ (insert "\\C-?"))
+ ((< char 160)
+ (delete-region (point) (1+ (point)))
+ (insert "\\M-C-" (- char 32)))
+ ((< char 255)
+ (delete-region (point) (1+ (point)))
+ (insert "\\M-" (- char 128)))
+ ((= char 255)
+ (delete-region (point) (1+ (point)))
+ (insert "\\M-C-?"))))))
(insert ")\n")
(if keys
(let ((keys (where-is-internal macroname nil)))