summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDima Kogan <dima@secretsauce.net>2016-12-19 23:23:14 -0800
committerDima Kogan <dima@secretsauce.net>2016-12-24 21:42:02 -0800
commite5ef59b87da5c2ddfa22f7342efe29b3eea6ed97 (patch)
tree8bd80d19534ed1e97400bdd912fb2883b82fba12
parent6b6abe0dba6a9a2e5f78aac3814421886e7a184f (diff)
downloademacs-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.el39
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