emacs-diffs
[Top][All Lists]
Advanced

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

master 7464640d2a: Make a prefix go to the previous error


From: Lars Ingebrigtsen
Subject: master 7464640d2a: Make a prefix go to the previous error
Date: Thu, 25 Aug 2022 10:21:04 -0400 (EDT)

branch: master
commit 7464640d2ac6a0342c4134aad15ba8e96ba1a40c
Author: Lars Ingebrigtsen <larsi@gnus.org>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    Make a prefix go to the previous error
    
    * lisp/textmodes/flyspell.el (flyspell-goto-next-error): Make a
    prefix find the previous error (bug#50443).
---
 lisp/textmodes/flyspell.el | 51 +++++++++++++++++++++++++++-------------------
 1 file changed, 30 insertions(+), 21 deletions(-)

diff --git a/lisp/textmodes/flyspell.el b/lisp/textmodes/flyspell.el
index 1094ef3e93..a893bc7b9c 100644
--- a/lisp/textmodes/flyspell.el
+++ b/lisp/textmodes/flyspell.el
@@ -1714,25 +1714,32 @@ of a misspelled word removed when you've corrected it."
 ;;*---------------------------------------------------------------------*/
 ;;*    flyspell-goto-next-error ...                                     */
 ;;*---------------------------------------------------------------------*/
-(defun flyspell-goto-next-error ()
-  "Go to the next previously detected error.
+(defun flyspell-goto-next-error (&optional previous)
+  "Go to the next error.
+If PREVIOUS (interactively, the prefix), go to the previous error
+instead.
+
 In general FLYSPELL-GOTO-NEXT-ERROR must be used after
 FLYSPELL-BUFFER."
-  (interactive)
+  (interactive "P")
   (let ((pos (point))
-       (max (point-max)))
-    (if (and (eq (current-buffer) flyspell-old-buffer-error)
-            (eq pos flyspell-old-pos-error))
-       (progn
-         (if (= flyspell-old-pos-error max)
-             ;; goto beginning of buffer
+       (max (if previous (point-min) (point-max))))
+    (when (and (eq (current-buffer) flyspell-old-buffer-error)
+              (eq pos flyspell-old-pos-error))
+      (if previous
+          (if (= flyspell-old-pos-error max)
              (progn
-               (message "Restarting from beginning of buffer")
-               (goto-char (point-min)))
-           (forward-word 1))
-         (setq pos (point))))
-    ;; seek the next error
-    (while (and (< pos max)
+               (message "Restarting from end of the buffer")
+               (goto-char (point-max)))
+           (forward-word -1))
+        (if (= flyspell-old-pos-error max)
+           (progn
+             (message "Restarting from beginning of buffer")
+             (goto-char (point-min)))
+         (forward-word 1)))
+      (setq pos (point)))
+    ;; Seek the next error.
+    (while (and (/= pos max)
                (let ((ovs (overlays-at pos))
                      (r '()))
                  (while (and (not r) (consp ovs))
@@ -1740,13 +1747,15 @@ FLYSPELL-BUFFER."
                        (setq r t)
                      (setq ovs (cdr ovs))))
                  (not r)))
-      (setq pos (1+ pos)))
-    ;; save the current location for next invocation
-    (setq flyspell-old-pos-error pos)
-    (setq flyspell-old-buffer-error (current-buffer))
+      (setq pos (if previous (1- pos) (1+ pos))))
     (goto-char pos)
-    (if (= pos max)
-       (message "No more miss-spelled word!"))))
+    (when previous
+      (forward-word -1))
+    ;; Save the current location for next invocation.
+    (setq flyspell-old-pos-error (point))
+    (setq flyspell-old-buffer-error (current-buffer))
+    (when (= (point) max)
+      (message "No more miss-spelled words"))))
 
 ;;*---------------------------------------------------------------------*/
 ;;*    flyspell-overlay-p ...                                           */



reply via email to

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