Hi,
Although I'm not a big emacs guru, so things might be implemented simpler, but I did what I could with a resonable effort. Still you may or may not find this useful.
This is not a final patch for two reasons: first I'm not even sure it's worth it and if nobody is interested I will just keep it in my local repo. Second, it breaks current functionality: the one which continuously replaces text in the target buffer while you move up and down in the completion window with the current completion (selection). Personally I found that superfluous.
So this is a somewhat different end user experience for fuzzy completion. It is a little bit closer to the other non fuzzy completion in that it does not take the focus away from the buffer you are editing and there are some other minor differences.
I introduced a new minor mode called slime-fuzzy-target-buffer-completions-mode for the target buffer during fuzzy completion. You may find it usefull to bind your paredit open and close keys to (the ones bound to insert-parentheses and move-past-close-and-reindent) slime-fuzzy-select-and-process-event-in-target-buffer in the keymaps called slime-target-buffer-fuzzy-completions-map and slime-fuzzy-completions-map.
Here is how it works (- means not yet implemented):
When focus is in the target window (replace tab with your favorite key binding): + tab shows completion window if it was not open + tab updates completion window if there was editing since last time tab was pressed + tab implicitly completes if there's only one match + tab selects current completion if there were no editing since last tab (double tab) even if there are multiple matches + tab closes completion window if there are no matches at all - tab distinguishes between function and other symbols and puts an extra space before caret if mandatory parameters exists - tab puts the caret after the list in the target for unary function symbols + left/right moves caret in target window + up/down moves caret in completion window even though the focus is in the target window (changes current completion) + space/enter/(/) implicitly selects current completion and processes event in target window (paredit takes care about the rest) + normal editing operations allowed in target window - editing implicitly updates completion window in the background during editing (by a timer) + C-q closes completion window
When focus is in the completion window: + cursor keys navigate + tab/mouse2 selects current completion and closes completion window + space/enter/(/) selects current completion, closes completion window and processes event in the target window + q closes completion window
Cheers, levy