Function: completion--complete-and-exit
completion--complete-and-exit is a byte-compiled function defined in
minibuffer.el.gz.
Signature
(completion--complete-and-exit BEG END EXIT-FUNCTION COMPLETION-FUNCTION)
Documentation
Exit from require-match minibuffer.
COMPLETION-FUNCTION is called if the current buffer's content does not appear to be a match.
Source Code
;; Defined in /usr/src/emacs/lisp/minibuffer.el.gz
(defun completion--complete-and-exit (beg end
exit-function completion-function)
"Exit from `require-match' minibuffer.
COMPLETION-FUNCTION is called if the current buffer's content does not
appear to be a match."
(cond
;; Allow user to specify null string
((= beg end) (funcall exit-function))
;; The CONFIRM argument is a predicate.
((functionp minibuffer-completion-confirm)
(if (funcall minibuffer-completion-confirm
(buffer-substring beg end))
(funcall exit-function)
(unless completion-fail-discreetly
(ding)
(completion--message "No match"))))
;; See if we have a completion from the table.
((test-completion (buffer-substring beg end)
minibuffer-completion-table
minibuffer-completion-predicate)
;; FIXME: completion-ignore-case has various slightly
;; incompatible meanings. E.g. it can reflect whether the user
;; wants completion to pay attention to case, or whether the
;; string will be used in a context where case is significant.
;; E.g. usually try-completion should obey the first, whereas
;; test-completion should obey the second.
(when completion-ignore-case
;; Fixup case of the field, if necessary.
(let* ((string (buffer-substring beg end))
(compl (try-completion
string
minibuffer-completion-table
minibuffer-completion-predicate)))
(when (and (stringp compl) (not (equal string compl))
;; If it weren't for this piece of paranoia, I'd replace
;; the whole thing with a call to do-completion.
;; This is important, e.g. when the current minibuffer's
;; content is a directory which only contains a single
;; file, so `try-completion' actually completes to
;; that file.
(= (length string) (length compl)))
(completion--replace beg end compl))))
(funcall exit-function))
;; The user is permitted to exit with an input that's rejected
;; by test-completion, after confirming her choice.
((memq minibuffer-completion-confirm '(confirm confirm-after-completion))
(if (or (eq last-command this-command)
;; For `confirm-after-completion' we only ask for confirmation
;; if trying to exit immediately after typing TAB (this
;; catches most minibuffer typos).
(and (eq minibuffer-completion-confirm 'confirm-after-completion)
(not (memq last-command minibuffer-confirm-exit-commands))))
(funcall exit-function)
(minibuffer-message "Confirm")
nil))
(t
;; Call do-completion, but ignore errors.
(funcall completion-function))))