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

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

[elpa] master e3f5370 37/57: Handle case where full line is not selected


From: Justin Burkett
Subject: [elpa] master e3f5370 37/57: Handle case where full line is not selected in selective send
Date: Tue, 3 Nov 2020 14:32:23 -0500 (EST)

branch: master
commit e3f5370d7b32dabf44f5ceb2d169e75feb17043b
Author: Justin Burkett <justin@burkett.cc>
Commit: Justin Burkett <justin@burkett.cc>

    Handle case where full line is not selected in selective send
---
 vdiff.el | 47 ++++++++++++++++++++++++++++++++---------------
 1 file changed, 32 insertions(+), 15 deletions(-)

diff --git a/vdiff.el b/vdiff.el
index 07bdc69..bb7c7bb 100644
--- a/vdiff.el
+++ b/vdiff.el
@@ -1378,18 +1378,35 @@ immediately preceding line."
   (call-interactively 'vdiff-receive-changes)
   (call-interactively 'vdiff-next-hunk))
 
+(defun vdiff--maybe-beginning-of-line (beg)
+  (when (number-or-marker-p beg)
+    (save-excursion
+      (goto-char beg)
+      (line-beginning-position))))
+
+(defun vdiff--maybe-end-of-line (end)
+  (when (number-or-marker-p end)
+    (save-excursion
+      (goto-char end)
+      (unless (= (char-before) ?\n)
+        (forward-line))
+      (point))))
+
 (defun vdiff--transmit-addition (ovr &optional targets beg end)
   "Send text in OVR to corresponding overlay in other buffer."
   (if (not (overlayp ovr))
       (message "No change found")
     (let* ((target-ovrs (or targets (vdiff--target-overlays ovr)))
-           (beg (if (numberp beg)
-                    (max beg (overlay-start ovr))
-                  (overlay-start ovr)))
-           (end (if (numberp end)
-                    (min end (overlay-end ovr))
-                  (overlay-end ovr)))
-           (text (buffer-substring-no-properties beg end)))
+           ;; Expand to full line
+           (beg (vdiff--maybe-beginning-of-line beg))
+           (end (vdiff--maybe-end-of-line end))
+           (text (buffer-substring-no-properties
+                  (if beg
+                      (max beg (overlay-start ovr))
+                    (overlay-start ovr))
+                  (if end
+                      (min end (overlay-end ovr))
+                    (overlay-end ovr)))))
       (dolist (target target-ovrs)
         (with-current-buffer (overlay-buffer target)
           (save-excursion
@@ -1403,15 +1420,15 @@ immediately preceding line."
   (if (not (overlayp ovr))
       (message "No change found")
     (let* ((target-ovrs (or targets (vdiff--target-overlays ovr)))
-           (beg (and (numberp beg) beg))
-           (end (and (numberp end) end))
-           (this-beg (if beg
-                         (max beg (overlay-start ovr))
-                       (overlay-start ovr)))
-           (this-end (if end
+           (beg (vdiff--maybe-beginning-of-line beg))
+           (end (vdiff--maybe-end-of-line end))
+           (text (buffer-substring-no-properties
+                  (if beg
+                      (max beg (overlay-start ovr))
+                    (overlay-start ovr))
+                  (if end
                          (min end (overlay-end ovr))
-                       (overlay-end ovr)))
-           (text (buffer-substring-no-properties this-beg this-end))
+                       (overlay-end ovr))))
            (target-beg-line
             (when beg
               (caar (vdiff--translate-line (line-number-at-pos beg)))))



reply via email to

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