diff options
author | Noam Postavsky <npostavs@gmail.com> | 2019-05-05 13:24:15 -0400 |
---|---|---|
committer | Noam Postavsky <npostavs@gmail.com> | 2019-05-12 08:05:01 -0400 |
commit | 29531785a17acf519070b73b488ad87ddd94aff7 (patch) | |
tree | 21e4b14803a7e12145fb92327876e9cc728041dc | |
parent | b1cc876b6c9d00cd9d9f4ed65176274bf35a81c4 (diff) | |
download | emacs-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.
-rw-r--r-- | lisp/kmacro.el | 1 | ||||
-rw-r--r-- | lisp/macros.el | 34 |
2 files changed, 22 insertions, 13 deletions
diff --git a/lisp/kmacro.el b/lisp/kmacro.el index fc34e167084..01dc0586140 100644 --- a/lisp/kmacro.el +++ b/lisp/kmacro.el @@ -776,6 +776,7 @@ If kbd macro currently being defined end it before activating it." ;; letters and digits, provided that we inhibit the keymap while ;; executing the macro later on (but that's controversial...) +;;;###autoload (defun kmacro-lambda-form (mac &optional counter format) "Create lambda form for macro bound to symbol or key." (if counter 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) |