Fix hitting RET on some text in compilation-mode

* lisp/progmodes/compile.el (compilation-next-error-function):
Don't bug out with an incomprehensible error message on "make[2]:"
texts (bug#5316).
(compilation-find-file): Protect against there being no file name.
This commit is contained in:
Lars Ingebrigtsen 2019-10-13 22:22:31 +02:00
parent 5c4195fd36
commit 88eadc75d0

View file

@ -2509,6 +2509,8 @@ This is the value of `next-error-function' in Compilation buffers."
(loc (compilation--message->loc msg))
(end-loc (compilation--message->end-loc msg))
(marker (point-marker)))
(unless loc
(user-error "No next error"))
(setq compilation-current-error (point-marker)
overlay-arrow-position
(if (bolp)
@ -2822,7 +2824,8 @@ attempts to find a file whose name is produced by (format FMT FILENAME)."
(expand-file-name directory)
default-directory))
buffer thisdir fmts name)
(if (file-name-absolute-p filename)
(if (and filename
(file-name-absolute-p filename))
;; The file name is absolute. Use its explicit directory as
;; the first in the search path, and strip it from FILENAME.
(setq filename (abbreviate-file-name (expand-file-name filename))
@ -2850,8 +2853,11 @@ attempts to find a file whose name is produced by (format FMT FILENAME)."
(and w (progn (compilation-set-window w marker)
(compilation-set-overlay-arrow w))))
(let* ((name (read-file-name
(format "Find this %s in (default %s): "
compilation-error filename)
(format "Find this %s in%s: "
compilation-error
(if filename
(format " (default %s)" filename)
""))
spec-dir filename t nil
;; The predicate below is fine when called from
;; minibuffer-complete-and-exit, but it's too