Index: slime.el
===================================================================
RCS file: /project/slime/cvsroot/slime/slime.el,v
retrieving revision 1.780
diff -u -r1.780 slime.el
--- slime.el	8 Apr 2007 22:56:00 -0000	1.780
+++ slime.el	11 Apr 2007 10:15:12 -0000
@@ -4755,7 +4755,7 @@
   (let ((notes (slime-compiler-notes)))
     (with-current-buffer buffer
       (setf slime-compilation-just-finished t)
-      (multiple-value-bind (result secs) result
+      (destructuring-bind (result secs) result
         (slime-show-note-counts notes secs)
         (when slime-highlight-compiler-notes
           (slime-highlight-notes notes))))
@@ -4763,7 +4763,7 @@
 
 (defun slime-compilation-finished-continuation ()
   (lexical-let ((buffer (current-buffer)))
-    (lambda (result) 
+    (lambda (result)
       (slime-compilation-finished result buffer))))
 
 (defun slime-highlight-notes (notes)
@@ -6389,6 +6389,43 @@
   fundamental-mode "Fuzzy Completions"
   "Major mode for presenting fuzzy completion results.
 
+When you run `slime-fuzzy-complete-symbol', the symbol token at
+point is completed using the Fuzzy Completion algorithm; this
+means that the token is taken as a sequence of characters and all
+the various possibilities that this sequence could meaningfully
+represent are offered as selectable choices, sorted by how well
+they deem to be a match for the token. (For instance, the first
+choice of completing on \"mvb\" would be \"multiple-value-bind\".)
+
+Therefore, a new buffer (*Fuzzy Completions*) will pop up that
+contains the different completion choices. Simultaneously, a
+special minor-mode will be temporarily enabled in the original
+buffer where you initiated fuzzy completion (also called the
+``target buffer'') in order to navigate through the *Fuzzy
+Completions* buffer without leaving.
+
+With focus in *Fuzzy Completions*:
+  Type `n' and `p' (`UP', `DOWN') to navigate between completions.
+  Type `RET' or `TAB' to select the completion near point. 
+  Type `q' to abort.
+
+With focus in the target buffer:
+  Type `UP' and `DOWN' to navigate between completions.
+  Type a character that does not constitute a symbol name
+  to insert the current choice and then that character (`(', `)',
+  `SPACE', `RET'.) Use `TAB' to simply insert the current choice.
+  Use C-g to abort.
+
+Alternatively, you can click <mouse-2> on a completion to select it.
+
+
+Complete listing of keybindings within the target buffer:
+
+\\<slime-target-buffer-fuzzy-completions-map>\
+\\{slime-target-buffer-fuzzy-completions-map}
+
+Complete listing of keybindings with *Fuzzy Completions*:
+
 \\<slime-fuzzy-completions-map>\
 \\{slime-fuzzy-completions-map}"
   (use-local-map slime-fuzzy-completions-map))
@@ -6495,9 +6532,8 @@
   (get-buffer-create "*Fuzzy Completions*"))
 
 (defvar slime-fuzzy-explanation
-  "Click <mouse-2> on a completion to select it.
-In this buffer, type n and p to navigate between completions.
-Type RET to select the completion near point.  Type q to abort.
+  "For help on how the use this buffer, see `slime-fuzzy-completions-mode'.
+
 Flags: boundp fboundp generic-function class macro special-operator package
 \n"
   "The explanation that gets inserted at the beginning of the
@@ -6574,7 +6610,8 @@
     (slime-fuzzy-fill-completions-buffer completions interrupted-p)
     (pop-to-buffer (slime-get-fuzzy-buffer))
     (when new-completion-buffer
-      (add-local-hook 'kill-buffer-hook 'slime-fuzzy-abort))
+      (add-local-hook 'kill-buffer-hook 'slime-fuzzy-abort)
+      (setq buffer-quit-function 'slime-fuzzy-abort)) ; M-Esc Esc
     (when slime-fuzzy-completion-in-place
       ;; switch back to the original buffer
       (switch-to-buffer-other-window slime-fuzzy-target-buffer))))
Index: swank.lisp
===================================================================
RCS file: /project/slime/cvsroot/slime/swank.lisp,v
retrieving revision 1.474
diff -u -r1.474 swank.lisp
--- swank.lisp	8 Apr 2007 23:07:53 -0000	1.474
+++ swank.lisp	11 Apr 2007 10:17:07 -0000
@@ -3863,7 +3863,7 @@
     (declare (type boolean time-limit-p))
     (declare (type integer time-limit rtime-at-start))
     (declare (type function converter))
-    (if (and time-limit (<= time-limit 0))
+    (if (and time-limit-p (<= time-limit 0))
         (values #() time-limit)
         (loop for package in (list-all-packages)
               for package-name   = (package-name package)
@@ -4103,9 +4103,10 @@
                                             (length (second chunk))))))
     highlit))
 
-(defun format-fuzzy-completions (winners)
+(defun format-fuzzy-completion-set (winners)
   "Given a list of completion objects such as on returned by
-FUZZY-COMPLETIONS, format the list into user-readable output."
+FUZZY-COMPLETION-SET, format the list into user-readable output
+for interactive debugging purpose."
   (let ((max-len 
          (loop for winner in winners maximizing (length (first winner)))))
     (loop for (sym score result) in winners do
