(decf len)))))))\r
\r
(defun diff-hl-overlay-modified (ov after-p beg end &optional length)\r
+ ;; Do the simplest possible thing for now.\r
(when after-p (delete-overlay ov)))\r
\r
+(defvar diff-hl-timer nil)\r
+\r
+(defun diff-hl-edit (beg end len)\r
+ ;; DTRT when we've `undo'-ed the buffer into unmodified state.\r
+ (when undo-in-progress\r
+ (when diff-hl-timer\r
+ (cancel-timer diff-hl-timer))\r
+ (setq diff-hl-timer\r
+ (run-with-idle-timer 0.01 nil #'diff-hl-after-undo (current-buffer)))))\r
+\r
+(defun diff-hl-after-undo (buffer)\r
+ (with-current-buffer buffer\r
+ (unless (buffer-modified-p)\r
+ (diff-hl-update))))\r
+\r
;;;###autoload\r
(define-minor-mode diff-hl-mode\r
"Toggle display of vc diff indicators in the left margin."\r
:after-hook (diff-hl-update)\r
(if diff-hl-mode\r
- (add-hook 'after-save-hook 'diff-hl-update nil t)\r
- (remove-hook 'after-save-hook 'diff-hl-update t)))\r
+ (progn\r
+ (add-hook 'after-save-hook 'diff-hl-update nil t)\r
+ (add-hook 'after-change-functions 'diff-hl-edit nil t))\r
+ (remove-hook 'after-save-hook 'diff-hl-update t)\r
+ (remove-hook 'after-change-functions 'diff-hl-edit t)))\r
\r
(defun turn-on-diff-hl-mode ()\r
(when (buffer-file-name)\r