clojure-emacs / cider

The Clojure Interactive Development Environment that Rocks for Emacs
https://cider.mx
GNU General Public License v3.0
3.55k stars 645 forks source link

Rework the REPL to use comint #709

Closed shosti closed 8 years ago

shosti commented 10 years ago

This is a really small thing, but the current behavior for the CIDER repl is to always scroll to show maximum output. I don't really like this behavior, and it would be nice if it were configurable (I'm currently hacking around it by redefining cider-repl--show-maximum-output—let me know if there's already another way to turn this behavior off). A cider-repl-show-maximum-output variable would probably be enough, although it might be nice to have some more configuration options à la comint—what are your thoughts? (Also, are there any plans to eventually base cider-repl-mode off of comint-mode?) I'd be happy to put together a PR for this.

vspinu commented 10 years ago

:+1: I would love if cider repl could behave similarly to comint buffers and would use comint customization variables.

Why exactly cider decided not to base its repl on comint?

bbatsov commented 10 years ago

The REPL code was originally copied from SLIME. It'd be a huge improvement if we switched to comint, but I don't have time to work on that. Help welcome!

shosti commented 10 years ago

I'd be happy to take a look at moving the repl code to comint, although it might take a little while (I'm a little busy right now and I'm not an expert in comint).

bbatsov commented 10 years ago

geiser's and ielm's source code can used as reference I guess, as they both currently employ comint. Using comint would also solve issues like #326.

bbatsov commented 10 years ago

@vitoshka I think you can find some useful ideas about the comint implemenation here. Sly is a new fork of SLIME using comint based REPL buffers.

vspinu commented 10 years ago

Thanks for the pointer. I will have a look at it when I move to comint next week. There are still a couple things I would like to push to CIDER before getting to comint.

sooheon commented 9 years ago

Another quality of life improvement if this were to happen would be interaction with evil-mode. Currently, actions such as escaping out of insert mode into normal mode place the cursor at the start of the REPL prompt. This is a problem when you then send snippets of code from the clojure buffer, it gets inserted before the prompt. Commands like evil-delete-line do not work, while comint based packages like monroe or inf-clojure handle this just fine.

antonyshchenko commented 9 years ago

Yes, integration with evil-mode in repl would be awesome.

bbatsov commented 9 years ago

Rebasing cider-repl-mode on top of comint-mode should solve your problems. I don't think we'll need any more evil-specific support.

bbatsov commented 9 years ago

This important ticket is still looking for a volunteer to tackle it.

GordonGustafson commented 9 years ago

@vspinu did you have any unfinished work on this I should look at if I decide to take a crack at this? Or should I start by looking at ielm source and the comint documentation?

johnbendi commented 9 years ago

What about @shosti the OP who promised a PR?

bbatsov commented 9 years ago

I think that nobody actually got anywhere with this task, so @GordonGustafson can definitely start from scratch.

vspinu commented 9 years ago

@GordonGustafson, I haven't done anything concrete.

shosti commented 9 years ago

@GordonGustafson yeah, never got around to looking at this (as you can probably surmise).

johnv02139 commented 8 years ago

I think basing it off of comint is a great idea, but for the record, for the main complaint, I added a defcustom in January, cider-repl-scroll-on-output, which can be set to nil to avoid the irritating scrolling. I didn't see this issue at the time.

Is any work ongoing here to use comint?

bbatsov commented 8 years ago

To my knowledge no one is working on this, so without a volunteer to push it forward it's not going to happen any time soon.

vspinu commented 8 years ago

I am not even convinced that it's worth anymore Comint is old and rigid which makes it hard to build a richer interfaces on top of it. So, IMO, if there is ever an effort in this direction, it should be better spent on building a new comint system from scratch.

johnv02139 commented 8 years ago

I would agree it doesn't seem worth reimplementing. I think your (@vspinu) original message made more sense, i.e., "use comint customization variables." I would think we could use the variables and emulate the behavior without sharing implementation.

bbatsov commented 8 years ago

OK, I'll close this ticket then. We've got more important tasks to do anyways.