]> code.delx.au - gnu-emacs/commitdiff
(choose-completion-string): Don't rely on minibuffer-completing-file-name
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 19 Aug 2009 02:31:59 +0000 (02:31 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Wed, 19 Aug 2009 02:31:59 +0000 (02:31 +0000)
and ad-hoc checks to decide whether to continue completion or not.

lisp/ChangeLog
lisp/simple.el

index ad3d029edd711cb089ee53ba3c05bba1ca619859..930defaae0241397fcdeebf8b4da4c57b167847a 100644 (file)
@@ -1,5 +1,9 @@
 2009-08-19  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+       * simple.el (choose-completion-string): Don't rely on
+       minibuffer-completing-file-name and ad-hoc checks to decide whether
+       to continue completion or not.
+
        * minibuffer.el (minibuffer-hide-completions): New function.
        (completion--do-completion): Use it.
        (completions-annotations): New face.
index a01073c5d70d7c67c4714d8c871b1a58388e4c19..c8e537cdf5084bc066f64fd56eb9d6194215ddb7 100644 (file)
@@ -368,7 +368,7 @@ select the source buffer."
   (interactive "p")
   (next-error-no-select (- (or n 1))))
 
-;;; Internal variable for `next-error-follow-mode-post-command-hook'.
+;; Internal variable for `next-error-follow-mode-post-command-hook'.
 (defvar next-error-follow-last-line nil)
 
 (define-minor-mode next-error-follow-minor-mode
@@ -382,8 +382,8 @@ location."
     (add-hook 'post-command-hook 'next-error-follow-mode-post-command-hook nil t)
     (make-local-variable 'next-error-follow-last-line)))
 
-;;; Used as a `post-command-hook' by `next-error-follow-mode'
-;;; for the *Compilation* *grep* and *Occur* buffers.
+;; Used as a `post-command-hook' by `next-error-follow-mode'
+;; for the *Compilation* *grep* and *Occur* buffers.
 (defun next-error-follow-mode-post-command-hook ()
   (unless (equal next-error-follow-last-line (line-number-at-pos))
     (setq next-error-follow-last-line (line-number-at-pos))
@@ -4475,8 +4475,8 @@ To ignore intangibility, bind `inhibit-point-motion-hooks' to t."
                                     (/= arg 1) t nil)))))
 
 
-;;; Many people have said they rarely use this feature, and often type
-;;; it by accident.  Maybe it shouldn't even be on a key.
+;; Many people have said they rarely use this feature, and often type
+;; it by accident.  Maybe it shouldn't even be on a key.
 (put 'set-goal-column 'disabled t)
 
 (defun set-goal-column (arg)
@@ -5855,13 +5855,19 @@ to decide what to delete."
             minibuffer-completion-table
             ;; If this is reading a file name, and the file name chosen
             ;; is a directory, don't exit the minibuffer.
-            (if (and minibuffer-completing-file-name
-                     (file-directory-p (field-string (point-max))))
-                (let ((mini (active-minibuffer-window)))
-                  (select-window mini)
-                  (when minibuffer-auto-raise
-                    (raise-frame (window-frame mini))))
-              (exit-minibuffer)))))))
+             (let* ((result (buffer-substring (field-beginning) (point)))
+                    (bounds
+                     (completion-boundaries result minibuffer-completion-table
+                                            minibuffer-completion-predicate
+                                            "")))
+               (if (eq (car bounds) (length result))
+                   ;; The completion chosen leads to a new set of completions
+                   ;; (e.g. it's a directory): don't exit the minibuffer yet.
+                   (let ((mini (active-minibuffer-window)))
+                     (select-window mini)
+                     (when minibuffer-auto-raise
+                       (raise-frame (window-frame mini))))
+                 (exit-minibuffer))))))))
 
 (define-derived-mode completion-list-mode nil "Completion List"
   "Major mode for buffers showing lists of possible completions.
@@ -6319,8 +6325,8 @@ have both Backspace, Delete and F1 keys.
 See also `normal-erase-is-backspace'."
   (interactive "P")
   (let ((enabled (or (and arg (> (prefix-numeric-value arg) 0))
-                    (and (not arg)
-                         (not (eq 1 (terminal-parameter
+                    (not (or arg
+                              (eq 1 (terminal-parameter
                                      nil 'normal-erase-is-backspace)))))))
     (set-terminal-parameter nil 'normal-erase-is-backspace
                            (if enabled 1 0))