]> code.delx.au - gnu-emacs/commitdiff
(next-error-follow-mode, next-error-follow-mode-post-command-hook):
authorEli Zaretskii <eliz@gnu.org>
Sat, 4 Sep 2004 12:45:26 +0000 (12:45 +0000)
committerEli Zaretskii <eliz@gnu.org>
Sat, 4 Sep 2004 12:45:26 +0000 (12:45 +0000)
New functions.
(next-error-follow-last-line): New defvar.

lisp/simple.el

index 271a07ee531820e243da096b3ec8c3a16b915d66..edf94cfd7d170fd8d1b292f3b9152314519626e6 100644 (file)
@@ -249,6 +249,32 @@ If `fringe-arrow', indicate the locus by the fringe arrow."
                  (const :tag "Fringe arrow" 'fringe-arrow))
   :group 'next-error
   :version "21.4")
+
+;;; Internal variable for `next-error-follow-mode-post-command-hook'.
+(defvar next-error-follow-last-line nil)
+
+(define-minor-mode next-error-follow-mode
+  "Minor mode for compilation, occur and diff modes.
+When turned on, cursor motion in the compilation, occur or diff
+buffer determines the cursor in the corresponding buffer to move
+to the corresponding position.  "
+  nil " Fol" nil
+  (if (not next-error-follow-mode)
+      (remove-hook 'post-command-hook 'next-error-follow-mode-post-command-hook t)
+    (add-hook 'post-command-hook 'next-error-follow-mode-post-command-hook nil t)
+    (make-variable-buffer-local 'next-error-follow-last-line)))
+
+;;; Used as a `post-command-hook' by `next-error-follow-mode'
+;;; for the *Compilation* *grep* and *Occur* buffers.
+(defun next-error-follow-mode-post-command-hook ()
+  (unless (equal next-error-follow-last-line (line-number-at-pos))
+    (setq next-error-follow-last-line (line-number-at-pos))
+    (condition-case nil
+       (let ((compilation-context-lines nil))
+         (setq compilation-current-error (point))
+         (next-error-no-select 0))
+      (error t))))
+
 \f
 ;;;