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

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

[elpa] externals/jinx b4fc5ef01e 1/2: jinx-correct: Always start from ne


From: ELPA Syncer
Subject: [elpa] externals/jinx b4fc5ef01e 1/2: jinx-correct: Always start from nearest overlay (Fix #8)
Date: Mon, 27 Mar 2023 09:58:46 -0400 (EDT)

branch: externals/jinx
commit b4fc5ef01ef85f37b785a57fe0bf0cd57869c964
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>

    jinx-correct: Always start from nearest overlay (Fix #8)
---
 jinx.el | 42 ++++++++++++++++++++++++++----------------
 1 file changed, 26 insertions(+), 16 deletions(-)

diff --git a/jinx.el b/jinx.el
index 937fae8d7a..88f2d6836d 100644
--- a/jinx.el
+++ b/jinx.el
@@ -367,8 +367,9 @@ Returns a pair of updated (START END) bounds."
 
 (defun jinx--get-overlays (start end)
   "Return misspelled words overlays between START and END."
-  (cl-loop for ov in (overlays-in start end)
-           if (eq (overlay-get ov 'category) 'jinx) collect ov))
+  (sort (cl-loop for ov in (overlays-in start end)
+                 if (eq (overlay-get ov 'category) 'jinx) collect ov)
+        (lambda (a b) (< (overlay-start a) (overlay-start b)))))
 
 (defun jinx--delete-overlays (start end)
   "Delete overlays between START and END."
@@ -594,16 +595,16 @@ Return list of overlays, see `jinx--get-overlays'."
         (insert-before-markers selected)
         (delete-region start end)))))
 
-(defun jinx--nearest-overlay ()
-  "Find nearest misspelled word."
-  (let ((overlays (or (jinx--get-overlays (window-start) (window-end))
-                      (jinx--force-overlays (window-start) (window-end))))
-        nearest)
+(defun jinx--nearest-overlay (overlays)
+  "Find nearest visible overlay from OVERLAYS."
+  (let ((pt (point)) nearest)
     (dolist (ov overlays nearest)
       (when (and (not (invisible-p (overlay-start ov)))
                  (or (not nearest)
-                     (< (abs (- (overlay-start ov) (point)))
-                        (abs (- (overlay-start nearest) (point))))))
+                     (< (min (abs (- (overlay-start ov) pt))
+                             (abs (- (overlay-end ov) pt)))
+                        (min (abs (- (overlay-start nearest) pt))
+                             (abs (- (overlay-end nearest) pt))))))
         (setq nearest ov)))))
 
 ;;;; Public commands
@@ -619,18 +620,27 @@ If predicate argument ALL is given correct all 
misspellings."
         (save-excursion
           (cl-letf (((symbol-function #'jinx--timer-handler) #'ignore)) ;; 
Inhibit
             (if all
-                (let* ((overlays
-                        (or (sort (jinx--force-overlays (point-min) 
(point-max))
-                                  (lambda (a b) (< (overlay-start a) 
(overlay-start b))))
-                            (user-error "No misspellings in whole buffer")))
-                       (count (length overlays)))
+                (let* ((overlays (or (jinx--force-overlays (point-min) 
(point-max))
+                                     (user-error "No misspellings in whole 
buffer")))
+                       (nearest (jinx--nearest-overlay overlays))
+                       (count (length overlays))
+                       before after)
+                  (dolist (ov overlays)
+                    (if (or after (eq ov nearest))
+                        (push ov after)
+                      (push ov before)))
+                  (setq overlays (nreverse (nconc before after)))
                   (cl-loop for ov in overlays for idx from 1
                            if (overlay-buffer ov) do ;; Could be already 
deleted
                            (jinx--correct ov 'recenter
                                           (format " (%d of %d, RET to skip)"
                                                   idx count))))
-              (jinx--correct (or (jinx--nearest-overlay)
-                                 (user-error "No misspelling in visible 
text")))))))
+              (jinx--correct
+               (or
+                (jinx--nearest-overlay
+                 (or (jinx--get-overlays (window-start) (window-end))
+                     (jinx--force-overlays (window-start) (window-end))))
+                (user-error "No misspelling in visible text")))))))
     (jit-lock-refontify)))
 
 ;;;###autoload



reply via email to

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