* 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.