Hi everybody,
I noticed that slime provides a function eval-in-emacs that sends a form to the emacs side where it is evaluated. However, I would like to get the results on the lisp side but I always get NIL.
Is there a different swank function for that? (in the emacs-lisp-interface from Franz I used a lep::eval-in-emacs that did precisely what I needed).
This is very useful to provide refactoring operations (that operate on the Lisp side) that need to interact with the user using emacs lisp operations such as y-or-n-p or read-from-minibuffer.
I know that it might be difficult to find a general scheme to translate from emacs lisp values to common lisp values but all I need is symbols, strings, numbers and such.
-----------------
A few years ago I developed a 'window'-debugger and 'window'-inspector for Ilisp+CMUCL similar to what I used in the Explorer Lisp Machines. I recently adapted it to Slime+Whatever-Common-Lisp-slime-supports. If anyone is interested I can post it. However, I would like to suggest two changes to Slime in order to improve its portability:
1. The function swank::inspected-parts should provide a recognizable value for unbound slots. Here is one example in SBCL
CL-USER> (defclass c () ((a))) #<STANDARD-CLASS C> CL-USER> (swank::inspected-parts (make-instance 'c)) "The object is a STANDARD-OBJECT of type C. " (("A" . #:INSPECT-UNBOUND-OBJECT-3530))
and in CLISP
CL-USER> (swank::inspected-parts (make-instance 'c)) "#<COMMON-LISP-USER::C #x20426856> standard object type: COMMON-LISP-USER::C" (("A" . INSPECT-TMP-PACKAGE-5413::|#<unbound>|))
I know that the returned values are recognizable (e.g., by being the value of the variable sb-impl::*inspect-unbound-object-marker* or something similar) but given the fact that it depends on the Common Lisp being used, it would be preferable if Slime provided a function that recognizes such value. If it already does, my apologies.
2. The function swank::frame-locals doesn't distinguish valid locals from invalid ones. I know that not all Common Lisps make that distinction but for the ones that make, it would be useful to get that information (for Common Lisps that don't provide such information a default could be chosen). Currently, Slime puts a :not-available as value which, IMHO, is error-prone. It would be nicer to have an extra field for each local that describes its status or (as in 1.) a slime function that recognizes such special value or as a third (and not so good) alternative, swank::frame-locals should not produce invalid locals.
Thanks in advance,
António Leitão.