GNU bug report logs -
#77430
compilation-start should remember shell-file-name
Previous Next
Reported by: Siyuan Chen <chansey97 <at> gmail.com>
Date: Tue, 1 Apr 2025 13:43:06 UTC
Severity: normal
Done: Eli Zaretskii <eliz <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
Message #8 received at 77430 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
I found another way to workaround:
```
(defun my/compile ()
(interactive)
(compile "C:/msys64/usr/bin/bash --login -c ls"))
```
Keep ·shell-file-name‘ unchanged.
This avoids having to set the `compilation-environment' manually. Except
that the *compilation* buffer will output the message:
which: no bash in ((null))
but it doesn't seem to affect compilation.
Best regards,
Siyuan Chen
On Tue, Apr 1, 2025 at 9:58 PM Siyuan Chen <chansey97 <at> gmail.com> wrote:
> Background:
>
> Recently, I've been setting up a Haskell compilation environment with
> Emacs on Windows. The project depends on diagrams-cairo, which depends on
> GTK+, so I have to build it via msys64 with MINGW. It works well in a non
> Emacs environment, so I'd like to adapt it to the Emacs environment.
>
> Everything is OK, except when I press 'g' in the *compilation* buffer.
>
> To simplify the problem, below only the minimal test is provided.
>
> Reproduce steps:
>
> 1. Create a file test.el in E:/tmp
>
> 2. Open that file and paste the following code
> ```
> (defun my/compile ()
> (interactive)
> (let ((shell-file-name "C:/msys64/usr/bin/bash")
> (compilation-environment
> "PATH=/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/c/Windows/System32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl")
> )
> (compile "ls")
> ))
> ```
> NOTE: You can think of "ls" as a compilation command such as "stack build"
> in Haskell.
>
> 3. Evaluate Last S-expression.
>
> 4. M-x my/compile
>
> The *compilation* buffer lists the files normally.
>
> 5. Press 'g' in the *compilation* buffer, i.e. `recompile'.
>
> The expected behavior: List the files again.
>
> The actual behavior: Compilation exited abnormally.
>
> The problem is that `recompile' does not realize that `shell-file-name'
> has been updated to bash. It still uses the default cmdproxy.
>
> I have created a patch to workaround the issue. It remembers the original
> `shell-file-name' in `compilation-start', so we can use it when we
> `recompile'.
>
> Thanks.
>
> Best regards,
> Siyuan Chen
>
[Message part 2 (text/html, inline)]
This bug report was last modified 34 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.