On 10/21/06, Ury Marshak urym@two-bytes.com wrote:
Attila Lendvai wrote:
- (add-local-hook 'pre-command-hook 'slime-pre-command-hook)
add-local-hook seems to be missing from GNU emacs. Quick googling suggests adding:
(or (fboundp 'add-local-hook) (defun add-local-hook (hook function &optional append) (make-local-hook hook) (add-hook hook function append t)))
(or (fboundp 'remove-local-hook) (defun remove-local-hook (hook function) (if (local-variable-p hook (current-buffer)) (remove-hook hook function t))))
thanks, i've added these. i checked the things that i use but this one seems to slip through. seems like it's time to set up an emacs env, too...
Also, after fixing add-local-hook, when trying
slime-fuzzy-completion-in-place it seems to break it for me even further - without the patch at least the arrow keys in the target buffer work, with this patch even arrows stop working (they work as in normal buffer, but do not move selection in the completion buffer)
This is on CVS HEAD GNU Emacs
hm, if it is still broken with this patch then it would be very helpful if you could take a look at slime-target-buffer-fuzzy-completions-map and slime-fuzzy-completions-map and check if the bindings themselves are broken (which is probably the case, because that's changed in that previous patch).
there's some new heuristic in this patch that it first tries to look up the operation's binding in the global-map and only use the default (arrow keys) when nothing was found. this may turn out to be a bad idea, but for now i made it a bit smarter to mimic all bound keys of the operations from global-map. i hope this will help, or if not, the bug can be fixed. some people don't use the arrow keys on laptops, etc... it's a big help for them (when working :)
and finally there's another speedup with large set of symbols (there was a costly remove-duplicates call):
CL-USER> (progn (sb-ext:gc :full t) (length (time (swank::fuzzy-find-matching-symbols "" "SB-PCL" nil)))) Evaluation took: 1.41 seconds of real time 1.166823 seconds of user run time 0.0 seconds of system run time 0 calls to %EVAL 0 page faults and 323,088 bytes consed. 4923
CL-USER> (progn (sb-ext:gc :full t) (length (time (swank::fuzzy-find-matching-symbols "" "SB-PCL" nil)))) Evaluation took: 0.037 seconds of real time 0.028996 seconds of user run time 0.001 seconds of system run time 0 calls to %EVAL 0 page faults and 772,240 bytes consed. 4931
the speedup is only this radical when we are processing the entire package without any input, though. the small difference in the length is coming from the new method comparing the symbols with 'eq as opposed to the old one comparing strings with 'equal at the very end. so there may be a few duplicates in rare situations.
2006-10-21 Attila Lendvai attila.lendvai@gmail.com
* slime.el (slime-setup-command-hooks): Use make-local-hook. (slime-repl-mode): Ditto. (slime-fuzzy-choices-buffer): Ditto. (sldb-mode): Ditto. (slime-fuzzy-completion-limit): New variable. (slime-fuzzy-completion-time-limit-in-msec): New variable. (slime-fuzzy-next): Fix when at the end of the buffer. (completion-output-symbol-converter): New to handle escaped symbols for those who need to mess around with symbols like layered-function-definers::|CONTEXTL::SLOT-VALUE-USING-LAYER|. When a symbol is escaped then completion is case sensitive. (completion-output-package-converter): New. (mimic-key-bindings): New to easily define bindings by first trying to look up bindings for an operation and only use the provided default bindings if nothing was found in the source keymap. Use it to set up fuzzy bindings. (Hint: if you have keys like previous-line customized, then only load slime after they have been set, and the fuzzy mode will mimic them.) (slime-temp-buffer-quit): Always close the opened window, updated docstring. Also made the fuzzy maps smarter, they now try to look up keys with 'where-is-internal and map the functions on them.
* swank-sbcl.lisp (make-weak-value-hash-table): New for sbcl. (make-weak-key-hash-table): New for sbcl.
* swank.lisp (fuzzy-completions and friends): Added :limit and :time-limit-in-msec keyword params. Used vectors instead of lists that nearly doubled its speed (at least on sbcl). Also added some declare optimize and type annotations. (do-symbols*): New, uses a hash-table to visit only non-seen symbols. Replaced various uses of do-symbols where it was appropiate.