Terminating 'clj' REPL session

505 views
Skip to first unread message

Alan Thompson

unread,
Dec 9, 2017, 5:38:14 PM12/9/17
to clo...@googlegroups.com
Hi - Just downloaded the new Clojure 1.9.0 package.  When I tried the repl I noticed that it doesn't respond to either `exit` or `quit` as one might expect from the lein repl:

~/cool/tools > clj
Clojure 1.9.0
user=> (+ 2 3)
5
user=> exit
CompilerException java.lang.RuntimeException: Unable to resolve symbol: exit in this context, compiling:(NO_SOURCE_PATH:0:0) 
user=> 
user=> quit
CompilerException java.lang.RuntimeException: Unable to resolve symbol: quit in this context, compiling:(NO_SOURCE_PATH:0:0) 
user=> ^D
~/cool/tools > 

Lein repl for comparison:

~/tupelo > lein repl
nREPL server started on port 37115 on host 127.0.0.1 - Clojure 1.9.0
tupelo.core=> exit
Bye for now!
~/tupelo > 
~/tupelo > lein repl
nREPL server started on port 40639 on host 127.0.0.1 - Clojure 1.9.0
tupelo.core=> quit
Bye for now!
~/tupelo > 

The new repl does terminate upon CRTL-D or CRTL-C, but many users will probably be confused that `quit` and `exit` are not accepted.

Should I file a JIRA?

Alan

Justin Smith

unread,
Dec 9, 2017, 5:55:44 PM12/9/17
to clo...@googlegroups.com
I find the fact that "exit" and "quit" work in leiningen repls to be weird - this doesn't follow the otherwise consistent rules of the language. What about an exit function, something like

(defn exit
  ([] (exit 0))
  ([n] (System/exit n))

so that it's not an out of band special case input?

--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@googlegroups.com
Note that posts from new members are moderated - please be patient with your first post.
To unsubscribe from this group, send email to
clojure+u...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups "Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Alex Miller

unread,
Dec 9, 2017, 5:57:19 PM12/9/17
to Clojure
This really just the standard behavior of clojure.main, not a feature of the clj tool, so this would require a change in Clojure itself.

Sean Corfield

unread,
Dec 9, 2017, 8:15:56 PM12/9/17
to clo...@googlegroups.com

I find the fact that "exit" and "quit" work in leiningen repls to be weird

 

I agree. I’ve always used ctl-d to exit a Leiningen REPL or a Boot REPL – or pretty much any console program I’ve ever used. I’m only surprised when ctl-d _doesn’t_ work in such a program!

 

And, after all, both Leiningen and Boot give ctl-d as the first option for exiting a REPL:

 

                Exit: Control+D …

 

Sean Corfield -- (970) FOR-SEAN -- (904) 302-SEAN
An Architect's View -- http://corfield.org/

"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood

 


From: clo...@googlegroups.com <clo...@googlegroups.com> on behalf of Justin Smith <noise...@gmail.com>
Sent: Saturday, December 9, 2017 2:55:17 PM
To: clo...@googlegroups.com
Subject: Re: Terminating 'clj' REPL session
 

Alan Thompson

unread,
Dec 9, 2017, 11:29:50 PM12/9/17
to clo...@googlegroups.com
Would a message such as "use CRTL-D to exit" be appropriate?  Right now it is very bare.  Maybe this?

~ > clj
Clojure 1.9.0 (use ^D to exit)
user=>
~ > 

Alan


For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups "Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscribe@googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@googlegroups.com
Note that posts from new members are moderated - please be patient with your first post.
To unsubscribe from this group, send email to

For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups "Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscribe@googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@googlegroups.com
Note that posts from new members are moderated - please be patient with your first post.
To unsubscribe from this group, send email to

For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups "Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscribe@googlegroups.com.

Alan Thompson

unread,
Dec 9, 2017, 11:32:48 PM12/9/17
to clo...@googlegroups.com
I just noticed that Python will give you hints (but only after guessing wrong):

~ > python
Python 2.7.12 (default, Nov 20 2017, 18:23:56) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
>>> quit
Use quit() or Ctrl-D (i.e. EOF) to exit
>>> 



Alex Miller

unread,
Dec 10, 2017, 8:37:21 AM12/10/17
to Clojure
Sure, file a ticket.

Oleksandr Shulgin

unread,
Dec 11, 2017, 3:39:07 AM12/11/17
to clo...@googlegroups.com
To recap, my lein repl starts with the following help banner:

    Docs: (doc function-name-here)
          (find-doc "part-of-name-here")
  Source: (source function-name-here)
 Javadoc: (javadoc java-object-or-class-here)
    Exit: Control+D or (exit) or (quit)
 Results: Stored in vars *1, *2, *3, an exception in *e

That doesn't suggest that `exit` alone without the function call is going stop the main loop.

The problems begin when one tries to use it in the middle of an unfinished s-expr, a primary reason could be that the user doesn't understand the changed prompt:

user=> (+ 1
  #_=> exit
  #_=> )

CompilerException java.lang.RuntimeException: Unable to resolve symbol: exit in this context, compiling:(/tmp/form-init4088985676787273132.clj:1:1) 

Actually, a more likely scenario is like this:

user=> (+ 1
  #_=> exit
  #_=> quit
  #_=> help
  #_=> why are you doing this to me?

Nor does (exit) call works, which is contrary to the help doc:

user=> (+ 1
  #_=> (exit))

CompilerException java.lang.RuntimeException: Unable to resolve symbol: exit in this context, compiling:(/tmp/form-init4248691177104478700.clj:2:1) 

An interesting thing is the same issue is discussed currently on the PostgreSQL mailing list about behavior of psql:


In particular, the following suggestion seems to provide a reasonable way out of this problem:


Not sure if this can be done with Clojure, short of employing reader macros in some way?

Cheers,
--
Alex

Reply all
Reply to author
Forward
0 new messages