branch: elpa/git-commit commit db2e9546f88d607189c58bf884ae075565305ade Author: Jonas Bernoulli <jo...@bernoul.li> Commit: Jonas Bernoulli <jo...@bernoul.li>
magit-ediff-buffers: Change argument order --- lisp/magit-ediff.el | 140 ++++++++++++++++++++++++++-------------------------- 1 file changed, 70 insertions(+), 70 deletions(-) diff --git a/lisp/magit-ediff.el b/lisp/magit-ediff.el index f5f045250d..8fb98c4082 100644 --- a/lisp/magit-ediff.el +++ b/lisp/magit-ediff.el @@ -123,47 +123,49 @@ recommend you do not further complicate that by enabling this.") ("r" "Show range" magit-ediff-compare) ("z" "Show stash" magit-ediff-show-stash)]]) -(defmacro magit-ediff-buffers (quit &rest spec) - (declare (indent 1)) - (let ((fn (if (length= spec 3) 'ediff-buffers3 'ediff-buffers)) - (char ?A) - get make kill) - (pcase-dolist (`(,g ,m) spec) - (let ((b (intern (format "buf%c" char)))) - (push `(,b ,g) get) - ;; This is an unfortunate complication that I have added for - ;; the benefit of one user. Pretend we used this instead: - ;; (push `(or ,b ,m) make) - (push `(if ,b - (if magit-ediff-use-indirect-buffers - (prog1 - (make-indirect-buffer - ,b (generate-new-buffer-name (buffer-name ,b)) t) - (setq ,b nil)) - ,b) - ,m) - make) - (push `(unless ,b - (ediff-kill-buffer-carefully - ,(intern (format "ediff-buffer-%c" char)))) - kill)) - (cl-incf char)) +(defmacro magit-ediff-buffers (a b &optional c setup quit) + (let (get make kill (char ?A)) + (dolist (spec (list a b c)) + (if (not spec) + (push nil make) + (pcase-let ((`(,g ,m) spec)) + (let ((b (intern (format "buf%c" char)))) + (push `(,b ,g) get) + ;; This is an unfortunate complication that I have added for + ;; the benefit of one user. Pretend we used this instead: + ;; (push `(or ,b ,m) make) + (push `(if ,b + (if magit-ediff-use-indirect-buffers + (prog1 (make-indirect-buffer + ,b + (generate-new-buffer-name (buffer-name ,b)) + t) + (setq ,b nil)) + ,b) + ,m) + make) + (push `(unless ,b + (ediff-kill-buffer-carefully + ,(intern (format "ediff-buffer-%c" char)))) + kill)) + (cl-incf char)))) (setq get (nreverse get)) (setq make (nreverse make)) (setq kill (nreverse kill)) `(magit-with-toplevel (let ((conf (current-window-configuration)) ,@get) - (,fn + (ediff-buffers-internal ,@make - (list (lambda () + (list ,@(and setup (list setup)) + (lambda () (setq-local ediff-quit-hook (list ,@(and quit (list quit)) (lambda () ,@kill (let ((magit-ediff-previous-winconf conf)) (run-hooks 'magit-ediff-quit-hook))))))) - ',fn))))) + ,(if c 'ediff-buffers3 'ediff-buffers)))))) ;;;###autoload (defun magit-ediff-resolve-rest (file) @@ -218,21 +220,22 @@ FILE has to be relative to the top directory of the repository." (bufB* (magit-find-file-index-noselect file t))) (setf (buffer-local-value 'buffer-read-only bufB*) nil) (magit-ediff-buffers - (lambda () - (when (buffer-live-p ediff-buffer-B) - (when lockB - (setf (buffer-local-value 'buffer-read-only bufB) t)) - (when (buffer-modified-p ediff-buffer-B) - (with-current-buffer ediff-buffer-B - (magit-update-index)))) - (when (and (buffer-live-p ediff-buffer-C) - (buffer-modified-p ediff-buffer-C)) - (with-current-buffer ediff-buffer-C - (when (y-or-n-p (format "Save file %s? " buffer-file-name)) - (save-buffer))))) - (bufA bufA*) - (bufB bufB*) - (bufC bufC*))))) + (bufA bufA*) + (bufB bufB*) + (bufC bufC*) + nil + (lambda () + (when (buffer-live-p ediff-buffer-B) + (when lockB + (setf (buffer-local-value 'buffer-read-only bufB) t)) + (when (buffer-modified-p ediff-buffer-B) + (with-current-buffer ediff-buffer-B + (magit-update-index)))) + (when (and (buffer-live-p ediff-buffer-C) + (buffer-modified-p ediff-buffer-C)) + (with-current-buffer ediff-buffer-C + (when (y-or-n-p (format "Save file %s? " buffer-file-name)) + (save-buffer))))))))) ;;;###autoload (defun magit-ediff-compare (revA revB fileA fileB) @@ -252,11 +255,11 @@ range)." nil current-prefix-arg))) (nconc (list revA revB) (magit-ediff-read-files revA revB)))) - (magit-ediff-buffers nil - ((if revA (magit-get-revision-buffer revA fileA) (get-file-buffer fileA)) - (if revA (magit-find-file-noselect revA fileA) (find-file-noselect fileA))) - ((if revB (magit-get-revision-buffer revB fileB) (get-file-buffer fileB)) - (if revB (magit-find-file-noselect revB fileB) (find-file-noselect fileB))))) + (magit-ediff-buffers + ((if revA (magit-get-revision-buffer revA fileA) (get-file-buffer fileA)) + (if revA (magit-find-file-noselect revA fileA) (find-file-noselect fileA))) + ((if revB (magit-get-revision-buffer revB fileB) (get-file-buffer fileB)) + (if revB (magit-find-file-noselect revB fileB) (find-file-noselect fileB))))) (defun magit-ediff-compare--read-revisions (&optional arg mbase) (let ((input (or arg (magit-diff-read-range-or-commit @@ -381,11 +384,10 @@ FILE must be relative to the top directory of the repository." (list (magit-read-file-choice "Show staged changes for file" (magit-staged-files) "No staged files"))) - (magit-ediff-buffers nil - ((magit-get-revision-buffer "HEAD" file) - (magit-find-file-noselect "HEAD" file)) - ((get-buffer (concat file ".~{index}~")) - (magit-find-file-index-noselect file t)))) + (magit-ediff-buffers ((magit-get-revision-buffer "HEAD" file) + (magit-find-file-noselect "HEAD" file)) + ((get-buffer (concat file ".~{index}~")) + (magit-find-file-index-noselect file t)))) ;;;###autoload (defun magit-ediff-show-unstaged (file) @@ -399,11 +401,10 @@ FILE must be relative to the top directory of the repository." (list (magit-read-file-choice "Show unstaged changes for file" (magit-unstaged-files) "No unstaged files"))) - (magit-ediff-buffers nil - ((get-buffer (concat file ".~{index}~")) - (magit-find-file-index-noselect file t)) - ((get-file-buffer file) - (find-file-noselect file)))) + (magit-ediff-buffers ((get-buffer (concat file ".~{index}~")) + (magit-find-file-index-noselect file t)) + ((get-file-buffer file) + (find-file-noselect file)))) ;;;###autoload (defun magit-ediff-show-working-tree (file) @@ -413,11 +414,10 @@ FILE must be relative to the top directory of the repository." (list (magit-read-file-choice "Show changes in file" (magit-changed-files "HEAD") "No changed files"))) - (magit-ediff-buffers nil - ((magit-get-revision-buffer "HEAD" file) - (magit-find-file-noselect "HEAD" file)) - ((get-file-buffer file) - (find-file-noselect file)))) + (magit-ediff-buffers ((magit-get-revision-buffer "HEAD" file) + (magit-find-file-noselect "HEAD" file)) + ((get-file-buffer file) + (find-file-noselect file)))) ;;;###autoload (defun magit-ediff-show-commit (commit) @@ -443,13 +443,13 @@ stash that were staged." (fileB fileC)) (if (and magit-ediff-show-stash-with-index (member fileA (magit-changed-files revB revA))) - (magit-ediff-buffers nil - ((magit-get-revision-buffer revA fileA) - (magit-find-file-noselect revA fileA)) - ((magit-get-revision-buffer revB fileB) - (magit-find-file-noselect revB fileB)) - ((magit-get-revision-buffer revC fileC) - (magit-find-file-noselect revC fileC))) + (magit-ediff-buffers + ((magit-get-revision-buffer revA fileA) + (magit-find-file-noselect revA fileA)) + ((magit-get-revision-buffer revB fileB) + (magit-find-file-noselect revB fileB)) + ((magit-get-revision-buffer revC fileC) + (magit-find-file-noselect revC fileC))) (magit-ediff-compare revA revC fileA fileC)))) (defun magit-ediff-cleanup-auxiliary-buffers ()