]> git.eshelyaron.com Git - emacs.git/commitdiff
(complete-in-turn): New macro.
authorStefan Monnier <monnier@iro.umontreal.ca>
Mon, 13 Jun 2005 20:45:50 +0000 (20:45 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Mon, 13 Jun 2005 20:45:50 +0000 (20:45 +0000)
(dynamic-completion-table, lazy-completion-table): Add debug info.

lisp/subr.el

index ca1d47fede82f08b628798dfbf88b832ea1d8bab..9371df1a7942e5ca653a7a848ae70a1d47d2e161 100644 (file)
@@ -1923,6 +1923,7 @@ entered.
 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 @@ ARGS.  FUN must return the completion table that will be stored in VAR.
 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))))))
 \f
 ;;; Matching and substitution