Does it also have job control, and jobs as first-class objects?
In schemesh, you can do things like
find / -xdev -type f | ls -l --sort=size
CTRL+Z
bg 1
and also (define j {git log})
(display j)
(display (sh-run/string j))Does it also have job control, and jobs as first-class objects?
In schemesh, you can do things like
find / -xdev -type f | ls -l --sort=size
CTRL+Z
bg 1
and also (define j {git log})
(display j)
(display (sh-run/string j))> A command invocation followed by an ampersand (&) will be run in the background. Eshell has no job control, so you can not suspend or background the current process, or bring a background process into the foreground. That said, background processes invoked from Eshell can be controlled the same way as any other background process in Emacs.
For things like this, we would have to switch to something like M-x shell or even M-x ansi-term. In Emacs, we have an assortment of shells and terminal implementations. As a long time Emacs user, I know when to use which, so it does not bother me. However, I can imagine how this might feel cumbersome for newer Emacs users.
In fact, this is one of the reasons I think your project is fantastic. It offers some of the Eshell-like experience, and more, to non-Emacs users, which is very compelling!
I wonder why, after all these years, nobody has added it?
If someone (not me) made a patch that did, would the GNU Emacs maintainers accept it?
So if there's an "emacs" way of doing things, generally eshell delegates to that, instead of rolling its own.
> That said, background processes invoked from Eshell can be controlled the same way as any other background process in Emacs
I haven't used Eshell much, but this makes a simple "command &" arguably much saner than in a traditional Unix shell.
I imagine that a new feature would be accepted only if someone can make it play nice with existing features. And in case of job control, I have a bad feeling about the complexity involved.