[slime-devel] Fuzzy completion

Levente Mészáros levente.meszaros at gmail.com
Sat May 13 21:30:25 UTC 2006


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

-- 
There's no perfectoin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: slime.el.fuzzy.patch
Type: text/x-patch
Size: 14873 bytes
Desc: not available
URL: <https://mailman.common-lisp.net/pipermail/slime-devel/attachments/20060513/d5eabcfa/attachment.bin>


More information about the slime-devel mailing list