[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#57635: 29.0.50; Look into using generator.el's CPS machinery to repl
From: |
Jim Porter |
Subject: |
bug#57635: 29.0.50; Look into using generator.el's CPS machinery to replace 'eshell-do-eval' |
Date: |
Sun, 11 Sep 2022 18:01:04 -0700 |
On 9/7/2022 5:45 AM, Stefan Monnier via Bug reports for GNU Emacs, the
Swiss army knife of text editors wrote:
Indeed, the idea would be to replace the commands that launch processes
with "yields" to an external loop (that just launches the next process
and then calls the generator again).
That part should be fairly straightforward; there's already
'eshell-eval-command' and friends ('eshell-resume-command',
'eshell-resume-eval', and 'eshell-do-eval'), which work pretty much like
this already. Looking through this, I see a few main differences between
how Eshell does things and how generator.el does things:
----------------------------------------
1) Eshell uses (throw 'eshell-defer) to yield
This is probably easy to fix, since it's only used in a couple places,
and it looks like it's purely an implementation detail.
2) Eshell doesn't have anything like 'iter-defun'
Eshell just evaluates a Lisp form directly (you can see this by tracing
'eshell-eval-command' and then running some external process in Eshell).
I'm not sure how hard it would be to get generator.el to be ok with this.
3) Eshell allows replacing a form by throwing 'eshell-replace-command'
This is the trickiest part (to me, anyway). It's typically used by
Eshell built-in commands when they want to give up and run an external
process, though it can be used for a bunch of other things. I'm not sure
what the best way to handle this via generator.el would be. Is there any
straightforward way to do this?
----------------------------------------
If anyone has ideas, I'm all ears. This is pretty far down into the
weeds of Lisp metaprogramming, so I'm just making some educated guesses
here. I think doing this would be a big improvement for Eshell though,
since I've already bumped up against a few cases that really look like
they're just bugs in 'eshell-do-eval'. Moving to generator.el would
hopefully fix those and make Eshell easier to maintain/improve.