diff options
author | Dima Kogan <dima@secretsauce.net> | 2016-12-19 23:23:14 -0800 |
---|---|---|
committer | Dima Kogan <dima@secretsauce.net> | 2016-12-24 21:42:02 -0800 |
commit | e5ef59b87da5c2ddfa22f7342efe29b3eea6ed97 (patch) | |
tree | 8bd80d19534ed1e97400bdd912fb2883b82fba12 | |
parent | 6b6abe0dba6a9a2e5f78aac3814421886e7a184f (diff) | |
download | emacs-e5ef59b87da5c2ddfa22f7342efe29b3eea6ed97.tar.gz |
diff-mode auto-refines only after a successful motion
Prior to this patch (if enabled) auto-refinement would kick in after all
hunk navigation commands, even if the motion failed. This would result
in a situation where the hunk navigation would signal an error and beep,
but yet still accomplish potentially useful work, by auto-refining.
This patch moves the auto-refinement code to only run when a motion was
successful
* lisp/vc/diff-mode.el (diff--internal-hunk-next,
diff--internal-hunk-prev): Removed auto-refinement-triggering code
* lisp/vc/diff-mode.el (diff--wrap-navigation): Added
auto-refinement-triggering code
-rw-r--r-- | lisp/vc/diff-mode.el | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el index d74ff2f5c99..75fd420922a 100644 --- a/lisp/vc/diff-mode.el +++ b/lisp/vc/diff-mode.el @@ -551,23 +551,7 @@ next hunk if TRY-HARDER is non-nil; otherwise signal an error." ;; Define diff-{hunk,file}-{prev,next} (easy-mmode-define-navigation - diff--internal-hunk diff-hunk-header-re "hunk" diff-end-of-hunk diff-restrict-view - (when diff-auto-refine-mode - (unless (prog1 diff--auto-refine-data - (setq diff--auto-refine-data - (cons (current-buffer) (point-marker)))) - (run-at-time 0.0 nil - (lambda () - (when diff--auto-refine-data - (let ((buffer (car diff--auto-refine-data)) - (point (cdr diff--auto-refine-data))) - (setq diff--auto-refine-data nil) - (with-local-quit - (when (buffer-live-p buffer) - (with-current-buffer buffer - (save-excursion - (goto-char point) - (diff-refine-hunk)))))))))))) + diff--internal-hunk diff-hunk-header-re "hunk" diff-end-of-hunk diff-restrict-view) (easy-mmode-define-navigation diff--internal-file diff-file-header-re "file" diff-end-of-file) @@ -605,7 +589,26 @@ to the NEXT marker." (when (not (looking-at header-re)) (goto-char start) - (user-error (format "No %s" what)))))) + (user-error (format "No %s" what))) + + ;; We successfully moved to the next/prev hunk/file. Apply the + ;; auto-refinement if needed + (when diff-auto-refine-mode + (unless (prog1 diff--auto-refine-data + (setq diff--auto-refine-data + (cons (current-buffer) (point-marker)))) + (run-at-time 0.0 nil + (lambda () + (when diff--auto-refine-data + (let ((buffer (car diff--auto-refine-data)) + (point (cdr diff--auto-refine-data))) + (setq diff--auto-refine-data nil) + (with-local-quit + (when (buffer-live-p buffer) + (with-current-buffer buffer + (save-excursion + (goto-char point) + (diff-refine-hunk)))))))))))))) ;; These functions all take a skip-hunk-start argument which controls ;; whether we skip pre-hunk-start text or not. In interactive uses we |