[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 5f53a49: Search harder for file name matches in *compilation* buf
From: |
Lars Ingebrigtsen |
Subject: |
master 5f53a49: Search harder for file name matches in *compilation* buffers |
Date: |
Thu, 15 Oct 2020 10:47:54 -0400 (EDT) |
branch: master
commit 5f53a49d48df8c637904fdc2b5e58ab900a1a327
Author: David Engster <deng@randomsample.de>
Commit: Lars Ingebrigtsen <larsi@gnus.org>
Search harder for file name matches in *compilation* buffers
* lisp/progmodes/compile.el (compilation-find-file): Use it (bug#14411).
(compilation-search-all-directories): New variable.
---
etc/NEWS | 8 ++++++++
lisp/progmodes/compile.el | 34 ++++++++++++++++++++++++++++++++++
2 files changed, 42 insertions(+)
diff --git a/etc/NEWS b/etc/NEWS
index 97e2e6f..2a75e13 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1138,6 +1138,14 @@ window after starting). This variable defaults to nil.
** Miscellaneous
+---
+*** New user option 'compilation-search-all-directories'.
+When doing parallel builds, directories and compilation errors may
+arrive in the *compilation* buffer out-of-order. If this variable is
+non-nil (the default), Emacs will now search backwards in the buffer
+for any directory the file with errors may be in. If nil, this won't
+be done (and this restores how this previously worked).
+
+++
*** New user option 'next-error-message-highlight'.
In addition to a fringe arrow, 'next-error' error may now optionally
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index 4fe1377..bc0fe6d 100644
--- a/lisp/progmodes/compile.el
+++ b/lisp/progmodes/compile.el
@@ -745,6 +745,18 @@ variable, and you might not notice. Therefore,
`compile-command'
is considered unsafe if this variable is nil."
:type 'boolean)
+(defcustom compilation-search-all-directories t
+ "Whether further upward directories should be used when searching a file.
+When doing a parallel build, several files from different
+directories can be compiled at the same time. This makes it
+difficult to determine the base directory for a relative file
+name in a compiler error or warning. If this variable is
+non-nil, instead of just relying on the previous directory change
+in the compilation buffer, all other directories further upwards
+will be used as well."
+ :type 'boolean
+ :version "28.1")
+
;;;###autoload
(defcustom compilation-ask-about-save t
"Non-nil means \\[compile] asks which buffers to save before compiling.
@@ -2916,6 +2928,28 @@ attempts to find a file whose name is produced by
(format FMT FILENAME)."
(find-file-noselect name))
fmts (cdr fmts)))
(setq dirs (cdr dirs)))
+ ;; If we haven't found it, this might be a parallel build.
+ ;; Search the directories further up the buffer.
+ (when (and (null buffer)
+ compilation-search-all-directories)
+ (with-current-buffer (marker-buffer marker)
+ (save-excursion
+ (goto-char (marker-position marker))
+ (when-let ((prev (compilation--previous-directory (point))))
+ (goto-char prev))
+ (setq dirs (cdr (or (get-text-property
+ (1- (point)) 'compilation-directory)
+ (get-text-property
+ (point) 'compilation-directory))))))
+ (while (and dirs (null buffer))
+ (setq thisdir (car dirs)
+ fmts formats)
+ (while (and fmts (null buffer))
+ (setq name (expand-file-name (format (car fmts) filename) thisdir)
+ buffer (and (file-exists-p name)
+ (find-file-noselect name))
+ fmts (cdr fmts)))
+ (setq dirs (cdr dirs))))
(while (null buffer) ;Repeat until the user selects an existing file.
;; The file doesn't exist. Ask the user where to find it.
(save-excursion ;This save-excursion is probably not right.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 5f53a49: Search harder for file name matches in *compilation* buffers,
Lars Ingebrigtsen <=