"Sean O'Rourke" sorourke@cs.ucsd.edu writes:
This patch lets SLIME support Eldoc (i.e. flashing argument lists in the minibuffer). Inspired by semantic/cedet, which does this for many languages.
Nice idea! I haven't seen Eldoc before.
Could we use our own `post-command-hook' instead of advising eldoc? That seems safer to me (in terms of avoiding accidentally getting elisp-specific information in common lisp buffers). Would it do the same thing?
I dig Eldoc and I'd like to commit support in SLIME. I have a couple of requests though. The first is a boring portability issue - Emacs20 doesn't have hashtables, so they're a luxury we can't afford. I think symbol property lists could be used for the cache instead though. The next question is - do we need a cache? If so, I'd like to skip the cache for 'spacebar' arglist lookups, just to make sure it gets refreshed when needed. Sound ok?
BTW, the fix for the problem Andras mentioned is this:
(slime-eval-async
`(swank:arglist-string ,symbol-name)
(slime-buffer-package)
(lexical-let ((symbol-name symbol-name)
Add this line: (show show))
(lambda (arglist)
(funcall show "%s"
(setf (gethash symbol-name slime-arglist-cache)
(slime-format-arglist symbol-name arglist)))))))))
This is because `slime-eval-async' returns right away, but queues up its continuation argument to be funcall'd later when Lisp sends the result back. So by the time the function is called, all the dynamic bindings are undone - any variables needed in the continuation have to be moved into lexical bindings.
Cheers, Luke