Fork me on GitHub

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]:


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


    ["-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


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

👍 3

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: 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.