* bug#35486: 26.1; insert-kbd-macro now creates unreadable list code
@ 2019-04-29 9:36 Francesco Potortì
2019-04-29 21:55 ` npostavs
0 siblings, 1 reply; 4+ messages in thread
From: Francesco Potortì @ 2019-04-29 9:36 UTC (permalink / raw)
To: 35486
The insert-kbd-macro function now creates code like this:
(fset 'rmail-remove-me
(lambda (&optional arg) "Keyboard macro." (interactive "p")
(kmacro-exec-ring-item (quote ([21 114 80 108 101 101 97 97 115 97
115 ...
rather than this as before:
(fset 'approve
"\C-[xundigestify\C-mdd\C-xqde\M-k\M-k\M-k\M-k\C-c\C-crApproved: ...
This makes it impossible to understand at a glance what a given macro
does by browsing the lisp code. I find this to be a regression. Can
this be undone, or at least controlled by an option?
^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#35486: 26.1; insert-kbd-macro now creates unreadable list code
2019-04-29 9:36 bug#35486: 26.1; insert-kbd-macro now creates unreadable list code Francesco Potortì
@ 2019-04-29 21:55 ` npostavs
2019-05-05 17:50 ` Noam Postavsky
0 siblings, 1 reply; 4+ messages in thread
From: npostavs @ 2019-04-29 21:55 UTC (permalink / raw)
To: Francesco Potortì; +Cc: 35486
Francesco Potortì <pot@gnu.org> writes:
> The insert-kbd-macro function now creates code like this:
>
> (fset 'rmail-remove-me
> (lambda (&optional arg) "Keyboard macro." (interactive "p")
> (kmacro-exec-ring-item (quote ([21 114 80 108 101 101 97 97 115 97
> 115 ...
>
> rather than this as before:
>
> (fset 'approve
> "\C-[xundigestify\C-mdd\C-xqde\M-k\M-k\M-k\M-k\C-c\C-crApproved: ...
By "before", do you mean Emacs 21? It looks like the (lambda ()
(kmacro-exec-ring-item ...)) thing was added in [1: 18d1e6c], which was
fairly long ago.
[1: 18d1e6c]: 2004-09-09 20:48:12 +0000
(kmacro-bind-to-key): Associate dedicated macro counter and format with binding.
https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=18d1e6c9fd4d8d446329ceb48a83ddca373f72c0
> This makes it impossible to understand at a glance what a given macro
> does by browsing the lisp code. I find this to be a regression. Can
> this be undone, or at least controlled by an option?
I think the kmacro-bind-to-key is important to preserve the way macro
counters work, but it seems like we should be able to add some special
casing to at least get something like this:
(fset 'approve
(lambda (&optional arg)
"Keyboard macro."
(interactive "p")
(kmacro-exec-ring-item (quote ([?\M-x ?u ?n ?d ?i ?g ?e ?s ?t ?i ?f ?y return ?d ?d ?\C-x ?q ?d ?e ?\M-k] 0 "%d")) arg)))
^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#35486: 26.1; insert-kbd-macro now creates unreadable list code
2019-04-29 21:55 ` npostavs
@ 2019-05-05 17:50 ` Noam Postavsky
2019-05-12 12:07 ` Noam Postavsky
0 siblings, 1 reply; 4+ messages in thread
From: Noam Postavsky @ 2019-05-05 17:50 UTC (permalink / raw)
To: Francesco Potortì; +Cc: 35486
[-- Attachment #1: Type: text/plain, Size: 675 bytes --]
severity 35486 minor
tags 35486 + patch
quit
npostavs@gmail.com writes:
> I think the kmacro-bind-to-key is important to preserve the way macro
> counters work, but it seems like we should be able to add some special
> casing to at least get something like this:
>
> (fset 'approve
> (lambda (&optional arg)
> "Keyboard macro."
> (interactive "p")
> (kmacro-exec-ring-item (quote ([?\M-x ?u ?n ?d ?i ?g ?e ?s ?t ?i ?f ?y return ?d ?d ?\C-x ?q ?d ?e ?\M-k] 0 "%d")) arg)))
Following an existing FIXME, the following patch produces
(fset 'approve
(kmacro-lambda-form [?\M-x ?u ?n ?d ?i ?g ?e ?s ?t ?i ?f ?y return ?d ?d ?\C-x ?q ?d ?e ?\M-k] 0 "%d"))
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: patch --]
[-- Type: text/x-diff, Size: 3095 bytes --]
From fe7420c67f18195aa85853dbfc6afcdf65e9d5a0 Mon Sep 17 00:00:00 2001
From: Noam Postavsky <npostavs@gmail.com>
Date: Sun, 5 May 2019 13:24:15 -0400
Subject: [PATCH] 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.
---
lisp/kmacro.el | 1 +
lisp/macros.el | 34 +++++++++++++++++++++-------------
2 files changed, 22 insertions(+), 13 deletions(-)
diff --git a/lisp/kmacro.el b/lisp/kmacro.el
index fc34e16708..01dc058614 100644
--- a/lisp/kmacro.el
+++ b/lisp/kmacro.el
@@ -776,6 +776,7 @@ (defun kmacro-end-call-mouse (event)
;; 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 ba6a840d60..4b38506d8a 100644
--- a/lisp/macros.el
+++ b/lisp/macros.el
@@ -36,6 +36,16 @@ (require 'kmacro)
;;;###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 @@ (defun insert-kbd-macro (macroname &optional keys)
(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)
--
2.11.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* bug#35486: 26.1; insert-kbd-macro now creates unreadable list code
2019-05-05 17:50 ` Noam Postavsky
@ 2019-05-12 12:07 ` Noam Postavsky
0 siblings, 0 replies; 4+ messages in thread
From: Noam Postavsky @ 2019-05-12 12:07 UTC (permalink / raw)
To: Francesco Potortì; +Cc: 35486
tags 35486 fixed
close 35486 27.1
quit
Noam Postavsky <npostavs@gmail.com> writes:
>
> Following an existing FIXME, the following patch produces
>
> (fset 'approve
> (kmacro-lambda-form [?\M-x ?u ?n ?d ?i ?g ?e ?s ?t ?i ?f ?y return ?d ?d ?\C-x ?q ?d ?e ?\M-k] 0 "%d"))
Pushed to master.
29531785a1 2019-05-12T08:05:01-04:00 "Improve printing for named keyboard macros (Bug#35486)"
https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=29531785a17acf519070b73b488ad87ddd94aff7
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-05-12 12:07 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-04-29 9:36 bug#35486: 26.1; insert-kbd-macro now creates unreadable list code Francesco Potortì
2019-04-29 21:55 ` npostavs
2019-05-05 17:50 ` Noam Postavsky
2019-05-12 12:07 ` Noam Postavsky
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.