Function: completion-preview--try-table
completion-preview--try-table is a byte-compiled function defined in
completion-preview.el.gz.
Signature
(completion-preview--try-table TABLE BEG END PROPS)
Documentation
Check TABLE for a completion matching the text between BEG and END.
PROPS is a property list with additional information about TABLE.
See completion-at-point-functions for more details.
If TABLE contains a matching candidate, return a list
(BASE COMMON SUFFIXES) where BASE is a prefix of the text
between BEG and END that TABLE elided from the start of each candidate,
COMMON is the longest common prefix of all matching candidates,
SUFFIXES is a list of different suffixes that together with COMMON yield
the matching candidates. If TABLE does not contain matching
candidates or if there are multiple matching completions and
completion-preview-exact-match-only is non-nil, return nil instead.
Source Code
;; Defined in /usr/src/emacs/lisp/completion-preview.el.gz
(defun completion-preview--try-table (table beg end props)
"Check TABLE for a completion matching the text between BEG and END.
PROPS is a property list with additional information about TABLE.
See `completion-at-point-functions' for more details.
If TABLE contains a matching candidate, return a list
\(BASE COMMON SUFFIXES) where BASE is a prefix of the text
between BEG and END that TABLE elided from the start of each candidate,
COMMON is the longest common prefix of all matching candidates,
SUFFIXES is a list of different suffixes that together with COMMON yield
the matching candidates. If TABLE does not contain matching
candidates or if there are multiple matching completions and
`completion-preview-exact-match-only' is non-nil, return nil instead."
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; | buffer text | preview | ;;
;; | | | ;;
;; beg end | ;;
;; |------+------|--+--------| Each of base, common and suffix ;;
;; | base | common | suffix | <- may be empty, except common and ;;
;; suffix cannot both be empty. ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(let* ((pred (plist-get props :predicate))
(string (buffer-substring beg end))
(completion-extra-properties props)
(md (completion-metadata string table pred))
(sort-fn (or (completion-metadata-get md 'cycle-sort-function)
(completion-metadata-get md 'display-sort-function)
completion-preview-sort-function))
(all (let ((completion-lazy-hilit t)
;; FIXME: This does not override styles prescribed
;; by the completion category via
;; e.g. `completion-category-defaults'.
(completion-styles completion-preview-completion-styles))
(completion-all-completions string table pred
(- (point) beg) md)))
(last (last all))
(base (or (cdr last) 0))
(prefix (substring string base)))
(when last
(setcdr last nil)
(when-let ((sorted (funcall sort-fn
(delete prefix (all-completions prefix all))))
(common (try-completion prefix sorted))
(lencom (length common))
(suffixes sorted))
(unless (and (cdr suffixes) completion-preview-exact-match-only)
;; Remove the common prefix from each candidate.
(while sorted
(setcar sorted (substring (car sorted) lencom))
(setq sorted (cdr sorted)))
(list (substring string 0 base) common suffixes))))))