changeset 6595:7fbc171fd1b5

(compile-mouse-goto-error): New command. (compilation-minor-mode-map): Bind mouse-2.
author Richard M. Stallman <rms@gnu.org>
date Wed, 30 Mar 1994 17:36:24 +0000
parents bca9e6c8a07f
children 80df3b456672
files lisp/progmodes/compile.el
diffstat 1 files changed, 37 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/progmodes/compile.el	Wed Mar 30 17:22:59 1994 +0000
+++ b/lisp/progmodes/compile.el	Wed Mar 30 17:36:24 1994 +0000
@@ -377,6 +377,7 @@
 
 (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 @@
 		(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.