[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] /srv/bzr/emacs/trunk r110338: * lisp/vc/diff-mode.el (diff
From: |
Stefan Monnier |
Subject: |
[Emacs-diffs] /srv/bzr/emacs/trunk r110338: * lisp/vc/diff-mode.el (diff--auto-refine-data): New var. |
Date: |
Mon, 01 Oct 2012 23:49:28 -0400 |
User-agent: |
Bazaar (2.5.0) |
------------------------------------------------------------
revno: 110338
committer: Stefan Monnier <address@hidden>
branch nick: trunk
timestamp: Mon 2012-10-01 23:49:28 -0400
message:
* lisp/vc/diff-mode.el (diff--auto-refine-data): New var.
(diff-hunk): Use it to delay refinement.
(diff-mode): Remove overlays when we turn off font-lock.
modified:
lisp/ChangeLog
lisp/vc/diff-mode.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog 2012-10-02 03:46:08 +0000
+++ b/lisp/ChangeLog 2012-10-02 03:49:28 +0000
@@ -1,5 +1,9 @@
2012-10-02 Stefan Monnier <address@hidden>
+ * vc/diff-mode.el (diff--auto-refine-data): New var.
+ (diff-hunk): Use it to delay refinement.
+ (diff-mode): Remove overlays when we turn off font-lock.
+
* textmodes/table.el: Use lexical-binding, dolist, define-minor-mode.
(table-initialize-table-fixed-width-mode)
(table-set-table-fixed-width-mode): Remove functions.
=== modified file 'lisp/vc/diff-mode.el'
--- a/lisp/vc/diff-mode.el 2012-09-30 16:36:42 +0000
+++ b/lisp/vc/diff-mode.el 2012-10-02 03:49:28 +0000
@@ -565,11 +565,24 @@
(goto-char (match-beginning 1))
(beginning-of-line)))
+(defvar diff--auto-refine-data nil)
+
;; Define diff-{hunk,file}-{prev,next}
(easy-mmode-define-navigation
diff-hunk diff-hunk-header-re "hunk" diff-end-of-hunk diff-restrict-view
- (if diff-auto-refine-mode
- (condition-case-unless-debug nil (diff-refine-hunk) (error nil))))
+ (when diff-auto-refine-mode
+ (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
+ (goto-char point)
+ (diff-refine-hunk))))))))))
(easy-mmode-define-navigation
diff-file diff-file-header-re "file" diff-end-of-file)
@@ -1317,6 +1330,9 @@
\\{diff-mode-map}"
(set (make-local-variable 'font-lock-defaults) diff-font-lock-defaults)
+ (add-hook 'font-lock-mode-hook
+ (lambda () (remove-overlays nil nil 'diff-mode 'fine))
+ nil 'local)
(set (make-local-variable 'outline-regexp) diff-outline-regexp)
(set (make-local-variable 'imenu-generic-expression)
diff-imenu-generic-expression)
@@ -1390,6 +1406,8 @@
(set (make-local-variable 'whitespace-style) '(face trailing))
(let ((style (save-excursion
(goto-char (point-min))
+ ;; FIXME: For buffers filled from async processes, this search
+ ;; will simply fail because the buffer is still empty :-(
(when (re-search-forward diff-hunk-header-re nil t)
(goto-char (match-beginning 0))
(diff-hunk-style)))))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] /srv/bzr/emacs/trunk r110338: * lisp/vc/diff-mode.el (diff--auto-refine-data): New var.,
Stefan Monnier <=