William Conrad Halliburton will@licentiae.com writes:
(defun slime-maybe-start-lisp () "Start an inferior lisp unless one is already running." (unless (get-buffer-process (get-buffer "*inferior-lisp*")) (call-interactively 'inferior-lisp) (comint-proc-query (inferior-lisp-proc) "(mp::startup-idle-and-top-level-loops)") (comint-proc-query (inferior-lisp-proc) (format "(load %S)\n" (concat slime-path slime-backend)))))
We also have a ~/.swank.lisp file where you can add custom startup like this idle-loop thread.
(defun slime-start-swank-server () "Start a Swank server on the inferior lisp." (comint-proc-query (inferior-lisp-proc) (format "(mp::make-process (lambda () (swank:start-server %S)) :name "slime")\n" (slime-swank-port-file))))
Do you know how threads interact with SERVE-EVENT in CMUCL? SLIME-wise it's probably fairly safe if we are always talking to the same thread. But it would get really nasty if you e.g. spawn off new threads that inherit our *debugger-hook* and I/O streams and all end up trying to talk to Emacs at once. We don't handle that at all.
-Luke