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
.I’ve been using socket repls exclusively. I haven’t tested on a bare repl in a while
I’d suggest using the socket repl
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
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
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?
You can add some jvm properties to get a socket repl
:jvm-opts
["-Dclojure.server.repl={:port 5555 :accept clojure.core.server/repl}"]
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
yeah i think that's a pain
Okay 😞
Anyways, thanks for your help
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.
Very interested
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
Oh, I didn’t know about the discord server. Cool, just joined it.
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.
(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:Hummm, on second thoughts, if you are interacting with the repl buffer directly, you probably don’t want those hooks to interfere with them.
Yeah, I guess I’ll do the right thing and call the function non-interactively
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.