       (let* ((dir (file-name-directory path))
              (file-portion (file-name-nondirectory path))
              (normalized-dir (lusty-normalize-dir dir)))
-        (unless (string= dir normalized-dir)
-          ;; Clean up the path in the minibuffer.
-          (lusty-set-minibuffer-text normalized-dir file-portion)))
-      (lusty-update-matches-buffer t))))
-
-; STEVE rename?
-(defun lusty-buffer-explorer-minibuffer-tab-complete ()
-  (lusty-update-matches-buffer t))
+        ;; Clean up the path when selecting in case we recurse
+        (lusty-set-minibuffer-text normalized-dir entry)
+        (if (file-directory-p (concat normalized-dir entry))
+            (lusty-update-matches-buffer)
+          (minibuffer-complete-and-exit))))))
+
+(defun lusty--buffer-explorer-select (entry)
+  (lusty-set-minibuffer-text entry)
+  (minibuffer-complete-and-exit))
 
 ;; This may seem overkill, but it's the only way I've found to update the
 ;; matches list for every edit to the minibuffer.  Wrapping the keymap can't

(defun lusty--run (read-fn)
  (add-hook 'post-command-hook 'lusty--post-command-function t)
  (let ((lusty--highlighted-index 0)
        ; STEVE move
        (minibuffer-local-completion-map lusty-mode-map)
        (minibuffer-local-filename-completion-map lusty-mode-map))

  (and (file-directory-p dir)
       dir))

(defun lusty-complete-env-variable (path)
  "Look for an environment variable in PATH and try to complete it as
much as possible."
