"Bill Clementson" billclem@gmail.com writes:
[...] As I see it, there may be 3 different types of "new" repl's that one could want to have [...]:
#1: You want to "play around" with some ideas but don't want to "muck up" your existing lisp environment and repl. In that case, you probably want to start up a new lisp instance and test things in a completely independent repl. When I do "M-x slime" multiple times (and say "n" to the "Create an additional *inferior-lisp*?" prompt), that is exactly what I get - multiple lisp instances with a separate repl for each one.
I think you meant pressing `y' rather than `n' on the "Create an additional *inferior-lisp*?" prompt, as `n' is more or less (maybe even exactly) tantamount to ,restart-inferior-lisp on the REPL.
#2: You want to have multiple repl's on the same lisp instance (with each repl sharing the repl history and */**/***/etc values). [...]
(defun slime-new-repl () "Create additional REPL for the current Lisp connection." (interactive) (if (slime-current-connection) (let ((port (slime-connection-port (slime-connection)))) (slime-eval `(swank::create-server :port ,port)) (slime-connect slime-lisp-host port)) (error "Not connected")))
and just do "M-x slime-new-repl" whenever you wanted a new repl. [...]
#3: You want to have multiple repl's on the same lisp instance (with each repl having it's own repl history and */**/***/etc values). I thought that it was possible to do this at one time with SLIME; however, I just had a play and I don't think there is any way that you can currently do this in SLIME.
It may be possible to do it similiarly to your above function, but making CL:*, CL:**, CL:*** &c thread-local.
-T.