GNU bug report logs - #57556
28.1; Eshell not finding executables in PATH when tramp-integration loaded

Previous Next

Package: emacs;

Reported by: Colton Lewis <coltonlewis <at> google.com>

Date: Sat, 3 Sep 2022 05:04:02 UTC

Severity: normal

Found in version 28.1

Fixed in version 28.3

Done: Michael Albinus <michael.albinus <at> gmx.de>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Jim Porter <jporterbugs <at> gmail.com>
To: 57556 <at> debbugs.gnu.org, michael.albinus <at> gmx.de, coltonlewis <at> google.com
Subject: bug#57556: 28.1; Eshell not finding executables in PATH when tramp-integration loaded
Date: Thu, 29 Sep 2022 20:54:43 -0700
[Message part 1 (text/plain, inline)]
On 9/22/2022 10:55 AM, Michael Albinus wrote:
> There will be another patch by Jim. But this is for Emacs 29 only I
> guess, and it will override this change then w/o regression.

It took a lot longer than anticipated, but here's a patch series to give 
Eshell full support for a Tramp-aware $PATH. This ended up considerably 
more elaborate than intended, mostly because of patch #3.

If people prefer, I could file a separate bug # for this set of changes, 
but I thought it would be better to track it here.

Here's a brief summary of everything I changed, and my reasoning. I'm 
still thinking about some of the changes myself, but I think this is 
complete enough for others to take a look at and provide feedback if 
they want.

Patch #2: Obsolete 'eshell/define'
----------------------------------------

I'm pretty sure this function never worked, since it adds Eshell 
variable aliases in a form that the rest of the code can't handle. If 
I'm wrong about this and someone can show how it should work, I'm happy 
to get rid of this patch and replace it with any fixes necessitated by 
my other patches.

Patch #3: Allow setting variable aliases
----------------------------------------

Since the plan is to make $PATH into a variable alias so that Eshell can 
do the right thing when changing directories to a different host, I 
wanted to be sure users can *set* variable aliases so that updating 
$PATH will be easy. This adds the ability to do that, along with a new 
"set" command in Eshell. That lets you set either environment variables 
or Lisp variables (note that "#'" is just Eshell's way of spelling "'", 
since a single-quote is used for literal strings in Eshell):

  set ENV_VAR value
  set #'lisp-var value

I debated on the name, since people might think it's more like Bash's 
"set" than Lisp's "set", but Eshell already has "setq", so I think "set" 
makes sense.

However, you can set these in other ways too:

  export ENV_VAR=value
  setq lisp-var value

Really, the "set" function is probably optional, but it seemed more 
convenient to me when I was trying these patches out, and I think it's a 
nice middle ground between Lispiness and sh-ness.

Patch #4: Make $PATH a variable alias
----------------------------------------

This stores the $PATH in an alist indexed by host, similar to 
'grep-host-defaults-alist'. For consistency, it now derives its value 
from '(exec-path)' everywhere (formerly, it used '(getenv "PATH") for 
local hosts and '(exec-path)' for Tramp).

This is likely an incompatible change for some users if they call 
(setenv "PATH" "foobar") in their init scripts, but it's easy enough to 
fix: just make the corresponding changes to 'exec-path' too. That said, 
if people think compatibility is more important, I could change this to 
use '(getenv "PATH")' for local directories.

These changes would probably be good to test on MS-Windows as well, 
since MS-Windows uses a different path-separator, so the code has to be 
pretty careful to use the right separator for the right system. I don't 
have Emacs builds set up on an MS-Windows system at the moment (though 
I've been meaning to).
[0001-Allow-ignoring-errors-when-calling-eshell-match-comm.patch (text/plain, attachment)]
[0002-Obsolete-eshell-define.patch (text/plain, attachment)]
[0003-Allow-setting-the-values-of-variable-aliases-in-Eshe.patch (text/plain, attachment)]
[0004-Improve-handling-of-PATH-in-Eshell-for-remote-direct.patch (text/plain, attachment)]
[0005-Print-the-correct-PATH-when-Eshell-s-which-fails-to-.patch (text/plain, attachment)]

This bug report was last modified 2 years and 215 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.