New command icomplete-force-complete-and-exit

* lisp/icomplete.el (icomplete-force-complete-and-exit):
New command
(http://lists.gnu.org/archive/html/emacs-devel/2015-05/msg00461.html)
(http://lists.gnu.org/archive/html/emacs-devel/2015-05/msg00516.html).
(icomplete-minibuffer-map): Bind C-j to it.
(icomplete-forward-completions, icomplete-backward-completions):
Mention the new command in the docstring.

* lisp/minibuffer.el (minibuffer-force-complete-and-exit): Revert
the previous fix for bug#17545.
This commit is contained in:
Dmitry Gutov 2015-05-19 15:52:27 +03:00
parent e0fec8d3ca
commit 08033db08b
2 changed files with 19 additions and 13 deletions

View file

@ -149,16 +149,26 @@ icompletion is occurring."
(defvar icomplete-minibuffer-map
(let ((map (make-sparse-keymap)))
(define-key map [?\M-\t] 'minibuffer-force-complete)
(define-key map [?\C-j] 'minibuffer-force-complete-and-exit)
(define-key map [?\C-j] 'icomplete-force-complete-and-exit)
(define-key map [?\C-.] 'icomplete-forward-completions)
(define-key map [?\C-,] 'icomplete-backward-completions)
map)
"Keymap used by `icomplete-mode' in the minibuffer.")
(defun icomplete-force-complete-and-exit ()
"Complete the minibuffer and exit.
Use the first of the matches if there are any displayed, and use
the default otherwise."
(interactive)
(if (or icomplete-show-matches-on-no-input
(> (icomplete--field-end) (icomplete--field-beg)))
(minibuffer-force-complete-and-exit)
(minibuffer-complete-and-exit)))
(defun icomplete-forward-completions ()
"Step forward completions by one entry.
Second entry becomes the first and can be selected with
`minibuffer-force-complete-and-exit'."
`icomplete-force-complete-and-exit'."
(interactive)
(let* ((beg (icomplete--field-beg))
(end (icomplete--field-end))
@ -171,7 +181,7 @@ Second entry becomes the first and can be selected with
(defun icomplete-backward-completions ()
"Step backward completions by one entry.
Last entry becomes the first and can be selected with
`minibuffer-force-complete-and-exit'."
`icomplete-force-complete-and-exit'."
(interactive)
(let* ((beg (icomplete--field-beg))
(end (icomplete--field-end))

View file

@ -1241,16 +1241,12 @@ scroll the window of possible completions."
(defun minibuffer-force-complete-and-exit ()
"Complete the minibuffer with first of the matches and exit."
(interactive)
(if (and (eq (minibuffer-prompt-end) (point-max))
minibuffer-default)
;; Use the provided default if there's one (bug#17545).
(minibuffer-complete-and-exit)
(minibuffer-force-complete)
(completion--complete-and-exit
(minibuffer-prompt-end) (point-max) #'exit-minibuffer
;; If the previous completion completed to an element which fails
;; test-completion, then we shouldn't exit, but that should be rare.
(lambda () (minibuffer-message "Incomplete")))))
(minibuffer-force-complete)
(completion--complete-and-exit
(minibuffer-prompt-end) (point-max) #'exit-minibuffer
;; If the previous completion completed to an element which fails
;; test-completion, then we shouldn't exit, but that should be rare.
(lambda () (minibuffer-message "Incomplete"))))
(defun minibuffer-force-complete (&optional start end)
"Complete the minibuffer to an exact match.