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 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 >