branch: elpa/evil
commit 2a0f8d8a83a57311c62e0597ace6992aa5992f12
Author: Axel Forsman <[email protected]>
Commit: Axel Forsman <[email protected]>

    Remove evil-repeat-start-hook
    
    It was a no-op since (evil-repeat-type this-command t) does not
    returns t, and otherwise the call to evil-repeat-start would overwrite
    changes done by (funcall repeat-type 'pre) in evil-repeat-pre-hook.
---
 evil-macros.el |  2 +-
 evil-repeat.el | 68 +++++++++++++++++++++++++++++-----------------------------
 evil-states.el | 25 +++++++--------------
 evil-tests.el  |  9 ++++----
 evil-vars.el   | 13 ++---------
 5 files changed, 49 insertions(+), 68 deletions(-)

diff --git a/evil-macros.el b/evil-macros.el
index 9e7d2f34c4..ebc188e0c4 100644
--- a/evil-macros.el
+++ b/evil-macros.el
@@ -58,7 +58,7 @@ The return value is a list (BEG END TYPE)."
                   (evil-this-type
                    (or type (evil-get-command-property motion :type 
'exclusive))))
               (condition-case err
-                  (let ((repeat-type (evil-repeat-type motion t)))
+                  (let ((repeat-type (evil--repeat-type motion)))
                     (when (functionp repeat-type) (funcall repeat-type 'pre))
                     (unless (with-local-quit
                               (setq range (call-interactively motion))
diff --git a/evil-repeat.el b/evil-repeat.el
index edc6db1e44..b9141fb5b4 100644
--- a/evil-repeat.el
+++ b/evil-repeat.el
@@ -122,12 +122,6 @@
 
 (require 'evil-states)
 
-(declare-function evil-visual-state-p "evil-visual")
-(declare-function evil-visual-range "evil-visual")
-(declare-function evil-visual-char "evil-visual")
-(declare-function evil-visual-line "evil-visual")
-(declare-function evil-visual-block "evil-visual")
-
 (defmacro evil-without-repeat (&rest body)
   (declare (indent defun)
            (debug t))
@@ -173,8 +167,7 @@ Update `evil-repeat-ring' with the accumulated changes
 in `evil-repeat-info' and clear variables."
   (unwind-protect
       (when (evil-repeat-recording-p)
-        (setq evil-repeat-info
-              (evil-normalize-repeat-info evil-repeat-info))
+        (setq evil-repeat-info (evil-normalize-repeat-info evil-repeat-info))
         (when (and evil-repeat-info evil-repeat-ring)
           (ring-insert evil-repeat-ring evil-repeat-info)))
     (evil-repeat-reset nil)))
@@ -224,43 +217,51 @@ buffer is known and different from the current buffer."
        (not (minibufferp))
        (not (eq (current-buffer) evil-repeat-buffer))))
 
+(defvar evil-repeat-types
+  '((t . evil-repeat-keystrokes)
+    (change . evil-repeat-changes)
+    (motion . evil-repeat-motion)
+    (insert-at-point . evil-repeat-insert-at-point)
+    (ignore . nil))
+  "Alist of defined repeat-types.")
+
+(defun evil--repeat-type (command)
+  "Return the :repeat property of COMMAND."
+  (when (functionp command) ; ignore keyboard macros
+    (let* ((type (evil-get-command-property command :repeat t))
+           (repeat-type (assq type evil-repeat-types)))
+      (if repeat-type (cdr repeat-type) type))))
+
 (defun evil-repeat-type (command &optional default)
   "Return the :repeat property of COMMAND.
 If COMMAND doesn't have this property, return DEFAULT."
+  (declare (obsolete evil--repeat-type "1.15.0"))
   (when (functionp command) ; ignore keyboard macros
     (let* ((type (evil-get-command-property command :repeat default))
            (repeat-type (assq type evil-repeat-types)))
       (if repeat-type (cdr repeat-type) type))))
 
 (defun evil-repeat-force-abort-p (repeat-type)
-  "Return non-nil iff the current command should abort the recording of repeat 
information."
-  (or (evil-repeat-different-buffer-p)           ; ... buffer changed
-      (eq repeat-type 'abort)                    ; ... explicitely forced
-      (eq evil-recording-repeat 'abort)          ; ... already aborted
-      (evil-emacs-state-p)                       ; ... in Emacs state
-      (and (evil-mouse-events-p (this-command-keys))  ; ... mouse events
+  "Return non-nil if the current command should abort the recording of repeat 
info."
+  (or (evil-repeat-different-buffer-p)  ; ... buffer changed
+      (eq repeat-type 'abort)           ; ... explicitely forced
+      (eq evil-recording-repeat 'abort) ; ... already aborted
+      (evil-emacs-state-p)              ; ... in Emacs state
+      (and (evil-mouse-events-p         ; ... mouse events
+            (this-command-keys-vector))
            (eq repeat-type nil))
-      (minibufferp)))                            ; ... minibuffer activated
+      (minibufferp)))                   ; ... minibuffer activated
 
 (defun evil-repeat-record (info)
-  "Add INFO to the end of `evil-repeat-info'."
+  "Append INFO to `evil-repeat-info'."
   (when (evil-repeat-recording-p)
     (setq evil-repeat-info (nconc evil-repeat-info (list info)))))
 
-;; called from `evil-normal-state-exit-hook'
-(defun evil-repeat-start-hook ()
-  "Record a new repeat when exiting Normal state.
-Does not record in Emacs state or if the current command
-has :repeat nil."
-  (when (and (eq (evil-repeat-type this-command t) t)
-             (not (evil-emacs-state-p)))
-    (evil-repeat-start)))
-
 ;; called from `pre-command-hook'
 (defun evil-repeat-pre-hook ()
   "Prepare the current command for recording the repeation."
   (when evil-local-mode
-    (let ((repeat-type (evil-repeat-type this-command t)))
+    (let ((repeat-type (evil--repeat-type this-command)))
       (cond
        ;; abort the repeat
        ((evil-repeat-force-abort-p repeat-type)
@@ -270,7 +271,7 @@ has :repeat nil."
         (evil-repeat-abort))
        ;; ignore those commands completely
        ((or (null repeat-type)
-            (evil-mouse-events-p (this-command-keys))))
+            (evil-mouse-events-p (this-command-keys-vector))))
        ;; record command
        (t
         ;; In normal-state or visual state, each command is a single
@@ -286,7 +287,7 @@ has :repeat nil."
 (defun evil-repeat-post-hook ()
   "Finish recording of repeat-information for the current-command."
   (when (and evil-local-mode evil-recording-repeat)
-    (let ((repeat-type (evil-repeat-type this-command t)))
+    (let ((repeat-type (evil--repeat-type this-command)))
       (cond
        ;; abort the repeat
        ((evil-repeat-force-abort-p repeat-type)
@@ -358,7 +359,7 @@ Motions are recorded by keystroke but only in Insert state."
 ;; called from the `after-change-functions' hook
 (defun evil-repeat-change-hook (beg end length)
   "Record change information for current command."
-  (let ((repeat-type (evil-repeat-type this-command t)))
+  (let ((repeat-type (evil--repeat-type this-command)))
     (when (and (evil-repeat-recording-p)
                (eq repeat-type 'evil-repeat-changes)
                (not (evil-emacs-state-p))
@@ -375,8 +376,7 @@ Motions are recorded by keystroke but only in Insert state."
   "Record the current buffer changes during a repeat.
 If CHANGE is specified, it is added to `evil-repeat-changes'."
   (when (evil-repeat-recording-p)
-    (setq evil-repeat-changes
-          (nconc evil-repeat-changes (list (list relpos ins ndel))))))
+    (push (list relpos ins ndel) evil-repeat-changes)))
 
 (defun evil-repeat-start-record-changes ()
   "Start the recording of a new set of buffer changes."
@@ -387,7 +387,7 @@ If CHANGE is specified, it is added to 
`evil-repeat-changes'."
   "Finish the recording of buffer changes and record them as repeat."
   (when (evil-repeat-recording-p)
     (evil-repeat-record `(evil-execute-change
-                          ,evil-repeat-changes
+                          ,(nreverse evil-repeat-changes)
                           ,(- (point) evil-repeat-pos)))
     (setq evil-repeat-changes nil)))
 
@@ -402,7 +402,7 @@ inserts some text in a buffer between (point) and (mark)."
     (remove-hook 'after-change-functions #'evil-repeat-insert-at-point-hook 
t))))
 
 (defun evil-repeat-insert-at-point-hook (beg end _length)
-  (let ((repeat-type (evil-repeat-type this-command t)))
+  (let ((repeat-type (evil--repeat-type this-command)))
     (when (and (evil-repeat-recording-p)
                (eq repeat-type 'evil-repeat-insert-at-point)
                (not (evil-emacs-state-p))
@@ -628,7 +628,7 @@ If COUNT is negative, this is a more recent kill."
   "Record `this-command-keys' before it is overwritten."
   (when (and (evil-repeat-recording-p)
              evil-recording-current-command)
-    (let ((repeat-type (evil-repeat-type this-command t)))
+    (let ((repeat-type (evil--repeat-type this-command)))
       (when (functionp repeat-type)
         (funcall repeat-type 'pre-read-key-sequence)))))
 
diff --git a/evil-states.el b/evil-states.el
index abade4c6df..9c824ab592 100644
--- a/evil-states.el
+++ b/evil-states.el
@@ -25,10 +25,10 @@
 ;; You should have received a copy of the GNU General Public License
 ;; along with Evil.  If not, see <http://www.gnu.org/licenses/>.
 
-(require 'evil-core)
-
 ;;; Code:
 
+(require 'evil-core)
+
 ;;; Normal state
 
 (evil-define-state normal
@@ -36,7 +36,6 @@
 AKA \"Command\" state."
   :tag " <N> "
   :enable (motion)
-  :exit-hook (evil-repeat-start-hook)
   (cond
    ((evil-normal-state-p)
     (overwrite-mode -1)
@@ -139,6 +138,7 @@ commands opening a new line."
   (remove-hook 'pre-command-hook #'evil-insert-repeat-hook))
 (put 'evil-insert-repeat-hook 'permanent-local-hook t)
 
+(declare-function evil-execute-repeat-info "evil-repeat")
 (defun evil-cleanup-insert-state ()
   "Called when Insert or Replace state is about to be exited.
 Handles the repeat-count of the insertion command."
@@ -148,22 +148,15 @@ Handles the repeat-count of the insertion command."
         (evil-insert-newline-below)
         (when evil-auto-indent
           (indent-according-to-mode)))
-      (when (fboundp 'evil-execute-repeat-info)
-        (evil-execute-repeat-info
-         (cdr evil-insert-repeat-info)))))
+      (evil-execute-repeat-info (cdr evil-insert-repeat-info))))
   (when evil-insert-vcount
     (let ((buffer-invisibility-spec buffer-invisibility-spec))
       ;; make all lines hidden by hideshow temporarily visible
       (when (listp buffer-invisibility-spec)
         (setq buffer-invisibility-spec
-              (evil-filter-list
-               #'(lambda (x)
-                   (or (eq x 'hs)
-                       (eq (car-safe x) 'hs)))
-               buffer-invisibility-spec)))
-      (let ((line (nth 0 evil-insert-vcount))
-            (col (nth 1 evil-insert-vcount))
-            (vcount (nth 2 evil-insert-vcount)))
+              (cl-remove-if (lambda (x) (eq (or (car-safe x) x) 'hs))
+                            buffer-invisibility-spec)))
+      (cl-destructuring-bind (line col vcount) evil-insert-vcount
         (save-excursion
           (dotimes (v (1- vcount))
             (goto-char (point-min))
@@ -177,9 +170,7 @@ Handles the repeat-count of the insertion command."
                   (move-to-column col t)
                 (funcall col))
               (dotimes (_ (or evil-insert-count 1))
-                (when (fboundp 'evil-execute-repeat-info)
-                  (evil-execute-repeat-info
-                   (cdr evil-insert-repeat-info)))))))))))
+                (evil-execute-repeat-info (cdr 
evil-insert-repeat-info))))))))))
 
 ;;; Visual state
 
diff --git a/evil-tests.el b/evil-tests.el
index 9e8f8589ec..ad0df81869 100644
--- a/evil-tests.el
+++ b/evil-tests.el
@@ -8286,14 +8286,13 @@ maybe we need one line more with some text\n"
           "alpha bravo alpha charlie [a]lpha")))))
 
 (ert-deftest evil-test-ex-search-motion ()
+  "Test that Ex forward search, as a motion, can be repeated."
   :tags '(evil ex search)
   (evil-without-display
     (evil-select-search-module 'evil-search-module 'evil-search)
-    (ert-info ("Ex forward search, as a motion, can be repeated")
-      (evil-test-buffer
-        "alpha [b]ravo charlie delta golf hotel charlie india"
-        ("c/charlie" [return] "replacement " [escape] "4w.")
-        "alpha replacement charlie delta golf replacement[ ]charlie india"))))
+    (evil-test-buffer "alpha [b]ravo charlie delta golf hotel charlie india"
+      ("c/charlie" [return] "replacement " [escape] "4w.")
+      "alpha replacement charlie delta golf replacement[ ]charlie india")))
 
 (ert-deftest evil-test-ex-search-next+previous-match ()
   :tags '(evil ex search)
diff --git a/evil-vars.el b/evil-vars.el
index 8744246530..2d8532a165 100644
--- a/evil-vars.el
+++ b/evil-vars.el
@@ -1570,14 +1570,6 @@ character argument for some commands, e.g. 
`evil-replace'.")
 (defvar evil-repeat-ring (make-ring 10)
   "A ring of repeat-informations to repeat the last command.")
 
-(defvar evil-repeat-types
-  '((t . evil-repeat-keystrokes)
-    (change . evil-repeat-changes)
-    (motion . evil-repeat-motion)
-    (insert-at-point . evil-repeat-insert-at-point)
-    (ignore . nil))
-  "An alist of defined repeat-types.")
-
 (defvar evil-recording-repeat nil
   "Whether we are recording a repeat.")
 
@@ -1585,7 +1577,7 @@ character argument for some commands, e.g. 
`evil-replace'.")
   "Whether we are recording the current command for repeat.")
 
 (defvar evil-repeat-changes nil
-  "Accumulated buffer changes for changed-based commands.")
+  "Accumulated buffer changes in reverse order for change-tracking commands.")
 
 (defvar evil-repeat-info nil
   "Information accumulated during current repeat.")
@@ -1595,8 +1587,7 @@ character argument for some commands, e.g. 
`evil-replace'.")
 If the buffer is changed, the repeat is cancelled.")
 
 (defvar evil-repeat-pos nil
-  "The position of point at the beginning of an change-tracking
-  editing command.")
+  "The point position at the start of a change-tracking command.")
 
 (defvar evil-repeat-keys nil
   "The keys that invoked the current command.")

Reply via email to