From: Jim Porter <jporterbugs@gmail.com>
To: Sean Whitton <spwhitton@spwhitton.name>, 54603@debbugs.gnu.org
Subject: bug#54603: 29.0.50; [PATCH] Eshell's external pipe module interferes with other argument parsing hooks
Date: Thu, 31 Mar 2022 15:19:58 -0700 [thread overview]
Message-ID: <ade910fc-6a93-960d-3848-d97a6e5e7c89@gmail.com> (raw)
In-Reply-To: <87bkxliy76.fsf@melete.silentflame.com>
On 3/31/2022 2:55 PM, Sean Whitton wrote:
> On Thu 31 Mar 2022 at 01:58PM -07, Jim Porter wrote:
>
>> I'm not so sure. That would mean "'foo" in "echo 'foo" is treated as a
>> Lisp form, but Eshell expects you to use "#'" (or "(" or "`") to
>> introduce a Lisp form. As I understand it, that's so that typos don't do
>> such surprising things. There's a good chance that a user typing "echo
>> 'foo" actually meant "echo 'foo'".
>
> Right okay. We can just skip over entire Lisp forms when we find them.
> I don't think there could be a non-highly esoteric shell command for
> standard POSIX shells -- which is what this feature is for -- which that
> would break. Like this:
>
>>> diff --git a/lisp/eshell/em-extpipe.el b/lisp/eshell/em-extpipe.el
>>> index eb5b3bfe1d..0787ab791b 100644
>>> --- a/lisp/eshell/em-extpipe.el
>>> +++ b/lisp/eshell/em-extpipe.el
>>> @@ -99,7 +99,7 @@ eshell-parse-external-pipeline
>>> (let* ((found
>>> (save-excursion
>>> (re-search-forward
>>> - "\\(?:#?'\\|\"\\|\\\\\\)" bound t)))
>>> + "\\(?:(\\|#?'\\|\"\\|\\\\\\)" bound t)))
>>> (next (or (and found (match-beginning 0))
>>> bound)))
>>> (if (re-search-forward pat next t)
>>>
>
> Something in my init.el is breaking the extpipe tests atm, but I ad hoc
> tested one of your cases for this bug and it works. Could you confirm?
The first test case -- "(eq 'foo nil)" -- works, but the second doesn't:
~ $ echo $(list "one" "two")(:s'o'x')
Invalid read syntax: ")", 1, 33
Similarly:
~ $ echo *(:gs'o'x')
Invalid read syntax: ")", 1, 16
I guess this is because it's now trying to read the argument modifier as
a Lisp form. Normally, `eshell-parse-lisp-argument' would ignore that
bit, since the `(' starting the modifier isn't at the beginning of an
argument. This could probably be resolved with some additional logic
(setting `eshell-current-argument' as appropriate?), but I hope there's
a cleaner way that doesn't involve reimplementing
`eshell-parse-argument' within `eshell-parse-external-pipeline'.
next prev parent reply other threads:[~2022-03-31 22:19 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-28 2:21 bug#54603: 29.0.50; [PATCH] Eshell's external pipe module interferes with other argument parsing hooks Jim Porter
2022-03-31 11:46 ` Lars Ingebrigtsen
2022-03-31 16:26 ` Jim Porter
2022-03-31 16:50 ` Eli Zaretskii
2022-03-31 17:35 ` Michael Albinus
2022-03-31 22:55 ` Sean Whitton
2022-03-31 18:26 ` Sean Whitton
2022-03-31 20:58 ` Jim Porter
2022-03-31 21:55 ` Sean Whitton
2022-03-31 22:19 ` Jim Porter [this message]
2022-03-31 22:48 ` Sean Whitton
2022-03-31 23:31 ` Jim Porter
2022-04-01 21:16 ` Sean Whitton
2022-04-02 1:31 ` Jim Porter
2022-04-02 14:09 ` Lars Ingebrigtsen
2022-04-02 15:52 ` Sean Whitton
2022-03-31 21:56 ` Sean Whitton
2022-03-31 23:11 ` Jim Porter
2022-04-16 21:04 ` Sean Whitton
2022-05-23 4:34 ` Jim Porter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ade910fc-6a93-960d-3848-d97a6e5e7c89@gmail.com \
--to=jporterbugs@gmail.com \
--cc=54603@debbugs.gnu.org \
--cc=spwhitton@spwhitton.name \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.