branch: externals/futur
commit 7ff405bd1a870209f9fe8476ac8f763a67f24620
Author: Stefan Monnier <[email protected]>
Commit: Stefan Monnier <[email protected]>

    Adjust to recent changes in `master`s version of `smerge-mode.el`
    
    * futur-hacks.el (smerge--refine-set-overlay-props): New function, extracted
    from `smerge--refine-prepare-regions`.
    (smerge--refine-prepare-regions): Take overlays rather than beg/end
    arguments and remove all overlay property manipulation.
    (futur--smerge-refine-regions): Create the overlays and pass them to those
    two functions.
---
 futur-hacks.el | 69 +++++++++++++++++++++++++++++-----------------------------
 1 file changed, 35 insertions(+), 34 deletions(-)

diff --git a/futur-hacks.el b/futur-hacks.el
index 93fc4185d1..de1394ded2 100644
--- a/futur-hacks.el
+++ b/futur-hacks.el
@@ -141,15 +141,22 @@ current buffer state and calls REPORT-FN when done."
   ;; FIXME: Rate-limit with `futur-concurrency-bound'.
   ;; FIXME: Check that the regions haven't changed/disappeared.
   (pcase-let*
-      ((`(,file1 ,ol1 ,file2 ,ol2)
-        (smerge--refine-prepare-regions beg1 end1 beg2 end2
-                                        preproc props-c props-r props-a)))
+      ;; Cover the two regions with one `smerge--refine-region' overlay each.
+      ((ol1 (make-overlay beg1 end1 (if (markerp beg1) (marker-buffer beg1))
+                          ;; Make it shrink rather than spread when editing.
+                          'front-advance nil))
+       (ol2 (make-overlay beg2 end2 (if (markerp beg2) (marker-buffer beg2))
+                          ;; Make it shrink rather than spread when editing.
+                          'front-advance nil))
+       (`(,file1 ,file2)
+        (smerge--refine-prepare-regions ol1 ol2 preproc)))
+    (smerge--refine-set-overlay-props ol1 ol2 props-c props-r props-a)
 
     ;; Call diff on those files.
     (futur-with-temp-buffer
       (let ((buf (current-buffer)))
         (futur-let*
-            ((exitcode
+            ((_exitcode
               <- (futur-unwind-protect
                      ;; Allow decoding the EOL format, as on MS-Windows the
                      ;; Diff utility might produce CR-LF EOLs.
@@ -184,40 +191,34 @@ current buffer state and calls REPORT-FN when done."
   (declare-function smerge--refine-highlight-change "smerge-mode")
   (declare-function smerge--refine-chopup-region "smerge-mode")
   (declare-function smerge--refine-apply-diff-1 "ext:here-or-smerge-mode")
+  (declare-function smerge--refine-set-overlay-props "ext:here-or-smerge-mode")
+
+  (unless (fboundp 'smerge--refine-set-overlay-props)
+    (defun smerge--refine-set-overlay-props (ol1 ol2 props-c props-r props-a)
+      (let ((common-props
+             (let ((props '((evaporate . t) (smerge--refine-region . t))))
+               (dolist (prop (or props-a props-c))
+                 (when (and (not (memq (car prop) '(face font-lock-face)))
+                            (member prop (or props-r props-c))
+                            (or (not (and props-c props-a props-r))
+                                (member prop props-c)))
+                   ;; This PROP is shared among all those overlays.
+                   ;; Better keep it also for the `smerge--refine-region'
+                   ;; overlays, so the client package recognizes them as
+                   ;; being part of the refinement (e.g. it will hopefully
+                   ;; delete them like the others).
+                   (push prop props)))
+               props)))
+        (dolist (prop common-props)
+          (overlay-put ol1 (car prop) (cdr prop))
+          (overlay-put ol2 (car prop) (cdr prop))))))
 
   (unless (fboundp 'smerge--refine-prepare-regions) ;; Emacs-31
-    (defun smerge--refine-prepare-regions ( beg1 end1 beg2 end2
-                                            preproc props-c props-r props-a)
+    (defun smerge--refine-prepare-regions ( ol1 ol2 preproc)
       (let* ((file1 (make-temp-file "diff1"))
              (file2 (make-temp-file "diff2"))
              (smerge--refine-long-words
-              (if smerge-refine-weight-hack (make-hash-table :test #'equal)))
-
-             ;; Cover each region with an `smerge--refine-region' overlay.
-             (ol1 (make-overlay beg1 end1
-                                (if (markerp beg1) (marker-buffer beg1))
-                                'front-advance nil))
-             (ol2 (make-overlay beg2 end2
-                                (if (markerp beg2) (marker-buffer beg2))
-                                'front-advance nil))
-             (common-props
-              (let ((props '((evaporate . t) (smerge--refine-region . t))))
-                (dolist (prop (or props-a props-c))
-                  (when (and (not (memq (car prop) '(face font-lock-face)))
-                             (member prop (or props-r props-c))
-                             (or (not (and props-c props-a props-r))
-                                 (member prop props-c)))
-                    ;; This PROP is shared among all those overlays.
-                    ;; Better keep it also for the `smerge--refine-region'
-                    ;; overlays, so the client package recognizes them as
-                    ;; being part of the refinement (e.g. it will hopefully
-                    ;; delete them like the others).
-                    (push prop props)))
-                props)))
-
-        (dolist (prop common-props)
-          (overlay-put ol1 (car prop) (cdr prop))
-          (overlay-put ol2 (car prop) (cdr prop)))
+              (if smerge-refine-weight-hack (make-hash-table :test #'equal))))
 
         (let ((write-region-inhibit-fsync t)) ; Don't fsync temp files.
           ;; Chop up regions into smaller elements and save into files.
@@ -230,7 +231,7 @@ current buffer state and calls REPORT-FN when done."
              (copy-marker (overlay-start ol2)))
            (overlay-end ol2) file2 preproc))
 
-        `(,file1 ,ol1 ,file2 ,ol2))))
+        `(,file1 ,file2))))
 
   (unless (fboundp 'smerge--refine-apply-diff) ;; Emacs-31
     (defun smerge--refine-apply-diff ( diffbuf ol1 ol2

Reply via email to