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

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

bug#30725: eshell: built-ins do not handle command substitution


From: Jim Porter
Subject: bug#30725: eshell: built-ins do not handle command substitution
Date: Thu, 20 Jan 2022 19:10:31 -0800

On 1/20/2022 5:38 AM, Lars Ingebrigtsen wrote:
Jim Porter <jporterbugs@gmail.com> writes:

Oh, right. I'd forgotten about `skip-unless'. Here's a patch with that
added. Thanks.

Looks good to me; pushed to Emacs 29.

Drat. I just found bug#12689, which has a wider variety of test cases, and saw that I missed a pretty glaring case here:

  echo ${*echo hi}-there

That is, using a subcommand that gets concatenated to a constant string to form the argument (or other variations involving concatenation). Both before and after my prior fix, that would print "nil-there". With this new patch, it prints "hi-there" as expected.

This new patch should be considerably more robust, since it searches recursively for any `(eshell-as-subcommand FOO)' forms to check them. That way we don't require the command form to look *exactly* one way. I used a generator for this, since that's the clearest to my eyes, but I'm open to other implementations.

For completeness, this only fixes the first of two issues in bug#12689 as described by Samer Masterson:

There are two issues contained in this bug: eshell-plain-command doesn't
wait for the process to finish before returning, and echo parses output
from subcommands as lisp objects instead of as args.
The latter case is,

  echo ${*echo -e "foo\nbar"}-baz

which used to print "nil-baz" (or '("foo" "bar")-baz' if you use *echo in both spots). With my patch here, it always prints '("foo" "bar")-baz', which is at least wrong in a consistent way now. :)

Attachment: 0001-Further-improve-determination-of-when-commands-can-b.patch
Description: Text document


reply via email to

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