@screwlisp Hey, I had an idea for a way to make an eepitch-slime that would support switching easily between several targets! Can you help me to write a "bad prototype" like what you've been doing, in which you have two SBCLs talking to one another? Can we a arrange a way to chat?

@screwlisp
I only have the idea right now, and it is something very vaguely inspired by the traceback buffers in Slime/Sly that would be hard to summarize in a few sentences... my plan was to ask you how you would translate this to two SBCLs running in parallel, with Slime controlling both - just forget the 3-window setting and use a 2-window setting, it would be easier for you - and then I'll start by your translation and build the interface the selects the right Slime target...

• (find-3EE '(eepitch-shell) '(eepitch-shell2))
• (find-3ee '(eepitch-shell) '(eepitch-shell2))
• (eepitch-shell)
date > /tmp/o

• (eepitch-shell2)
cat /tmp/o

@eduardoochs
generating ee find functions for the different repls? For my high level example I have written just now, I have one slime repl in charge of redrawing a gnuplot, and I have a second slime repl in charge of making the data for the gnuplot.

Debugging my example, whatever I typed didn't seem to get sending redraw to the gnuplot to redraw yet though so I will still be a few minutes.

@eduardoochs
Oh right I looked at your picture, something like using named pipes? As you saw in my gif, I gravitated towards emacs server-start and then using an emacsclient process to evaluate in emacs, possibly evaluating eepitch-send.

I forget exactly what, but asyncronously starting an external process inside common lisp slime was necessary to avoid what were tricky hook issues I think.

I really want the eepitch buffer I just pitched to to be able to use eepitch itself on another buffer.

@eduardoochs I didn't quite get to it but in my example today, you can see I have a three buffer configuration, where my control buffer is alternating commands between an SBCL image to numerically compute values, and an ECL image running a graphical app.

1. I pitch to sbcl, performs the first step
2. Then I pitch to ecl, performs the second step

Instead I want to watch:
1. I pitch to sbcl, performs the first step
2. sbcl asyncronously pitches to ecl to begin the next step.

@eduardoochs here's a working #commonLisp multislime #eev #eepitch, going via emacsclient --eval and #emacs server.

It's (partially) async and works for slime1 ! slime2 ! slime1 and so forth I think.

https://screwlisp.small-web.org/eev/emacsclient-eepitch-the-reckoning/

But it does require M-x server-start. And it's a common lisp object system class (port to emacs lisp? ;p) I dunno. What do you think?

Emacsclient common lisp slime eepitch: the reckoning. Three-way-conversations.

@screwlisp That's so far above my level that I can't think anything about it yet! I am still trying to work on the things that will make some of your experiments "testable", or "more testable", by me... I tried McClim and its installation was broken, I tried ASDF and found it very confusing, I still know very little about UIOP, and for me some very basic things about how you use Slime are still a mystery... I kill and restart my eepitch sessions all the time, and I don't even know if you do that too or not...
@screwlisp Can we arrange to meet by chat - either on IRC or here on Mastodon - one of these days, say, for half an hour at some moment in the next month? When?
@screwlisp At some point I would be able to test your prototypes in 30 minutes each, instead of taking two evenings for each one - and with little chance of success in each case... and at that point testing your things will become a priority in my spare-ish time.
@eduardoochs That is an important goal for me to work towards as well- I guess the "it works on my computer" problem. I'm just in a different city to normal right now, so it's a bad time for me to communicate this couple of days particularly.
@screwlisp Great!!! I have some tricks for testing things on a clean Emacs in /tmp/fakehomedir/ - they're not super convenient so I don't use them all the time, but they work...

@eduardoochs I really like your temporary file/directory, git stuff, the thing with the customized code-c-d with regex, though well-integrating it and also sharing with others are two big challenges.

I appreciate how much effort you put into conveying how easy eev is to use.

http://anggtwu.net/eev-intros/find-eev-install-intro.html#5.1

(find-eev-install-intro)

@screwlisp The first prototype of an eepitch-sbcl-slime is ready! Now if we run this in a buffer - the "source buffer",

• (eepitch-sbcl-slime)
• (eepitch-kill)
• (eepitch-sbcl-slime)

then each (eepitch-sbcl-slime) creates a temporary buffer like the one in the screenshot... usually we would just type a series of <f8>s to check that the current target to eepitch is a slime/sbcl buffer and to go back to the source buffer, but in the cases in which we need to create a new slime/sbcl target we need to type a mix of <f8>s and <down>s - to execute some lines and skip some other ones - and then at some point slime will run and we need to type M-x b at the slime/sbcl repl... the M-x b does all the rest, that I will explain later, after playing with this a lot and rewriting parts of it a few times... =S

@eduardoochs very exciting!

@screwlisp Done! The core functions are here,

(find-eev "eepitch.el" "badly-behaved")
http://anggtwu.net/eev-current/eepitch.el.html#badly-behaved

and there is a test here:

http://anggtwu.net/elisp/2025-eepitch-b.el.html
(find-angg "elisp/2025-eepitch-b.el")

Now I need to rewrite the test blocks in some of my .lisp files for Maxima to see if this eepitch-sbcl-slime is good or not...

@screwlisp Now totally rewritten, and added to eev! The mailing archive at http://lists.gnu.org/archive/html/eev/ is down, but here is a copy of a the announcement...

Hi list,

I finally found a good way to use eepitch to control "badly-behaved
targets", like Gdb and Slime... it is explained (briefly) here:

http://anggtwu.net/eev-intros/find-eepitch-intro.html#4
(find-eepitch-intro "4. Badly-behaved targets")

http://anggtwu.net/eev-current/eepitch.el.html#badly-behaved
(find-eev "eepitch.el" "badly-behaved")

In short: you can use this as an eepitch block for Gdb,

• (eepitch-gdb-kill)
•• To restart gdb:
• (eepitch-set-source-and-M-x-b 2)
• (gdb "gdb -i=mi")
• (eepitch-gdb-select)

and once you understand well where to type an `M-x b' in the middle
part then you can also use this, that is confusing for beginners...

• (eepitch-gdb-kill)
• (eepitch-gdb-start "gdb -i=mi")
• (eepitch-gdb-select)

More soon, I hope...
Cheers,
Eduardo Ochs

eev Archives