]> git.eshelyaron.com Git - emacs.git/commitdiff
(widget-convert): Handle an argument that's a keyword.
authorRichard M. Stallman <rms@gnu.org>
Tue, 23 Jul 2002 19:20:53 +0000 (19:20 +0000)
committerRichard M. Stallman <rms@gnu.org>
Tue, 23 Jul 2002 19:20:53 +0000 (19:20 +0000)
Recognize explicit :args specification.

lisp/wid-edit.el

index 3fcb58d78f06fe0a1d2d0a9950aa3704b3faaa21..65c2c6fb28b0200eb6126139a286886429a3e6ec 100644 (file)
@@ -722,18 +722,32 @@ The optional ARGS are additional keyword arguments."
                     (list type)
                   (copy-sequence type)))
         (current widget)
+        done
         (keys args))
     ;; First set the :args keyword.
     (while (cdr current)               ;Look in the type.
-      (if (keywordp (car (cdr current)))
-         (setq current (cdr (cdr current)))
+      (if (and (keywordp (cadr current))
+              ;; If the last element is a keyword,
+              ;; it is still the :args element,
+              ;; even though it is a keyword.
+              (cddr current))
+         (if (eq (cadr current) :args)
+             ;; If :args is explicitly specified, obey it.
+             (setq current nil)
+           ;; Some other irrelevant keyword.
+           (setq current (cdr (cdr current))))
        (setcdr current (list :args (cdr current)))
        (setq current nil)))
-    (while args                                ;Look in the args.
-      (if (keywordp (nth 0 args))
-         (setq args (nthcdr 2 args))
-       (widget-put widget :args args)
-       (setq args nil)))
+    (while (and args (not done))       ;Look in ARGS.
+      (cond ((eq (car args) :args)
+            ;; Handle explicit specification of :args.
+            (setq args (cadr args)
+                  done t))
+           ((keywordp (car args))
+            (setq args (cddr args)))
+           (t (setq done t))))
+    (when done
+      (widget-put widget :args args))
     ;; Then Convert the widget.
     (setq type widget)
     (while type