Extending elisp and eshell

First Item:
What do we need to do to make elisp/emacslisp a more complete language? It doesn't have to be super fancy, but I think we could improve it. We'll have to compile in a few new primitives, but I don't think it would take much. If we even just compiled in a syscall primitive it would go a long way.

Second Item:
What can we do to get eshell to be a more fully functioning shell? The first thing that comes to find is a pipe. When a pipe is present, stdout will be directed to stdin instead of an emacs buffer. I admit I'm not an elisp guru, but I'm pretty sure this will take another primitive.

What other things should be added?

Somewhat related video: youtube.com/watch?v=MLIP0ZtoiO4

Other urls found in this thread:

informatimago.com/linux/emacs-on-user-mode-linux.html?repost
github.com/deech/shen-elisp
git.hcoop.net/?p=bpt/emacs.git
twitter.com/AnonBabble

A lot of features of Common Lisp are provided through the cl-lib library that ships with Emacs.

It already supports piping, although somewhat badly since it's fully implemented in elisp.

I guess I'm just a retard. How do I pipe in eshell?

In what ways is Elisp incomplete as it stands?
Most of it's problems are vestiges of its age and heritage, simply being lexicaly bound and adding namespaces would go a long way to making it more maintainable. However that's not necessarily 'more complete'.

The normal way. Same syntax as a typical Unix shell.

Yeah it seems to work unless I try to pipe to more, and which case it just opens a buffer with more's man page

That's because eshell doesn't use a real pipe (created using the pipe system call, it's quite low-level), like shells usually do. Notice that in a regular shell just running "more" without arguments and without redirected command output also gives the help text, even though it could have received input from you typing. It can tell the difference. It can't in eshell.

Why would you use more in eshell, though? Emacs is a great pager all by itself.

I never remember the key combinations for paging

C-v scrolls forward, M-v scrolls backward. You can also use PgDown and PgUp, or the scroll wheel, or the scroll bar, or the arrow keys.

The emacs team his replacing it with guile.
Case closed.

Is there something like exec in elisp? I.e. stop emacs and replace it with whatever process I called?


Isn't Guile backwards compatible with elisp?

Why would you want that?

Guile is mainly an implementation of Scheme, but the same engine can run other languages with some interoperability between the languages. It has a full elisp implementation. Guile Emacs can run elisp code but it can also run Scheme code, and it can call functions defined in one language from the other language. They are separate languages.

trying to see if I can replace some bash init scripts with elisp scripts.

Consider looking at the GUIXSD. You can configure your whole system with Guile.

Yeah. Guix seems cool and Sepherd seems nifty. I just like doing weird shit the hard way. So is there an exec type function, or will I have to roll my own?

Wouldn't it be more sensible to launch them as processes all controlled by a single Emacs instance instead of running a whole Emacs for every script?

Yeah. I thought about that. I'm actually going to try that sometime this week. I'm going to compile a super minimal LFS Then compile a specific copy of emacs to use at the init, and then use elisp to start running daemons. I have a feeling it will work horribly, but its just for shits and giggles.

Eshell does not support POSIX piping, which is probably what OP means. The language of implementation is irrelevant.

Eshell supports input redirection, but it uses shared handler for each standard stream, which renders it useless for any scripting.
Just use shell-mode, it's much better.

Elisp is pure shit compared to any modern Lisp dialect.
They say (since 2000) they would switch to Guile at some point, but likely never.
Guile is somewhat better, but slow and awkward. Also it suffers from Scheme legacy, such as SFRIs and ICE-9.


You are having an autistic episode.
informatimago.com/linux/emacs-on-user-mode-linux.html?repost


There's no exec in Elisp
Guile (as a compiler) can compile Elisp. There's no compatibility between two languages.


Nothing. We need to abandon it, and write a need one, stealing ideas from Haskell, Clojure and rc.
Nothing. It's useless shit. It would be nice thought to have a shell with API for target language.
Nothing. We need to abandon it, and write a need one, stealing ideas from Plan 9, Urbit and TempleOS.

I find github.com/deech/shen-elisp is a language more to my taste when programming Emacs. But as someone else mentioned, Emacs is probably moving to Guile "real soon now".

There is a working guile port. It needs more work before it performs well enough - I think it doesn't compile the elisp ahead of time or something.

Guile Emacs is just Emacs linked against libguile and having some low-level stuff replaced with it.
As the result it's very slow.
Also
>git.hcoop.net/?p=bpt/emacs.git
Emacs with Guile Scheme as the primary language environment is a vaporware.
And Elisp is far from being the only thing that is wrong with Emacs.


Poo in loo.

I wonder if it is possible to replace eshell with elisp bindings to busybox (or some tool like that), so we'd have POSIX shell accessible from elisp.

(busybox-ls :l "/home") ;; busybox ls -l /home