emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/evil a13a05f263: Add evil-execute-last-recorded-macro à l


From: ELPA Syncer
Subject: [nongnu] elpa/evil a13a05f263: Add evil-execute-last-recorded-macro à la nvim
Date: Mon, 17 Oct 2022 16:58:43 -0400 (EDT)

branch: elpa/evil
commit a13a05f263dd54632d4509e7cfb2bb5df556d442
Author: Tom Dalziel <tom_dl@hotmail.com>
Commit: Tom Dalziel <33435574+tomdl89@users.noreply.github.com>

    Add evil-execute-last-recorded-macro à la nvim
---
 evil-commands.el | 20 +++++++++++++++++++-
 evil-maps.el     |  1 +
 evil-tests.el    |  4 ++--
 evil-vars.el     |  5 +++++
 4 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/evil-commands.el b/evil-commands.el
index aefecc925d..b28fef461a 100644
--- a/evil-commands.el
+++ b/evil-commands.el
@@ -2447,7 +2447,8 @@ will be opened instead."
           (<= ?a register ?z)
           (<= ?A register ?Z))
       (when defining-kbd-macro (end-kbd-macro))
-      (setq evil-this-macro register)
+      (setq evil-this-macro register
+            evil-last-recorded-register register)
       (evil-set-register evil-this-macro nil)
       (kmacro-start-macro nil)
       (setq evil-macro-buffer (current-buffer)))
@@ -2504,6 +2505,23 @@ when called interactively."
        (evil-normalize-keymaps)
        (signal (car err) (cdr err)))))))
 
+(evil-define-command evil-execute-last-recorded-macro (count)
+  "Execute last recorded keyboard macro COUNT times.
+When called with a non-numerical prefix \
+\(such as \\[universal-argument]),
+COUNT is infinite."
+  :keep-visual t
+  :suppress-operator t
+  (interactive
+   (list (cond
+          ((and current-prefix-arg (numberp current-prefix-arg)) 
current-prefix-arg)
+          (current-prefix-arg 0)
+          (t 1))))
+  (if evil-last-recorded-register
+      (evil-execute-macro count (evil-get-register evil-last-recorded-register 
t))
+    (user-error "No previous macro"))
+  (setq evil-last-register evil-last-recorded-register))
+
 ;;; Visual commands
 
 (evil-define-motion evil-visual-restore ()
diff --git a/evil-maps.el b/evil-maps.el
index 443fce1741..4c4d141e76 100644
--- a/evil-maps.el
+++ b/evil-maps.el
@@ -52,6 +52,7 @@
 (define-key evil-normal-state-map "p" 'evil-paste-after)
 (define-key evil-normal-state-map "P" 'evil-paste-before)
 (define-key evil-normal-state-map "q" 'evil-record-macro)
+(define-key evil-normal-state-map "Q" 'evil-execute-last-recorded-macro)
 (define-key evil-normal-state-map "r" 'evil-replace)
 (define-key evil-normal-state-map "R" 'evil-enter-replace-state)
 (define-key evil-normal-state-map "s" 'evil-substitute)
diff --git a/evil-tests.el b/evil-tests.el
index 88667d3983..388d5be699 100644
--- a/evil-tests.el
+++ b/evil-tests.el
@@ -370,11 +370,11 @@ with `M-x evil-tests-run'"))
 suppression keymap comes first")
       (setq evil-operator-state-minor-mode nil
             evil-operator-state-local-minor-mode nil))
-    (should (eq (key-binding "Q") #'undefined))
+    (should (eq (key-binding "£") #'undefined))
     (ert-info ("Don't insert text")
       ;; may or may not signal an error, depending on batch mode
       (condition-case nil
-          (execute-kbd-macro "QQQ")
+          (execute-kbd-macro "£££")
         (error nil))
       (should (string= (buffer-substring 1 4) ";; ")))))
 
diff --git a/evil-vars.el b/evil-vars.el
index 036faa50b8..9655799238 100644
--- a/evil-vars.el
+++ b/evil-vars.el
@@ -1489,9 +1489,14 @@ type.")
 (evil-define-local-var evil-this-motion-count nil
   "Current motion count.")
 
+;; In light of `evil-last-recorded-register' this should probably
+;; be renamed to `evil-last-executed-register' but that may break configs
 (defvar evil-last-register nil
   "The last executed register.")
 
+(defvar evil-last-recorded-register nil
+  "The last recorded register.")
+
 (defvar evil-inhibit-operator nil
   "Inhibit current operator.
 If an operator calls a motion and the motion sets this variable



reply via email to

[Prev in Thread] Current Thread [Next in Thread]