1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-15 10:30:25 -08:00

(complete-with-action): Backport from trunk (for vc-arch.el).

(dynamic-completion-table): Use it it.
This commit is contained in:
Stefan Monnier 2007-08-23 18:42:38 +00:00
parent 5e835c9f55
commit a621c46e3e
2 changed files with 36 additions and 4 deletions

View file

@ -2509,6 +2509,20 @@ The value returned is the value of the last form in BODY."
;;;; Constructing completion tables.
(defun complete-with-action (action table string pred)
"Perform completion ACTION.
STRING is the string to complete.
TABLE is the completion table, which should not be a function.
PRED is a completion predicate.
ACTION can be one of nil, t or `lambda'."
;; (assert (not (functionp table)))
(funcall
(cond
((null action) 'try-completion)
((eq action t) 'all-completions)
(t 'test-completion))
string table pred))
(defmacro dynamic-completion-table (fun)
"Use function FUN as a dynamic completion table.
FUN is called with one argument, the string for which completion is required,
@ -2530,10 +2544,7 @@ that can be used as the ALIST argument to `try-completion' and
(with-current-buffer (let ((,win (minibuffer-selected-window)))
(if (window-live-p ,win) (window-buffer ,win)
(current-buffer)))
(cond
((eq ,mode t) (all-completions ,string (,fun ,string) ,predicate))
((not ,mode) (try-completion ,string (,fun ,string) ,predicate))
(t (test-completion ,string (,fun ,string) ,predicate)))))))
(complete-with-action ,mode (,fun ,string) ,string ,predicate)))))
(defmacro lazy-completion-table (var fun)
;; We used to have `&rest args' where `args' were evaluated late (at the