bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#33618: 27.0.50; ada-mode breaks M-x grep


From: Stefan Monnier
Subject: bug#33618: 27.0.50; ada-mode breaks M-x grep
Date: Tue, 04 Dec 2018 19:02:35 -0500
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux)

> Opening a file in ada-mode using the new ada-mode from GNU ELPA globally
> sets compilation-search-path (for me, it got set to `("~/tmp")`
> probably because the Ada file was in ~/tmp), which in
> turn breaks M-x grep in the sense that clicking on a match doesn't jump
> to the file but prompts you to find the file (unless you happened to
> grep from one of the directories mentioned in the
> compilation-search-path, of course).

I use the patch below currently to work around this problem.
Should I install it into `master` (with a few more comments and
probably etc/NEWS or even manual updates)?


        Stefan


diff --git a/lisp/progmodes/ada-xref.el b/lisp/progmodes/ada-xref.el
index 359c187d85..d31e614f14 100644
--- a/lisp/progmodes/ada-xref.el
+++ b/lisp/progmodes/ada-xref.el
@@ -943,7 +943,7 @@ ada-select-prj-file
        ;; FIXME: use ada-get-absolute-dir, mapconcat here
        (setenv "ADA_PROJECT_PATH" ada_project_path)))
 
-  (setq compilation-search-path (ada-xref-get-src-dir-field))
+  (setq-local compilation-search-path (ada-xref-get-src-dir-field))
 
   (setq ada-search-directories-internal
        ;; FIXME: why do we need directory-file-name here?
@@ -1208,9 +1208,8 @@ ada-compile-application
   (ada-require-project-file)
   (let ((cmd (ada-xref-get-project-field 'make_cmd))
        (process-environment (ada-set-environment))
-       (compilation-scroll-output t))
-
-    (setq compilation-search-path (ada-xref-get-src-dir-field))
+       (compilation-scroll-output t)
+        (compilation-search-path (ada-xref-get-src-dir-field)))
 
     ;;  If no project file was found, ask the user
     (unless cmd
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index c7c510f7a3..f5627e10ce 100644
--- a/lisp/progmodes/compile.el
+++ b/lisp/progmodes/compile.el
@@ -1614,7 +1614,7 @@ recompile
       (setq command (compilation-read-command (or (car compilation-arguments)
                                                  command)))
       (if compilation-arguments (setcar compilation-arguments command)))
-    (apply 'compilation-start (or compilation-arguments (list command)))))
+    (apply #'compilation-start (or compilation-arguments (list command)))))
 
 (defcustom compilation-scroll-output nil
   "Non-nil to scroll the *compilation* buffer window as output appears.
@@ -1682,6 +1682,7 @@ compilation-start
            (replace-regexp-in-string "-mode\\'" "" (symbol-name mode))))
         (thisdir default-directory)
         (thisenv compilation-environment)
+         (this-search-path compilation-search-path)
         outwin outbuf)
     (with-current-buffer
        (setq outbuf
@@ -1749,6 +1750,8 @@ compilation-start
         ;; NB: must be done after (funcall mode) as that resets local variables
         (set (make-local-variable 'compilation-directory) thisdir)
        (set (make-local-variable 'compilation-environment) thisenv)
+        (unless (local-variable-p 'compilation-search-path)
+          (setq-local compilation-search-path this-search-path))
        (if highlight-regexp
            (set (make-local-variable 'compilation-highlight-regexp)
                 highlight-regexp))
diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el
index 331eeec01b..16b54081ae 100644
--- a/lisp/progmodes/grep.el
+++ b/lisp/progmodes/grep.el
@@ -834,7 +834,8 @@ grep-mode
   (set (make-local-variable 'compilation-disable-input) t)
   (set (make-local-variable 'compilation-error-screen-columns)
        grep-error-screen-columns)
-  (add-hook 'compilation-filter-hook 'grep-filter nil t))
+  (setq-local compilation-search-path '(nil))
+  (add-hook 'compilation-filter-hook #'grep-filter nil t))
 
 (defun grep--save-buffers ()
   (when grep-save-buffers





reply via email to

[Prev in Thread] Current Thread [Next in Thread]