Mercurial > emacs
changeset 63381:23b1ef64a00e
(complete-in-turn): New macro.
(dynamic-completion-table, lazy-completion-table): Add debug info.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Mon, 13 Jun 2005 20:45:50 +0000 |
parents | 10ceeb0364c5 |
children | 9cbfa983c1cf |
files | lisp/subr.el |
diffstat | 1 files changed, 19 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/subr.el Mon Jun 13 19:33:21 2005 +0000 +++ b/lisp/subr.el Mon Jun 13 20:45:50 2005 +0000 @@ -1923,6 +1923,7 @@ The result of the `dynamic-completion-table' form is a function that can be used as the ALIST argument to `try-completion' and `all-completion'. See Info node `(elisp)Programmed Completion'." + (declare (debug (lambda-expr))) (let ((win (make-symbol "window")) (string (make-symbol "string")) (predicate (make-symbol "predicate")) @@ -1944,12 +1945,29 @@ If completion is requested in the minibuffer, FUN will be called in the buffer from which the minibuffer was entered. The return value of `lazy-completion-table' must be used to initialize the value of VAR." + (declare (debug (symbol lambda-expr def-body))) (let ((str (make-symbol "string"))) `(dynamic-completion-table (lambda (,str) (unless (listp ,var) - (setq ,var (funcall ',fun ,@args))) + (setq ,var (,fun ,@args))) ,var)))) + +(defmacro complete-in-turn (a b) + "Create a completion table that first tries completion in A and then in B. +A and B should not be costly (or side-effecting) expressions." + (declare (debug (def-form def-form))) + `(lambda (string predicate mode) + (cond + ((eq mode t) + (or (all-completions string ,a predicate) + (all-completions string ,b predicate))) + ((eq mode nil) + (or (try-completion string ,a predicate) + (try-completion string ,b predicate))) + (t + (or (test-completion string ,a predicate) + (test-completion string ,b predicate)))))) ;;; Matching and substitution