Mercurial > emacs
changeset 104345:23a181f64ba5
(choose-completion-string): Don't rely on minibuffer-completing-file-name
and ad-hoc checks to decide whether to continue completion or not.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Wed, 19 Aug 2009 02:31:59 +0000 |
parents | ffa2f09da5b2 |
children | a744eb12af2c |
files | lisp/ChangeLog lisp/simple.el |
diffstat | 2 files changed, 24 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- 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 <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.
--- 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))