# HG changeset patch # User Richard M. Stallman # Date 1027452053 0 # Node ID 0bbb6f2a6ddb30c8bbee0bb4149b0623fedd6036 # Parent 7715f3004d939bd8779f7792db6502b77e810b46 (widget-convert): Handle an argument that's a keyword. Recognize explicit :args specification. diff -r 7715f3004d93 -r 0bbb6f2a6ddb lisp/wid-edit.el --- a/lisp/wid-edit.el Tue Jul 23 19:19:32 2002 +0000 +++ b/lisp/wid-edit.el Tue Jul 23 19:20:53 2002 +0000 @@ -722,18 +722,32 @@ (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