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

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

[elpa] scratch/add-vdiff 2847cd6 183/258: Add callback support on quit


From: Justin Burkett
Subject: [elpa] scratch/add-vdiff 2847cd6 183/258: Add callback support on quit
Date: Wed, 17 May 2017 08:13:47 -0400 (EDT)

branch: scratch/add-vdiff
commit 2847cd66c8d1573b321818e2d3f73f6def296deb
Author: justbur <address@hidden>
Commit: justbur <address@hidden>

    Add callback support on quit
---
 vdiff.el | 54 ++++++++++++++++++++++++++++++++++++------------------
 1 file changed, 36 insertions(+), 18 deletions(-)

diff --git a/vdiff.el b/vdiff.el
index 2f15b17..3bcc2f1 100644
--- a/vdiff.el
+++ b/vdiff.el
@@ -222,7 +222,9 @@ because those are handled differently.")
   ;; other
   window-config
   case-args
-  whitespace-args)
+  whitespace-args
+  ;; Quit hook
+  on-quit)
 
 
 ;; * Utilities
@@ -1533,20 +1535,25 @@ with non-nil USE-FOLDS."
         (setq n (1+ n)))
       (format "%s<%d>" name n))))
 
-(defun vdiff--init-session (buffer-a buffer-b &optional buffer-c)
+(defun vdiff--init-session (buffer-a buffer-b &optional buffer-c on-quit)
   (make-vdiff-session
    :buffers (vdiff--non-nil-list buffer-a buffer-b buffer-c)
    :process-buffer (vdiff--unique-buffer-name " *vdiff* ")
    :word-diff-output-buffer (vdiff--unique-buffer-name " *vdiff-word* ")
    :case-args ""
-   :whitespace-args ""))
+   :whitespace-args ""
+   :on-quit on-quit))
 
 ;; * Entry points
 
 ;;;###autoload
-(defun vdiff-files (file-a file-b &optional horizontal)
+(defun vdiff-files (file-a file-b &optional horizontal on-quit)
   "Start a vdiff session. If called interactively, you will be
-asked to select two files."
+asked to select two files. HORIZONTAL adjusts the buffer's
+initial layout. A prefix argument can be used to set this
+variable interactively. ON-QUIT is a function to run on exiting
+the vdiff session. It is called with the two vdiff buffers as
+arguments."
   (interactive
    (let* ((file-a (read-file-name "File 1: "))
           (default-directory
@@ -1559,12 +1566,16 @@ asked to select two files."
       current-prefix-arg)))
   (vdiff-buffers (find-file-noselect file-a)
                  (find-file-noselect file-b)
-                 horizontal))
+                 horizontal on-quit))
 
 ;;;###autoload
-(defun vdiff-buffers (buffer-a buffer-b &optional horizontal)
+(defun vdiff-buffers (buffer-a buffer-b &optional horizontal on-quit)
   "Start a vdiff session. If called interactively, you will be
-asked to select two buffers."
+asked to select two buffers. HORIZONTAL adjusts the buffer's
+initial layout. A prefix argument can be used to set this
+variable interactively. ON-QUIT is a function to run on exiting
+the vdiff session. It is called with the two vdiff buffers as
+arguments."
   (interactive
    (let* ((buffer-a
            (get-buffer
@@ -1585,7 +1596,7 @@ asked to select two buffers."
       (split-window-horizontally))
     (switch-to-buffer-other-window buffer-b))
   (setq vdiff--temp-session
-        (vdiff--init-session buffer-a buffer-b))
+        (vdiff--init-session buffer-a buffer-b nil on-quit))
   (dolist (buf (list buffer-a buffer-b))
     (with-current-buffer buf
       (vdiff-mode -1)
@@ -1606,9 +1617,11 @@ asked to select two buffers."
   (set-window-buffer (split-window-horizontally) buffer-b))
 
 ;;;###autoload
-(defun vdiff-buffers3 (buffer-a buffer-b buffer-c)
+(defun vdiff-buffers3 (buffer-a buffer-b buffer-c &optional on-quit)
   "Start a vdiff session. If called interactively, you will be
-asked to select two buffers."
+asked to select two buffers. ON-QUIT is a function to run on
+exiting the vdiff session. It is called with the three vdiff
+buffers as arguments."
   (interactive
    (let* ((buffer-a
            (get-buffer
@@ -1627,7 +1640,7 @@ asked to select two buffers."
      (list buffer-a buffer-b buffer-c)))
   (funcall vdiff-3way-layout-function buffer-a buffer-b buffer-c)
   (setq vdiff--temp-session
-        (vdiff--init-session buffer-a buffer-b buffer-c))
+        (vdiff--init-session buffer-a buffer-b buffer-c on-quit))
   (dolist (buf (list buffer-a buffer-b buffer-c))
     (with-current-buffer buf
       (vdiff-mode -1)
@@ -1637,7 +1650,7 @@ asked to select two buffers."
   (vdiff-sync-and-center))
 
 ;;;###autoload
-(defun vdiff-files3 (file-a file-b file-c)
+(defun vdiff-files3 (file-a file-b file-c &optional on-quit)
   "Start a vdiff session with 3 files. If called interactively,
 you will be asked to select two files."
   (interactive
@@ -1663,11 +1676,16 @@ you will be asked to select two files."
 (defun vdiff-quit ()
   "Quit `vdiff-mode' and clean up."
   (interactive)
-  (dolist (buf (vdiff-session-buffers vdiff--session))
-    (with-current-buffer buf
-      (vdiff-mode -1)))
-  (run-hooks 'vdiff-quit-hook)
-  (message "vdiff exited"))
+  (if (null vdiff--session)
+      (user-error "Not in a vdiff buffer")
+    (when (functionp (vdiff-session-on-quit vdiff--session))
+      (apply (vdiff-session-on-quit vdiff--session)
+             (vdiff-session-buffers vdiff--session)))
+    (dolist (buf (vdiff-session-buffers vdiff--session))
+      (with-current-buffer buf
+        (vdiff-mode -1)))
+    (run-hooks 'vdiff-quit-hook)
+    (message "vdiff exited")))
 
 (defvar vdiff-mode-map
   (let ((map (make-sparse-keymap)))



reply via email to

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