From: Sam Steingold Date: Tue, 23 Mar 2010 18:22:46 +0000 (-0400) Subject: Fix bug#5620: recalculate all markers on compilation buffer X-Git-Tag: emacs-pretest-24.0.90~104^2~275^2~438^2~673 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=f4087766ce0aebb7c205ccd7ec28dfceb808d567;p=emacs.git Fix bug#5620: recalculate all markers on compilation buffer modifications, not on file modifications. (buffer-modtime): New buffer-local variable: the buffer modification time, for buffers not associated with files. (compilation-mode): Create it. (compilation-filter): Update it. (compilation-next-error-function): Use it instead of `visited-file-modtime' for timestamp. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c417eb7246e..6eb3260f445 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,14 @@ +2010-03-23 Sam Steingold + + Fix bug#5620: recalculate all markers on compilation buffer + modifications, not on file modifications. + * progmodes/compile.el (buffer-modtime): New buffer-local variable: + the buffer modification time, for buffers not associated with files. + (compilation-mode): Create it. + (compilation-filter): Update it. + (compilation-next-error-function): Use it instead of + `visited-file-modtime' for timestamp. + 2010-03-23 Juri Linkov Implement Occur multi-line matches. diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el index 7e013b87c19..8a858d74dcd 100644 --- a/lisp/progmodes/compile.el +++ b/lisp/progmodes/compile.el @@ -733,6 +733,9 @@ Faces `compilation-error-face', `compilation-warning-face', "If non-nil, automatically jump to the next error encountered.") (make-variable-buffer-local 'compilation-auto-jump-to-next) +(defvar buffer-modtime nil + "The buffer modification time, for buffers not associated with files.") +(make-variable-buffer-local 'buffer-modtime) (defvar compilation-skip-to-next-location t "*If non-nil, skip multiple error messages for the same source location.") @@ -1566,6 +1569,7 @@ Runs `compilation-mode-hook' with `run-mode-hooks' (which see). mode-name (or name-of-mode "Compilation")) (set (make-local-variable 'page-delimiter) compilation-page-delimiter) + (set (make-local-variable 'buffer-modtime) nil) (compilation-setup) (setq buffer-read-only t) (run-mode-hooks 'compilation-mode-hook)) @@ -1781,6 +1785,7 @@ and runs `compilation-filter-hook'." (unless comint-inhibit-carriage-motion (comint-carriage-motion (process-mark proc) (point))) (set-marker (process-mark proc) (point)) + (set (make-local-variable buffer-modtime) (current-time)) (run-hooks 'compilation-filter-hook)) (goto-char pos) (narrow-to-region min max) @@ -1954,9 +1959,7 @@ This is the value of `next-error-function' in Compilation buffers." ;; There may be no timestamp info if the loc is a `fake-loc', ;; but we just checked that the file has been visited before! (equal (nth 4 loc) - (setq timestamp - (with-current-buffer (marker-buffer (nth 3 loc)) - (visited-file-modtime))))) + (setq timestamp buffer-modtime))) (with-current-buffer (compilation-find-file marker (caar (nth 2 loc)) (cadr (car (nth 2 loc)))) (save-restriction