[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 4cc1ee5 35/57: Allow sending selective regions from additi
From: |
Justin Burkett |
Subject: |
[elpa] master 4cc1ee5 35/57: Allow sending selective regions from additions |
Date: |
Tue, 3 Nov 2020 14:32:23 -0500 (EST) |
branch: master
commit 4cc1ee50c44e8734b9f547b85c13ba7f3cf871e2
Author: Justin Burkett <justin@burkett.cc>
Commit: Justin Burkett <justin@burkett.cc>
Allow sending selective regions from additions
---
vdiff.el | 64 +++++++++++++++++++++++++++++++++++++++++++---------------------
1 file changed, 43 insertions(+), 21 deletions(-)
diff --git a/vdiff.el b/vdiff.el
index 17011fb..7cb38d1 100644
--- a/vdiff.el
+++ b/vdiff.el
@@ -1315,7 +1315,7 @@ line above. Always search to the end of the current line
as
well. This only returns bounds for `interactive'."
(if (region-active-p)
(prog1
- (list (region-beginning) (region-end))
+ (list (region-beginning) (region-end) t)
(deactivate-mark))
(list (if (or (= (line-number-at-pos) 1)
(vdiff--overlay-at-pos
@@ -1326,9 +1326,11 @@ well. This only returns bounds for `interactive'."
(line-beginning-position)))
(save-excursion
(forward-line 1)
- (point)))))
+ (point))
+ nil)))
-(defun vdiff-send-changes (beg end &optional receive targets dont-refresh)
+(defun vdiff-send-changes
+ (beg end &optional region receive targets dont-refresh)
"Send changes in this hunk to another vdiff buffer. If the
region is active, send all changes found in the region. Otherwise
use the hunk under point or on the immediately preceding line."
@@ -1341,10 +1343,13 @@ use the hunk under point or on the immediately
preceding line."
(or targets (vdiff--target-overlays ovr t))))
(let ((pos (overlay-start (car target-ovrs))))
(with-current-buffer (overlay-buffer (car target-ovrs))
- (vdiff-send-changes pos (1+ pos) nil nil t))))
- ((memq (overlay-get ovr 'vdiff-type)
- '(change addition))
- (vdiff--transmit-change ovr targets))
+ (vdiff-send-changes pos (1+ pos) nil nil nil t))))
+ ((eq (overlay-get ovr 'vdiff-type) 'addition)
+ (vdiff--transmit-addition
+ ovr targets (when region beg) (when region end)))
+ ((eq (overlay-get ovr 'vdiff-type) 'change)
+ (vdiff--transmit-change
+ ovr targets (when region beg) (when region end)))
((eq (overlay-get ovr 'vdiff-type) 'subtraction)
(vdiff--transmit-subtraction ovr targets))))
(unless dont-refresh
@@ -1356,7 +1361,7 @@ use the hunk under point or on the immediately preceding
line."
(call-interactively 'vdiff-send-changes)
(call-interactively 'vdiff-next-hunk))
-(defun vdiff-receive-changes (beg end)
+(defun vdiff-receive-changes (beg end &optional region)
"Receive the changes corresponding to this position from
another vdiff buffer. This is equivalent to jumping to the
corresponding buffer and sending from there. If the region is
@@ -1364,7 +1369,7 @@ active, receive all corresponding changes found in the
region. Otherwise use the changes under point or on the
immediately preceding line."
(interactive (vdiff--region-or-close-overlay))
- (vdiff-send-changes beg end t nil t)
+ (vdiff-send-changes beg end nil t nil t)
(vdiff-refresh #'vdiff--scroll-function))
(defun vdiff-receive-changes-and-step ()
@@ -1373,23 +1378,40 @@ immediately preceding line."
(call-interactively 'vdiff-receive-changes)
(call-interactively 'vdiff-next-hunk))
-(defun vdiff--transmit-change (ovr &optional targets)
+(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)))
- (text (buffer-substring-no-properties
- (overlay-start ovr)
- (overlay-end 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)))
(dolist (target target-ovrs)
(with-current-buffer (overlay-buffer target)
(save-excursion
(goto-char (overlay-start target))
- ;; subtractions are one char too big on purpose
- (unless (eq (overlay-get target 'vdiff-type)
- 'subtraction)
- (delete-region (overlay-start target)
- (overlay-end target)))
+ (insert text))
+ (delete-overlay target)))
+ (delete-overlay ovr))))
+
+(defun vdiff--transmit-change (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 (overlay-start ovr))
+ (end (overlay-end ovr))
+ (text (buffer-substring-no-properties beg end)))
+ (dolist (target target-ovrs)
+ (with-current-buffer (overlay-buffer target)
+ (save-excursion
+ (goto-char (overlay-start target))
+ (delete-region (overlay-start target)
+ (overlay-end target))
(insert text))
(delete-overlay target)))
(delete-overlay ovr))))
@@ -1697,7 +1719,7 @@ buffer)."
(dolist (other-fold (overlay-get ovr 'vdiff-other-folds))
(vdiff--set-closed-fold-props other-fold)))
-(defun vdiff-open-fold (beg end)
+(defun vdiff-open-fold (beg end &optional region)
"Open folds between BEG and END, as well as corresponding ones
in other vdiff buffer. If called interactively, either open fold
at point or on prior line. If the region is active open all folds
@@ -1708,7 +1730,7 @@ in the region."
(vdiff--open-fold ovr)))
(vdiff--scroll-function))
-(defun vdiff-close-fold (beg end)
+(defun vdiff-close-fold (beg end &optional region)
"Close folds between BEG and END, as well as corresponding ones
in other vdiff buffer. If called interactively, either close fold
at point or on prior line. If the region is active close all
@@ -1719,7 +1741,7 @@ folds in the region."
(vdiff--close-fold ovr)))
(vdiff--scroll-function))
-(defun vdiff-toggle-fold (beg end)
+(defun vdiff-toggle-fold (beg end &optional region)
"Toggles folds between BEG and END, as well as corresponding
ones in other vdiff buffer. If called interactively, either
toggle fold at point or on prior line. If the region is active
- [elpa] master 3bfb5de 32/57: Truncate long lines by default, (continued)
- [elpa] master 3bfb5de 32/57: Truncate long lines by default, Justin Burkett, 2020/11/03
- [elpa] master c806fe2 36/57: Allow selective sending in change hunks, Justin Burkett, 2020/11/03
- [elpa] master 007e44b 56/57: Version 0.2.4, Justin Burkett, 2020/11/03
- [elpa] master 69eacfe 18/57: Fix and simplify final newline detection, Justin Burkett, 2020/11/03
- [elpa] master 68d6ea3 23/57: Make name of vdiff-test consistent with prefixes, Justin Burkett, 2020/11/03
- [elpa] master e3f5370 37/57: Handle case where full line is not selected in selective send, Justin Burkett, 2020/11/03
- [elpa] master 6c3731a 40/57: Fixup vdiff--transmit-change for 3way diffs, Justin Burkett, 2020/11/03
- [elpa] master ef899b8 46/57: Reset truncate-lines on cleanup, Justin Burkett, 2020/11/03
- [elpa] master c5e0cb0 47/57: Update gitignore, Justin Burkett, 2020/11/03
- [elpa] master 5b643c7 24/57: Add another send/receive test, Justin Burkett, 2020/11/03
- [elpa] master 4cc1ee5 35/57: Allow sending selective regions from additions,
Justin Burkett <=
- [elpa] master 02309fc 38/57: Retain buffer identities in line maps, Justin Burkett, 2020/11/03
- [elpa] master 71b6f40 43/57: Bound target lines in vdiff--transmit-changes, Justin Burkett, 2020/11/03
- [elpa] master 0efde18 49/57: Improve behavior with respect to region selection, Justin Burkett, 2020/11/03
- [elpa] master 185e803 57/57: Merge commit '007e44be19d068fd6b49874b6e9b8df8b1f552bd', Justin Burkett, 2020/11/03
- [elpa] master 90f4b24 52/57: Ensure char-before doesn't cause an error, Justin Burkett, 2020/11/03
- [elpa] master a1a82de 50/57: Merge pull request #25 from justbur/send-region, Justin Burkett, 2020/11/03
- [elpa] master 08437d5 48/57: Update gitignore, Justin Burkett, 2020/11/03
- [elpa] master 09e15fc 51/57: Announce selective sending of changes using the region in README, Justin Burkett, 2020/11/03
- [elpa] master 45923bb 41/57: Fix compiler warnings, Justin Burkett, 2020/11/03
- [elpa] master 745cc02 42/57: Add test for selective send, Justin Burkett, 2020/11/03