Fork me on GitHub
#inf-clojure
<
2021-04-05
>
André Peric Tavares01:04:06

Hey. The inf-clojure repl is getting an extra prompt for each newline present in the evaluated form. For example, if I evaluate a form with 5 lines, the repl looks like this:

my.project=>               #_=>               #_=>               #_=>               #_=> nil
Anyone facing the same issue? I’m using inf-clojure and selecting lein repl. For some reason, this bug is not reproducible if I start a repl externally and use inf-clojure-connect .

dpsutton01:04:43

I’ve been using socket repls exclusively. I haven’t tested on a bare repl in a while

dpsutton01:04:52

I’d suggest using the socket repl

dpsutton02:04:59

Those look like the sub prompts. I think there was some code involved that would make everything a single string and strip new lines for this reason

André Peric Tavares02:04:29

Oh, I just realized this does not happen when I use inf-clojure-eval-last-sexp directly, rather than my own fork of lispy. My bad. (that’s weird though, as lispy will simply use inf-clojure-eval-last-sexp with call-interactivelly [1]. Anyway, will investigate). [1]: https://github.com/Andre0991/lispy-lite/blob/main/lispy.el#L4237

André Peric Tavares02:04:29

On the socket repl, I’d like to go to that route, yeap. But since it’s a lein project, I guess using lein repl is unavoidable, right?

dpsutton02:04:04

You can add some jvm properties to get a socket repl

dpsutton02:04:34

:jvm-opts
    ["-Dclojure.server.repl={:port 5555 :accept clojure.core.server/repl}"]

André Peric Tavares02:04:54

Oh right, I experimented with that as well. The issue is that I haven’t figured out a way of randomising the port in case I need to spin multiple repls - see https://clojurians.slack.com/archives/C9BT75KRC/p1617506171010800

dpsutton02:04:05

yeah i think that's a pain

André Peric Tavares02:04:23

Anyways, thanks for your help

André Peric Tavares02:04:12

Just out of curiosity: confirmed that (call-interactivelly ’inf-clojure-eval-last-sexp) inserts the extra prompts, while inf-clojure-eval-last-sexp (actually called interactivelly by me) doesn’t. That’s so weird. Maybe something is relying on this-command. Will investigate.

dpsutton02:04:58

Very interested

dpsutton02:04:39

And I’ll try to run non socket versions more. Also the discord server for cider is more of the official spot for development now these days

👍 3
André Peric Tavares02:04:07

Oh, I didn’t know about the discord server. Cool, just joined it.

André Peric Tavares02:04:08

By the way, just confirmed that the issue is this-command , as it has a different value when call-interactivelly is called: https://github.com/clojure-emacs/inf-clojure/blob/1e99b8246bb1fe7666d613a9ae566e2a939fc2bb/inf-clojure.el#L669 Well, its usage looks legitimate here, of course. I’ll try some workaround.

André Peric Tavares03:04:50

(add-hook 'comint-preoutput-filter-functions #'inf-clojure-preoutput-filter nil t)
add-hook is already setting LOCAL to 't, so the function that was added to 'comint-preoutput-filter-functions won’t affect other comint buffers. In fact, I just opened a shell buffer, inspected comint-preoutput-filter-functions and #'inf-clojure-preoutput-filter is not there. I’ll open an issue about it, but unless I’m missing something, we can simply remove the check (string-prefix-p "inf-clojure-" (symbol-name (or this-command last-command))) :thinking_face:

André Peric Tavares03:04:52

Hummm, on second thoughts, if you are interacting with the repl buffer directly, you probably don’t want those hooks to interfere with them.

André Peric Tavares03:04:46

Yeah, I guess I’ll do the right thing and call the function non-interactively

André Peric Tavares06:04:33

Well, but if the inf-clojure command is not called interactively, the comint hook won’t filter the text, as it consults last-command. So… I dunno. Thinking in other workarounds.