From f98494a43df492ee02d6ade1c01a49f7be09cd11 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Wed, 30 Mar 1994 17:36:24 +0000 Subject: [PATCH] (compile-mouse-goto-error): New command. (compilation-minor-mode-map): Bind mouse-2. --- lisp/progmodes/compile.el | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el index b185f34078b..4ddc2bd5742 100644 --- a/lisp/progmodes/compile.el +++ b/lisp/progmodes/compile.el @@ -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. -- 2.39.5