Subject: bug#76888: 31.0.50; start-process: Spawning child process: Invalid argument

From: Eli Zaretskii <[email-masked]>
Date: Sun, 16 Mar 2025 11:07:12 +0200

> From: Richard Copley <[email-masked]>
> Date: Sun, 16 Mar 2025 08:47:35 +0000
> Cc: [email-masked], [email-masked]
> 
> > I'm not sure this is relevant, see below.  Or if it _is_ relevant, I
> > don't think I understand why the value of shell-file-name in the
> > "*Async Shell Command*" buffer matters.
> 
> There are two factors, the combination of which leads to the problem.
> 
> The first factor is that the value of shell-file-name sometimes gets
> set buffer-locally in the "*Async Shell Command*" buffer. (This is
> true for the Tramp code, when the buffer is reused. I don't know if it
> is meaningful to ask whether it is true for the non-Tramp code.)

If Tramp sets the buffer-local value in the "*Async Shell Command*"
buffer, it should also set default-directory in that buffer.

> The second factor is that 'async-shell-command' sometimes uses the
> value of shell-file-name from the "*Async Shell Command*" buffer.
> (This is true for the non-Tramp code. I don't know if it is true for
> the Tramp code.)

Please point out the code which uses the value of shell-file-name
local to the "*Async Shell Command*" buffer.

In any case, since no step in your recipe makes that buffer the
current buffer, the buffer-local value there should not matter.

> Which one should we target? I make no recommendation. But, for
> example, if we target the second factor, we could kill all buffer
> local variables in the "*Async Shell Command*" buffer somewhere near
> the beginning of the code path that is followed when
> 'async-shell-command' is invoked. This would need to be done in the
> non-Tramp code. I don't know if it would need to be done in the Tramp
> code.

Buffer-local values should matter only when commands are invoked with
that buffer the current buffer.  Which part(s) of your recipe do that?