tom scrawler@gmail.com writes:
Hi guys,
how easily can slime be modified to support non-common-lisp languages? I have one in mind that I'd love to use with slime...
Below is some code to use SLIME with Scheme48. You can start it with M-x slime48.
Only a few things work: evaluation, inspecting, apropos (a bit), backtraces.
Interrupting doesn't work. This could be implemented with threads, but would have been painful in 0.57. They changed the threading interface in the latest version (i think 0.57.1). It might be easier there.
Currently, everything is evaluated in the SWANK package/module. It might be a good idea to have something like a current interaction environment.
M-. (find-definition) is also missing. AFAICT, Scheme48 doesn't keep enough information around for a reliable M-. command. It's probably possible to find the package (module) for a definition and the default file for that package. ISTR, that Scheme48 can be configured differently, so that all interface/structure/package information is accessible in a central place. That might be a good idea. (In the default configuration, the information about modules is distributed, more or less randomly, in many different environments.)
The Swank code will very likely break if you grab a continuation and return to the Swank code a second time.
I haven't use the scheme48 stuff in anger but there are obvious limitations. If you want to use Scheme seriously, it might be easier to start from scratch, i.e., reimplement the Emacs Lisp side.
Helmut.
(defun slime48 () (interactive) (require 'slime) (let ((proc (slime-start-lisp "s48" (get-buffer-create "*s48*") (concat ",config\n" ",load " slime-path"swank-scheme48.scm\n" ",in swank\n" (format "(start-swank %S)" (slime-swank-port-file)) "\n")))) (slime-read-port-and-connect proc nil)))