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

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

[elpa] master 6878093 33/57: Add vdiff-toggle-fold and vdiff-toggle-all-


From: Justin Burkett
Subject: [elpa] master 6878093 33/57: Add vdiff-toggle-fold and vdiff-toggle-all-folds
Date: Tue, 3 Nov 2020 14:32:23 -0500 (EST)

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

    Add vdiff-toggle-fold and vdiff-toggle-all-folds
    
    Fixes #22
---
 vdiff.el | 40 +++++++++++++++++++++++++++++++++-------
 1 file changed, 33 insertions(+), 7 deletions(-)

diff --git a/vdiff.el b/vdiff.el
index 4ac2bc0..d528d15 100644
--- a/vdiff.el
+++ b/vdiff.el
@@ -1684,6 +1684,19 @@ buffer)."
   (overlay-put ovr 'intangible t)
   (overlay-put ovr 'display (overlay-get ovr 'vdiff-fold-text)))
 
+(defun vdiff--open-fold (ovr)
+  "Opens fold overlay OVR."
+  (vdiff--set-open-fold-props ovr)
+  (dolist (other-fold (overlay-get ovr 'vdiff-other-folds))
+    (vdiff--set-open-fold-props other-fold)))
+
+(defun vdiff--close-fold (ovr)
+  "Closes fold overlay OVR."
+  (setf (vdiff-session-all-folds-open vdiff--session) nil)
+  (vdiff--set-closed-fold-props ovr)
+  (dolist (other-fold (overlay-get ovr 'vdiff-other-folds))
+    (vdiff--set-closed-fold-props other-fold)))
+
 (defun vdiff-open-fold (beg end)
   "Open folds between BEG and END, as well as corresponding ones
 in other vdiff buffer. If called interactively, either open fold
@@ -1692,9 +1705,7 @@ in the region."
   (interactive (vdiff--region-or-close-overlay))
   (dolist (ovr (overlays-in beg end))
     (when (eq (overlay-get ovr 'vdiff-type) 'fold)
-      (vdiff--set-open-fold-props ovr)
-      (dolist (other-fold (overlay-get ovr 'vdiff-other-folds))
-        (vdiff--set-open-fold-props other-fold))))
+      (vdiff--open-fold ovr)))
   (vdiff--scroll-function))
 
 (defun vdiff-close-fold (beg end)
@@ -1705,12 +1716,21 @@ folds in the region."
   (interactive (vdiff--region-or-close-overlay))
   (dolist (ovr (overlays-in beg end))
     (when (eq (overlay-get ovr 'vdiff-type) 'fold)
-      (setf (vdiff-session-all-folds-open vdiff--session) nil)
-      (vdiff--set-closed-fold-props ovr)
-      (dolist (other-fold (overlay-get ovr 'vdiff-other-folds))
-        (vdiff--set-closed-fold-props other-fold))))
+      (vdiff--close-fold ovr)))
   (vdiff--scroll-function))
 
+(defun vdiff-toggle-fold (beg end)
+  "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
+toggle all folds in region."
+  (interactive (vdiff--region-or-close-overlay))
+  (dolist (ovr (overlays-in beg end))
+    (when (eq (overlay-get ovr 'vdiff-type) 'fold)
+      (if (overlay-get ovr 'vdiff-fold-open)
+          (vdiff--close-fold ovr)
+        (vdiff--open-fold ovr)))))
+
 (defun vdiff-open-all-folds ()
   "Open all folds in both buffers"
   (interactive)
@@ -1736,6 +1756,12 @@ folds in the region."
       (dolist (other-fold (overlay-get ovr 'vdiff-other-folds))
         (vdiff--set-closed-fold-props other-fold)))))
 
+(defun vdiff-toggle-all-folds ()
+  "Toggle all folds in both buffers"
+  (interactive)
+  (save-excursion
+    (vdiff-toggle-fold (point-min) (point-max))))
+
 ;; * Movement
 
 (defun vdiff--nth-hunk (&optional n use-folds)



reply via email to

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