# HG changeset patch # User Stefan Monnier # Date 1250649119 0 # Node ID 23a181f64ba5d6f13f892369651d0a75d459b3ec # Parent ffa2f09da5b29fe535ab671db4b2318fb00051ef (choose-completion-string): Don't rely on minibuffer-completing-file-name and ad-hoc checks to decide whether to continue completion or not. diff -r ffa2f09da5b2 -r 23a181f64ba5 lisp/ChangeLog --- a/lisp/ChangeLog Wed Aug 19 02:15:19 2009 +0000 +++ b/lisp/ChangeLog Wed Aug 19 02:31:59 2009 +0000 @@ -1,5 +1,9 @@ 2009-08-19 Stefan Monnier + * 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. diff -r ffa2f09da5b2 -r 23a181f64ba5 lisp/simple.el --- a/lisp/simple.el Wed Aug 19 02:15:19 2009 +0000 +++ b/lisp/simple.el Wed Aug 19 02:31:59 2009 +0000 @@ -368,7 +368,7 @@ (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 @@ (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 @@ (/= 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 @@ 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 @@ 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))