I hope someone can help me with a few things I'm confused on.
I've trying to write a slime contrib (for the first time).
I have already written the common-lisp function which works fine.
But I want to write the elisp front-end to this function.
The elisp function should get the symbol at the point create a temporary
file name,
then it should call the common lisp function passing those two arguments.
After the CL function returns, emacs should open the file named by the tmp
file name.
There are several issues I'm not sure how to answer.
1. the symbol at the point has an implicit package name, I want the CL
function to receive the correct symbol. E.g. suppose the symbol is xyzzy
which is CL parses as abc::xyzzy (because if an in-package earlier in the
file), I want the CL function called with 'abc::xyzzy not with 'CL::xyzzy.
2. If I try to call the CL function using slime-eval with a string, then
CL understand the correct symbol, but slime-eval returns t before the CL
function returns, and when I call find-file, the file is not ready to open
yet.
3. If I try to call the CL function with slime-eval-async, then the CL
function receives the wrong symbol: CL::xyzzy rather than abc::xyzzy.
4. I would like to put the .lisp file also in the contrib directory, but
the CL code depends on c2mop. Does this pose a problem? What do I need to
assure that if a user loads the file that c2mop has
already been loaded? I.e., is there an asd file I need to create or modify?
If someone could point me in the right direction, it would be great.
BTW here is the elisp function as I currently have it.
(defun class-graph (class-name)
(interactive "P")
(let* ((class-name (or class-name
(slime-symbol-at-point)))
(tmp-file (make-temp-file (format "%s-" class-name) nil ".png")))
(cond
((slime-eval
(format "(class-graph:class-graph-for-slime '%s %S)"
class-name
tmp-file))
;; this does not work, becasue tmp-file is not ready as
class-graph-for-slime has not yet finished.
(find-file tmp-file)
(image-mode-fit-frame))
(t
(error "failed to create graph in %s" tmp-file)))))