diff options
Diffstat (limited to 'lisp/vc/smerge-mode.el')
-rw-r--r-- | lisp/vc/smerge-mode.el | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/lisp/vc/smerge-mode.el b/lisp/vc/smerge-mode.el index 569797e18dd..02cee44a3ae 100644 --- a/lisp/vc/smerge-mode.el +++ b/lisp/vc/smerge-mode.el @@ -1432,6 +1432,40 @@ If no conflict maker is found, turn off `smerge-mode'." (smerge-next)) (error (smerge-auto-leave)))) +(defcustom smerge-change-buffer-confirm t + "If non-nil, request confirmation before moving to another buffer." + :type 'boolean) + +(defun smerge-vc-next-conflict () + "Go to next conflict, possibly in another file. +First tries to go to the next conflict in the current buffer, and if not +found, uses VC to try and find the next file with conflict." + (interactive) + (let ((buffer (current-buffer))) + (condition-case nil + ;; FIXME: Try again from BOB before moving to the next file. + (smerge-next) + (error + (if (and (or smerge-change-buffer-confirm + (and (buffer-modified-p) buffer-file-name)) + (not (or (eq last-command this-command) + (eq ?\r last-command-event)))) ;Called via M-x!? + ;; FIXME: Don't emit this message if `vc-find-conflicted-file' won't + ;; go to another file anyway (because there are no more conflicted + ;; files). + (message (if (buffer-modified-p) + "No more conflicts here. Repeat to save and go to next buffer" + "No more conflicts here. Repeat to go to next buffer")) + (if (and (buffer-modified-p) buffer-file-name) + (save-buffer)) + (vc-find-conflicted-file) + (if (eq buffer (current-buffer)) + ;; Do nothing: presumably `vc-find-conflicted-file' already + ;; emitted a message explaining there aren't any more conflicts. + nil + (goto-char (point-min)) + (smerge-next))))))) + (provide 'smerge-mode) ;;; smerge-mode.el ends here |