1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-03 11:33:37 +00:00

(compile-mouse-goto-error): New command.

(compilation-minor-mode-map): Bind mouse-2.
This commit is contained in:
Richard M. Stallman 1994-03-30 17:36:24 +00:00
parent dbcb93894b
commit f98494a43d

View 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.