]> code.delx.au - gnu-emacs/commitdiff
(compile-mouse-goto-error): New command.
authorRichard M. Stallman <rms@gnu.org>
Wed, 30 Mar 1994 17:36:24 +0000 (17:36 +0000)
committerRichard M. Stallman <rms@gnu.org>
Wed, 30 Mar 1994 17:36:24 +0000 (17:36 +0000)
(compilation-minor-mode-map): Bind mouse-2.

lisp/progmodes/compile.el

index b185f34078be6ad9c8e423458288de8d0f0435e7..4ddc2bd574243bdaf966e33eeb2fcb49e416ae2b 100644 (file)
@@ -377,6 +377,7 @@ Returns the compilation buffer created."
 
 (defvar compilation-minor-mode-map
   (let ((map (make-sparse-keymap)))
+    (define-key map [mouse-2] 'compile-mouse-goto-error)
     (define-key map "\C-c\C-c" 'compile-goto-error)
     (define-key map "\C-c\C-k" 'kill-compilation)
     (define-key map "\M-n" 'compilation-next-error)
@@ -681,6 +682,42 @@ Does NOT find the source line like \\[next-error]."
                (setq compilation-error-list error-list-pos))
            )))))
 
+(defun compile-mouse-goto-error (event)
+  (interactive "e")
+  (let (file)
+    (save-excursion
+      (set-buffer (window-buffer (posn-window (event-end event))))
+      (save-excursion
+       (goto-char (posn-point (event-end event)))
+       (or (compilation-buffer-p (current-buffer))
+           (error "Not in a compilation buffer."))
+       (setq compilation-last-buffer (current-buffer))
+       (compile-reinitialize-errors nil (point))
+
+       ;; Move to bol; the marker for the error on this line will point there.
+       (beginning-of-line)
+
+       ;; Move compilation-error-list to the elt of compilation-old-error-list
+       ;; we want.
+       (setq compilation-error-list compilation-old-error-list)
+       (while (and compilation-error-list
+                   (> (point) (car (car compilation-error-list))))
+         (setq compilation-error-list (cdr compilation-error-list)))
+       (or compilation-error-list
+           (error "No error to go to"))))
+    (select-window (posn-window (event-end event)))
+    ;; Move to another window, so that next-error's window changes
+    ;; result in the desired setup.
+    (or (one-window-p)
+       (progn
+         (other-window -1)
+         ;; other-window changed the selected buffer,
+         ;; but we didn't want to do that.
+         (set-buffer compilation-last-buffer)))
+
+    (push-mark)
+    (next-error 1)))
+
 (defun compile-goto-error (&optional argp)
   "Visit the source for the error message point is on.
 Use this command in a compilation log buffer.  Sets the mark at point there.