]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix bug#5620: recalculate all markers on compilation buffer
authorSam Steingold <sds@gnu.org>
Tue, 23 Mar 2010 18:22:46 +0000 (14:22 -0400)
committerSam Steingold <sds@gnu.org>
Tue, 23 Mar 2010 18:22:46 +0000 (14:22 -0400)
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.

lisp/ChangeLog
lisp/progmodes/compile.el

index c417eb7246e506deb5b6b522e560fb87fed68b67..6eb3260f44569a6d0978d85c859d057a5b4362e1 100644 (file)
@@ -1,3 +1,14 @@
+2010-03-23  Sam Steingold  <sds@gnu.org>
+
+       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  <juri@jurta.org>
 
        Implement Occur multi-line matches.
index 7e013b87c197f1e4429c785be2a648fb590c5071..8a858d74dcd987b6760a13f3c132d1327970671e 100644 (file)
@@ -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