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

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

[elpa] scratch/add-vdiff 7c87360 244/258: vdiff: Add vdiff-current-file


From: Justin Burkett
Subject: [elpa] scratch/add-vdiff 7c87360 244/258: vdiff: Add vdiff-current-file
Date: Wed, 17 May 2017 08:14:01 -0400 (EDT)

branch: scratch/add-vdiff
commit 7c87360194dd171674c5ecdddc9466beba5268ef
Author: Justin Burkett <address@hidden>
Commit: Justin Burkett <address@hidden>

    vdiff: Add vdiff-current-file
---
 vdiff.el | 43 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/vdiff.el b/vdiff.el
index 9761aeb..4607274 100644
--- a/vdiff.el
+++ b/vdiff.el
@@ -1755,6 +1755,49 @@ you will be asked to select two files."
                   (find-file-noselect file-c)
                   on-quit))
 
+;;;###autoload
+(defun vdiff-current-file ()
+  "Start vdiff between current buffer and its file on disk.
+This command can be used instead of `revert-buffer'.  If there is
+nothing to revert then this command fails."
+  (interactive)
+  ;; Taken from `ediff-current-file'
+  (unless (or (not (eq revert-buffer-function 'revert-buffer--default))
+              (not (eq revert-buffer-insert-file-contents-function
+               'revert-buffer-insert-file-contents--default-function))
+              (and buffer-file-number
+                   (or (buffer-modified-p)
+                       (not (verify-visited-file-modtime
+                             (current-buffer))))))
+    (error "Nothing to revert"))
+  (let* ((auto-save-p (and (recent-auto-save-p)
+                           buffer-auto-save-file-name
+                           (file-readable-p buffer-auto-save-file-name)
+                           (y-or-n-p
+                            "Buffer has been auto-saved recently.  Compare 
with auto-save file? ")))
+         (file-name (if auto-save-p
+                        buffer-auto-save-file-name
+                      buffer-file-name))
+         (revert-buf-name (concat "FILE=" file-name))
+         (revert-buf (get-buffer revert-buf-name))
+         (current-major major-mode))
+    (unless file-name
+      (error "Buffer does not seem to be associated with any file"))
+    (when revert-buf
+      (kill-buffer revert-buf)
+      (setq revert-buf nil))
+    (setq revert-buf (get-buffer-create revert-buf-name))
+    (with-current-buffer revert-buf
+      (insert-file-contents file-name)
+      ;; Assume same modes:
+      (funcall current-major))
+    (vdiff-buffers revert-buf (current-buffer)
+                   nil
+                   (lambda (rbuf cbuf)
+                     (when (buffer-live-p rbuf)
+                       (kill-buffer rbuf)))
+                   t)))
+
 ;; (defvar vdiff-quit-hook nil)
 
 (defun vdiff-quit ()



reply via email to

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