If you need to jump into a file from stacktrace in a log, use the patch in compile.el . Then with an appropriate find-file function, you can easily jump to the location. (defun gud-compilation-find-file (_marker filename _directory &rest _formats) "Find a buffer for file FILENAME." (ede-find-file filename)) (setq next-error-function 'compilation-next-error-function compilation-locs (make-hash-table :test 'equal :weakness 'value) compilation-find-file 'gud-compilation-find-file) diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el index 6b39dcd3d5..a21be665f5 100644 --- a/lisp/progmodes/compile.el +++ b/lisp/progmodes/compile.el @@ -802,6 +802,7 @@ compilation-disable-input ;; value is a FILE-STRUCTURE as described above, with the car eq to the hash ;; key. This holds the tree seen from root, for storing new nodes. (defvar compilation-locs ()) +(make-variable-buffer-local 'compilation-locs) (defvar compilation-debug nil "Set this to t before creating a *compilation* buffer. @@ -2586,7 +2587,7 @@ compilation-next-error-function (with-current-buffer (if (bufferp (caar (compilation--loc->file-struct loc))) (caar (compilation--loc->file-struct loc)) - (apply #'compilation-find-file + (apply compilation-find-file marker (caar (compilation--loc->file-struct loc)) (cadr (car (compilation--loc->file-struct loc))) @@ -2869,6 +2870,10 @@ compilation-goto-locus-delete-o (remove-hook 'pre-command-hook #'compilation-goto-locus-delete-o)) ^L +(defvar compilation-find-file #'compilation-find-file + "Function to find a file in compilation buffer.") +(make-variable-buffer-local 'compilation-find-file) + (defun compilation-find-file (marker filename directory &rest formats) "Find a buffer for file FILENAME. If FILENAME is not found at all, ask the user where to find it.