summaryrefslogtreecommitdiff
path: root/lisp/macros.el
diff options
context:
space:
mode:
authorNoam Postavsky <npostavs@gmail.com>2019-05-05 13:24:15 -0400
committerNoam Postavsky <npostavs@gmail.com>2019-05-12 08:05:01 -0400
commit29531785a17acf519070b73b488ad87ddd94aff7 (patch)
tree21e4b14803a7e12145fb92327876e9cc728041dc /lisp/macros.el
parentb1cc876b6c9d00cd9d9f4ed65176274bf35a81c4 (diff)
downloademacs-29531785a17acf519070b73b488ad87ddd94aff7.tar.gz
Improve printing for named keyboard macros (Bug#35486)
* lisp/macros.el (macros--insert-vector-macro): New function, extracted from insert-kbd-macro. (insert-kbd-macro): Use it and kmacro-extract-lambda to produce nicer expressions for macros produced by kmacro-lambda-form.
Diffstat (limited to 'lisp/macros.el')
-rw-r--r--lisp/macros.el34
1 files changed, 21 insertions, 13 deletions
diff --git a/lisp/macros.el b/lisp/macros.el
index ba6a840d60c..4b38506d8a5 100644
--- a/lisp/macros.el
+++ b/lisp/macros.el
@@ -36,6 +36,16 @@
;;;###autoload
(defalias 'name-last-kbd-macro #'kmacro-name-last-macro)
+(defun macros--insert-vector-macro (definition)
+ "Print DEFINITION, a vector, into the current buffer."
+ (dotimes (i (length definition))
+ (let ((char (aref definition i)))
+ (insert (if (zerop i) ?\[ ?\s))
+ (if (characterp char)
+ (princ (prin1-char char) (current-buffer))
+ (prin1 char (current-buffer)))))
+ (insert ?\]))
+
;;;###autoload
(defun insert-kbd-macro (macroname &optional keys)
"Insert in buffer the definition of kbd macro MACRONAME, as Lisp code.
@@ -111,19 +121,17 @@ 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)
- (while (< i len)
- (insert (if (zerop i) ?\[ ?\s))
- (setq char (aref definition i)
- i (1+ i))
- (if (not (numberp char))
- (prin1 char (current-buffer))
- (princ (prin1-char char) (current-buffer))))
- (insert ?\]))
- ;; FIXME: For kmacros, we shouldn't write the (lambda ...)
- ;; gunk but instead we should write something more abstract like
- ;; (kmacro-create [<keys>] 0 "%d").
- (prin1 definition (current-buffer))))
+ (macros--insert-vector-macro definition)
+ (pcase (kmacro-extract-lambda definition)
+ (`(,vecdef ,counter ,format)
+ (insert "(kmacro-lambda-form ")
+ (macros--insert-vector-macro vecdef)
+ (insert " ")
+ (prin1 counter (current-buffer))
+ (insert " ")
+ (prin1 format (current-buffer))
+ (insert ")"))
+ (_ (prin1 definition (current-buffer))))))
(insert ")\n")
(if keys
(let ((keys (or (where-is-internal (symbol-function macroname)