]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix insertion of keyboard macro containing named keys
authorRobert Pluim <rpluim@gmail.com>
Fri, 24 Feb 2023 10:12:24 +0000 (11:12 +0100)
committerRobert Pluim <rpluim@gmail.com>
Fri, 24 Feb 2023 10:43:08 +0000 (11:43 +0100)
* lisp/kmacro.el: Autoload `macro--string-to-vector'.
(kmacro-ring-head): Convert `last-kbd-macro' to a vector if it's a
string, since `kmacro' uses `key-parse' on it.
(kmacro-lambda-form): Remove require for 'macros
* test/lisp/kmacro-tests.el
(kmacro-tests-name-last-macro-key-parse-syntax):
Test that insertion of macros that contain strings that look
like named keys works correctly.

(Bug#61700)

lisp/kmacro.el
test/lisp/kmacro-tests.el

index 94d8794bd235d36adc2f003079a8b26d87f1dcdc..aec4b805474a064bff8b427094e895743380f14a 100644 (file)
@@ -377,10 +377,14 @@ and `kmacro-counter-format'.")
 (defvar kmacro-view-item-no 0)
 
 
+(autoload 'macro--string-to-vector "macros")
 (defun kmacro-ring-head ()
   "Return pseudo head element in macro ring."
   (and last-kbd-macro
-       (kmacro last-kbd-macro kmacro-counter kmacro-counter-format-start)))
+       (kmacro (if (stringp last-kbd-macro)
+                   (macro--string-to-vector last-kbd-macro)
+                 last-kbd-macro)
+               kmacro-counter kmacro-counter-format-start)))
 
 
 (defun kmacro-push-ring (&optional elt)
@@ -841,8 +845,6 @@ KEYS should be a vector or a string that obeys `key-valid-p'."
       (setq mac     (nth 0 mac)))
     (when (stringp mac)
       ;; `kmacro' interprets a string according to `key-parse'.
-      (require 'macros)
-      (declare-function macro--string-to-vector "macros")
       (setq mac (macro--string-to-vector mac)))
     (kmacro mac counter format)))
 
index 551fd8b60fc31567914226c76a0bbf990847ad66..a325220e8d94a4702a8cf34c201b6633216ca04d 100644 (file)
@@ -614,6 +614,20 @@ This is a regression test for: Bug#3412, Bug#11817."
   (kmacro-tests-should-insert "bb"
     (kmacro-tests-simulate-command '(kmacro-tests-symbol-for-test))))
 
+;; Bug#61700 inserting named macro when the definition contains things
+;; that `key-parse' thinks are named keys
+(kmacro-tests-deftest kmacro-tests-name-last-macro-key-parse-syntax ()
+  "Name last macro can rebind a symbol it binds."
+  ;; Make sure our symbol is unbound.
+  (when (fboundp 'kmacro-tests-symbol-for-test)
+    (fmakunbound 'kmacro-tests-symbol-for-test))
+  (setplist 'kmacro-tests-symbol-for-test nil)
+  (kmacro-tests-define-macro "<b> hello </>")
+  (kmacro-name-last-macro 'kmacro-tests-symbol-for-test)
+  ;; Now run the function bound to the symbol.
+  (kmacro-tests-should-insert "<b> hello </>"
+    (kmacro-tests-simulate-command '(kmacro-tests-symbol-for-test))))
+
 (kmacro-tests-deftest kmacro-tests-store-in-register ()
   "Macro can be stored in and retrieved from a register."
   (use-local-map kmacro-tests-keymap)