comparison lisp/cus-edit.el @ 480:e07227fed94e

[xemacs-hg @ 2001-04-23 16:18:04 by didierv] Options saving: simple change, big gain
author didierv
date Mon, 23 Apr 2001 16:18:04 +0000
parents 6a8b2ec80a19
children 93749ba3e629
comparison
equal deleted inserted replaced
479:52626a2f02ef 480:e07227fed94e
560 (when (eq (widget-get child :custom-state) 'modified) 560 (when (eq (widget-get child :custom-state) 'modified)
561 (widget-apply child :custom-set))) 561 (widget-apply child :custom-set)))
562 children))) 562 children)))
563 563
564 (defun Custom-save () 564 (defun Custom-save ()
565 "Set all modified group members and save them." 565 "Set all modified options and save them."
566 (interactive) 566 (interactive)
567 (let ((children custom-options)) 567 (let ((all-children custom-options)
568 children)
568 (mapc (lambda (child) 569 (mapc (lambda (child)
569 (when (memq (widget-get child :custom-state) '(modified set)) 570 (when (memq (widget-get child :custom-state) '(modified set))
570 (widget-apply child :custom-save))) 571 (push child children)))
571 children)) 572 all-children)
572 (custom-save-all)) 573 (let ((the-children children)
574 child)
575 (while (setq child (pop the-children))
576 (widget-apply child :custom-pre-save)))
577 (custom-save-all)
578 (let ((the-children children)
579 child)
580 (while (setq child (pop the-children))
581 (widget-apply child :custom-post-save)))
582 ))
573 583
574 (defvar custom-reset-menu 584 (defvar custom-reset-menu
575 '(("Current" . Custom-reset-current) 585 '(("Current" . Custom-reset-current)
576 ("Saved" . Custom-reset-saved) 586 ("Saved" . Custom-reset-saved)
577 ("Standard Settings" . Custom-reset-standard)) 587 ("Standard Settings" . Custom-reset-standard))
608 children))) 618 children)))
609 619
610 (defun Custom-reset-standard (&rest ignore) 620 (defun Custom-reset-standard (&rest ignore)
611 "Reset all modified, set, or saved group members to their standard settings." 621 "Reset all modified, set, or saved group members to their standard settings."
612 (interactive) 622 (interactive)
613 (let ((children custom-options)) 623 (let ((all-children custom-options)
624 children must-save)
614 (mapc (lambda (child) 625 (mapc (lambda (child)
615 (when (memq (widget-get child :custom-state) '(modified set saved)) 626 (when (memq (widget-get child :custom-state) '(modified set saved))
616 (widget-apply child :custom-reset-standard))) 627 (push child children)))
617 children))) 628 all-children)
629 (let ((the-children children)
630 child)
631 (while (setq child (pop the-children))
632 (and (widget-apply child :custom-pre-reset-standard)
633 (setq must-save t))))
634 (and must-save (custom-save-all))
635 (let ((the-children children)
636 child)
637 (while (setq child (pop the-children))
638 (widget-apply child :custom-post-reset-standard)))
639 ))
618 640
619 641
620 ;;; The Customize Commands 642 ;;; The Customize Commands
621 643
622 (defun custom-prompt-variable (prompt-var prompt-val &optional comment) 644 (defun custom-prompt-variable (prompt-var prompt-val &optional comment)
1846 :custom-menu 'custom-variable-menu-create 1868 :custom-menu 'custom-variable-menu-create
1847 :custom-form nil ; defaults to value of `custom-variable-default-form' 1869 :custom-form nil ; defaults to value of `custom-variable-default-form'
1848 :value-create 'custom-variable-value-create 1870 :value-create 'custom-variable-value-create
1849 :action 'custom-variable-action 1871 :action 'custom-variable-action
1850 :custom-set 'custom-variable-set 1872 :custom-set 'custom-variable-set
1873 :custom-pre-save 'custom-variable-pre-save
1851 :custom-save 'custom-variable-save 1874 :custom-save 'custom-variable-save
1875 :custom-post-save 'custom-variable-post-save
1852 :custom-reset-current 'custom-redraw 1876 :custom-reset-current 'custom-redraw
1853 :custom-reset-saved 'custom-variable-reset-saved 1877 :custom-reset-saved 'custom-variable-reset-saved
1854 :custom-reset-standard 'custom-variable-reset-standard) 1878 :custom-pre-reset-standard 'custom-variable-pre-reset-standard
1879 :custom-reset-standard 'custom-variable-reset-standard
1880 :custom-post-reset-standard 'custom-variable-post-reset-standard)
1855 1881
1856 (defun custom-variable-type (symbol) 1882 (defun custom-variable-type (symbol)
1857 "Return a widget suitable for editing the value of SYMBOL. 1883 "Return a widget suitable for editing the value of SYMBOL.
1858 If SYMBOL has a `custom-type' property, use that. 1884 If SYMBOL has a `custom-type' property, use that.
1859 Otherwise, look up symbol in `custom-guess-type-alist'." 1885 Otherwise, look up symbol in `custom-guess-type-alist'."
2173 (put symbol 'variable-comment comment) 2199 (put symbol 'variable-comment comment)
2174 (put symbol 'customized-variable-comment comment))) 2200 (put symbol 'customized-variable-comment comment)))
2175 (custom-variable-state-set widget) 2201 (custom-variable-state-set widget)
2176 (custom-redraw-magic widget))) 2202 (custom-redraw-magic widget)))
2177 2203
2178 (defun custom-variable-save (widget) 2204 (defun custom-variable-pre-save (widget)
2179 "Set and save the value for the variable being edited by WIDGET." 2205 "Prepare for saving the value for the variable being edited by WIDGET."
2180 (let* ((form (widget-get widget :custom-form)) 2206 (let* ((form (widget-get widget :custom-form))
2181 (state (widget-get widget :custom-state)) 2207 (state (widget-get widget :custom-state))
2182 (child (car (widget-get widget :children))) 2208 (child (car (widget-get widget :children)))
2183 (symbol (widget-value widget)) 2209 (symbol (widget-value widget))
2184 (set (or (get symbol 'custom-set) 'set-default)) 2210 (set (or (get symbol 'custom-set) 'set-default))
2211 (put symbol 2237 (put symbol
2212 'saved-value (list (custom-quote (widget-value 2238 'saved-value (list (custom-quote (widget-value
2213 child)))) 2239 child))))
2214 (custom-push-theme 'theme-value symbol 'user 2240 (custom-push-theme 'theme-value symbol 'user
2215 'set (list (custom-quote (widget-value 2241 'set (list (custom-quote (widget-value
2216 child)))) 2242 child))))
2217 (funcall set symbol (widget-value child)) 2243 (funcall set symbol (widget-value child))
2218 (put symbol 'variable-comment comment) 2244 (put symbol 'variable-comment comment)
2219 (put symbol 'saved-variable-comment comment))) 2245 (put symbol 'saved-variable-comment comment)))
2220 (put symbol 'customized-value nil) 2246 (put symbol 'customized-value nil)
2221 (put symbol 'customized-variable-comment nil) 2247 (put symbol 'customized-variable-comment nil)
2222 (custom-save-all) 2248 ))
2223 (custom-variable-state-set widget) 2249
2224 (custom-redraw-magic widget))) 2250 (defun custom-variable-post-save (widget)
2251 "Finish saving the variable being edited by WIDGET."
2252 (custom-variable-state-set widget)
2253 (custom-redraw-magic widget))
2254
2255 (defun custom-variable-save (widget)
2256 "Set and save the value for the variable being edited by WIDGET."
2257 (custom-variable-pre-save widget)
2258 (custom-save-all)
2259 (custom-variable-post-save widget))
2225 2260
2226 (defun custom-variable-reset-saved (widget) 2261 (defun custom-variable-reset-saved (widget)
2227 "Restore the saved value for the variable being edited by WIDGET." 2262 "Restore the saved value for the variable being edited by WIDGET."
2228 (let* ((symbol (widget-value widget)) 2263 (let* ((symbol (widget-value widget))
2229 (set (or (get symbol 'custom-set) 'set-default)) 2264 (set (or (get symbol 'custom-set) 'set-default))
2240 (put symbol 'customized-variable-comment nil) 2275 (put symbol 'customized-variable-comment nil)
2241 (widget-put widget :custom-state 'unknown) 2276 (widget-put widget :custom-state 'unknown)
2242 ;; This call will possibly make the comment invisible 2277 ;; This call will possibly make the comment invisible
2243 (custom-redraw widget))) 2278 (custom-redraw widget)))
2244 2279
2245 (defun custom-variable-reset-standard (widget) 2280 ;; This function returns non nil if we need to re-save the options --dv.
2246 "Restore the standard setting for the variable being edited by WIDGET." 2281 (defun custom-variable-pre-reset-standard (widget)
2282 "Prepare for restoring the variable being edited by WIDGET to its
2283 standard setting."
2247 (let* ((symbol (widget-value widget)) 2284 (let* ((symbol (widget-value widget))
2248 (set (or (get symbol 'custom-set) 'set-default))) 2285 (set (or (get symbol 'custom-set) 'set-default)))
2249 (if (get symbol 'standard-value) 2286 (if (get symbol 'standard-value)
2250 (funcall set symbol (eval (car (get symbol 'standard-value)))) 2287 (funcall set symbol (eval (car (get symbol 'standard-value))))
2251 (signal 'error (list "No standard setting known for variable" symbol))) 2288 (signal 'error (list "No standard setting known for variable" symbol)))
2254 (put symbol 'customized-variable-comment nil) 2291 (put symbol 'customized-variable-comment nil)
2255 (when (or (get symbol 'saved-value) (get symbol 'saved-variable-comment)) 2292 (when (or (get symbol 'saved-value) (get symbol 'saved-variable-comment))
2256 (put symbol 'saved-value nil) 2293 (put symbol 'saved-value nil)
2257 (custom-push-theme 'theme-value symbol 'user 'reset 'standard) 2294 (custom-push-theme 'theme-value symbol 'user 'reset 'standard)
2258 ;; As a special optimizations we do not (explictly) 2295 ;; As a special optimizations we do not (explictly)
2259 ;; save resets to standard when no theme set the value. 2296 ;; save resets to standard when no theme sets the value.
2260 (if (null (cdr (get symbol 'theme-value))) 2297 (if (null (cdr (get symbol 'theme-value)))
2261 (put symbol 'theme-value nil)) 2298 (put symbol 'theme-value nil))
2262 (put symbol 'saved-variable-comment nil) 2299 (put symbol 'saved-variable-comment nil)
2263 (custom-save-all)) 2300 widget)
2264 (widget-put widget :custom-state 'unknown) 2301 ))
2265 ;; This call will possibly make the comment invisible 2302
2266 (custom-redraw widget))) 2303 (defun custom-variable-post-reset-standard (widget)
2304 "Finish resetting the variable being edited by WIDGET to its standard
2305 value."
2306 (widget-put widget :custom-state 'unknown)
2307 ;; This call will possibly make the comment invisible
2308 (custom-redraw widget))
2309
2310 (defun custom-variable-reset-standard (widget)
2311 "Restore the standard setting for the variable being edited by WIDGET."
2312 (when (custom-variable-pre-reset-standard widget)
2313 (custom-save-all))
2314 (custom-variable-post-reset-standard widget))
2315
2267 2316
2268 ;;; The `custom-face-edit' Widget. 2317 ;;; The `custom-face-edit' Widget.
2269 2318
2270 (define-widget 'custom-face-edit 'checklist 2319 (define-widget 'custom-face-edit 'checklist
2271 "Edit face attributes." 2320 "Edit face attributes."
2388 :value-create 'custom-face-value-create 2437 :value-create 'custom-face-value-create
2389 :action 'custom-face-action 2438 :action 'custom-face-action
2390 :custom-category 'face 2439 :custom-category 'face
2391 :custom-form nil ; defaults to value of `custom-face-default-form' 2440 :custom-form nil ; defaults to value of `custom-face-default-form'
2392 :custom-set 'custom-face-set 2441 :custom-set 'custom-face-set
2442 :custom-pre-save 'custom-face-pre-save
2393 :custom-save 'custom-face-save 2443 :custom-save 'custom-face-save
2444 :custom-post-save 'custom-face-post-save
2394 :custom-reset-current 'custom-redraw 2445 :custom-reset-current 'custom-redraw
2395 :custom-reset-saved 'custom-face-reset-saved 2446 :custom-reset-saved 'custom-face-reset-saved
2447 :custom-pre-reset-standard 'custom-face-pre-reset-standard
2396 :custom-reset-standard 'custom-face-reset-standard 2448 :custom-reset-standard 'custom-face-reset-standard
2449 :custom-post-reset-standard 'custom-face-post-reset-standard
2397 :custom-menu 'custom-face-menu-create) 2450 :custom-menu 'custom-face-menu-create)
2398 2451
2399 (define-widget 'custom-face-all 'editable-list 2452 (define-widget 'custom-face-all 'editable-list
2400 "An editable list of display specifications and attributes." 2453 "An editable list of display specifications and attributes."
2401 :entry-format "%i %d %v" 2454 :entry-format "%i %d %v"
2634 (put symbol 'customized-face-comment comment) 2687 (put symbol 'customized-face-comment comment)
2635 (put symbol 'face-comment comment) 2688 (put symbol 'face-comment comment)
2636 (custom-face-state-set widget) 2689 (custom-face-state-set widget)
2637 (custom-redraw-magic widget))) 2690 (custom-redraw-magic widget)))
2638 2691
2639 (defun custom-face-save (widget) 2692 (defun custom-face-pre-save (widget)
2640 "Make the face attributes in WIDGET default." 2693 "Prepare for saving the face being edited by WIDGET."
2641 (let* ((symbol (widget-value widget)) 2694 (let* ((symbol (widget-value widget))
2642 (child (car (widget-get widget :children))) 2695 (child (car (widget-get widget :children)))
2643 (value (widget-value child)) 2696 (value (widget-value child))
2644 (comment-widget (widget-get widget :comment-widget)) 2697 (comment-widget (widget-get widget :comment-widget))
2645 (comment (widget-value comment-widget))) 2698 (comment (widget-value comment-widget)))
2653 (custom-push-theme 'theme-face symbol 'user 'set value) 2706 (custom-push-theme 'theme-face symbol 'user 'set value)
2654 (put symbol 'customized-face nil) 2707 (put symbol 'customized-face nil)
2655 (put symbol 'face-comment comment) 2708 (put symbol 'face-comment comment)
2656 (put symbol 'customized-face-comment nil) 2709 (put symbol 'customized-face-comment nil)
2657 (put symbol 'saved-face-comment comment) 2710 (put symbol 'saved-face-comment comment)
2658 (custom-save-all) 2711 ))
2659 (custom-face-state-set widget) 2712
2660 (custom-redraw-magic widget))) 2713 (defun custom-face-post-save (widget)
2714 "Finish saving the face being edited by WIDGET."
2715 (custom-face-state-set widget)
2716 (custom-redraw-magic widget))
2717
2718 (defun custom-face-save (widget)
2719 "Save the face being edited by WIDGET."
2720 (custom-face-pre-save widget)
2721 (custom-save-all)
2722 (custom-face-post-save widget))
2661 2723
2662 (defun custom-face-reset-saved (widget) 2724 (defun custom-face-reset-saved (widget)
2663 "Restore WIDGET to the face's default attributes." 2725 "Reset the face being edited by WIDGET to its saved value."
2664 (let* ((symbol (widget-value widget)) 2726 (let* ((symbol (widget-value widget))
2665 (child (car (widget-get widget :children))) 2727 (child (car (widget-get widget :children)))
2666 (value (get symbol 'saved-face)) 2728 (value (get symbol 'saved-face))
2667 (comment (get symbol 'saved-face-comment)) 2729 (comment (get symbol 'saved-face-comment))
2668 (comment-widget (widget-get widget :comment-widget))) 2730 (comment-widget (widget-get widget :comment-widget)))
2676 ;; This call manages the comment visibility 2738 ;; This call manages the comment visibility
2677 (widget-value-set comment-widget (or comment "")) 2739 (widget-value-set comment-widget (or comment ""))
2678 (custom-face-state-set widget) 2740 (custom-face-state-set widget)
2679 (custom-redraw-magic widget))) 2741 (custom-redraw-magic widget)))
2680 2742
2681 (defun custom-face-reset-standard (widget) 2743 ;; This function returns non nil if we need to re-save the options --dv.
2682 "Restore WIDGET to the face's standard settings." 2744 (defun custom-face-pre-reset-standard (widget)
2745 "Prepare for restoring the face edited by WIDGET to its standard
2746 settings."
2683 (let* ((symbol (widget-value widget)) 2747 (let* ((symbol (widget-value widget))
2684 (child (car (widget-get widget :children))) 2748 (value (get symbol 'face-defface-spec)))
2685 (value (get symbol 'face-defface-spec))
2686 (comment-widget (widget-get widget :comment-widget)))
2687 (unless value 2749 (unless value
2688 (signal 'error (list "No standard setting for this face" symbol))) 2750 (signal 'error (list "No standard setting for this face" symbol)))
2689 (put symbol 'customized-face nil) 2751 (put symbol 'customized-face nil)
2690 (put symbol 'customized-face-comment nil) 2752 (put symbol 'customized-face-comment nil)
2691 (when (or (get symbol 'saved-face) (get symbol 'saved-face-comment)) 2753 (when (or (get symbol 'saved-face) (get symbol 'saved-face-comment))
2693 (custom-push-theme 'theme-face symbol 'user 'reset 'standard) 2755 (custom-push-theme 'theme-face symbol 'user 'reset 'standard)
2694 ;; Do not explictly save resets to standards without themes. 2756 ;; Do not explictly save resets to standards without themes.
2695 (if (null (cdr (get symbol 'theme-face))) 2757 (if (null (cdr (get symbol 'theme-face)))
2696 (put symbol 'theme-face nil)) 2758 (put symbol 'theme-face nil))
2697 (put symbol 'saved-face-comment nil) 2759 (put symbol 'saved-face-comment nil)
2698 (custom-save-all)) 2760 widget)
2761 ))
2762
2763 (defun custom-face-post-reset-standard (widget)
2764 "Finish restoring the face edited by WIDGET to its standard settings."
2765 (let* ((symbol (widget-value widget))
2766 (child (car (widget-get widget :children)))
2767 (value (get symbol 'face-defface-spec))
2768 (comment-widget (widget-get widget :comment-widget)))
2699 (face-spec-set symbol value nil '(custom)) 2769 (face-spec-set symbol value nil '(custom))
2700 (put symbol 'face-comment nil) 2770 (put symbol 'face-comment nil)
2701 (widget-value-set child value) 2771 (widget-value-set child value)
2702 ;; This call manages the comment visibility 2772 ;; This call manages the comment visibility
2703 (widget-value-set comment-widget "") 2773 (widget-value-set comment-widget "")
2704 (custom-face-state-set widget) 2774 (custom-face-state-set widget)
2705 (custom-redraw-magic widget))) 2775 (custom-redraw-magic widget)
2776 ))
2777
2778 (defun custom-face-reset-standard (widget)
2779 "Restore the face edited by WIDGET to its standard settings."
2780 (when (custom-face-pre-reset-standard widget)
2781 (custom-save-all))
2782 (custom-face-post-reset-standard widget))
2783
2706 2784
2707 ;;; The `face' Widget. 2785 ;;; The `face' Widget.
2708 2786
2709 (define-widget 'face 'default 2787 (define-widget 'face 'default
2710 "Select and customize a face." 2788 "Select and customize a face."
2873 :help-echo "Set or reset all members of this group" 2951 :help-echo "Set or reset all members of this group"
2874 :value-create 'custom-group-value-create 2952 :value-create 'custom-group-value-create
2875 :action 'custom-group-action 2953 :action 'custom-group-action
2876 :custom-category 'group 2954 :custom-category 'group
2877 :custom-set 'custom-group-set 2955 :custom-set 'custom-group-set
2956 :custom-pre-save 'custom-group-pre-save
2878 :custom-save 'custom-group-save 2957 :custom-save 'custom-group-save
2958 :custom-post-save 'custom-group-post-save
2879 :custom-reset-current 'custom-group-reset-current 2959 :custom-reset-current 'custom-group-reset-current
2880 :custom-reset-saved 'custom-group-reset-saved 2960 :custom-reset-saved 'custom-group-reset-saved
2961 :custom-pre-reset-standard 'custom-group-pre-reset-standard
2881 :custom-reset-standard 'custom-group-reset-standard 2962 :custom-reset-standard 'custom-group-reset-standard
2963 :custom-post-reset-standard 'custom-group-post-reset-standard
2882 :custom-menu 'custom-group-menu-create) 2964 :custom-menu 'custom-group-menu-create)
2883 2965
2884 (defun custom-group-sample-face-get (widget) 2966 (defun custom-group-sample-face-get (widget)
2885 ;; Use :sample-face. 2967 ;; Use :sample-face.
2886 (or (nth (1- (widget-get widget :custom-level)) custom-group-tag-faces) 2968 (or (nth (1- (widget-get widget :custom-level)) custom-group-tag-faces)
3185 (mapc (lambda (child) 3267 (mapc (lambda (child)
3186 (when (eq (widget-get child :custom-state) 'modified) 3268 (when (eq (widget-get child :custom-state) 'modified)
3187 (widget-apply child :custom-set))) 3269 (widget-apply child :custom-set)))
3188 children))) 3270 children)))
3189 3271
3190 (defun custom-group-save (widget) 3272 (defun custom-group-pre-save (widget)
3273 "Prepare for saving all modified group members."
3274 (let ((children (widget-get widget :children)))
3275 (mapc (lambda (child)
3276 (when (memq (widget-get child :custom-state) '(modified set))
3277 (widget-apply child :custom-pre-save)))
3278 children)))
3279
3280 (defun custom-group-post-save (widget)
3191 "Save all modified group members." 3281 "Save all modified group members."
3192 (let ((children (widget-get widget :children))) 3282 (let ((children (widget-get widget :children)))
3193 (mapc (lambda (child) 3283 (mapc (lambda (child)
3194 (when (memq (widget-get child :custom-state) '(modified set)) 3284 (when (memq (widget-get child :custom-state) '(modified set))
3195 (widget-apply child :custom-save))) 3285 (widget-apply child :custom-post-save)))
3196 children))) 3286 children)))
3287
3288 (defun custom-group-save (widget)
3289 "Save all modified group members."
3290 (custom-group-pre-save widget)
3291 (custom-save-all)
3292 (custom-group-post-save widget))
3197 3293
3198 (defun custom-group-reset-current (widget) 3294 (defun custom-group-reset-current (widget)
3199 "Reset all modified group members." 3295 "Reset all modified group members."
3200 (let ((children (widget-get widget :children))) 3296 (let ((children (widget-get widget :children)))
3201 (mapc (lambda (child) 3297 (mapc (lambda (child)
3209 (mapc (lambda (child) 3305 (mapc (lambda (child)
3210 (when (memq (widget-get child :custom-state) '(modified set)) 3306 (when (memq (widget-get child :custom-state) '(modified set))
3211 (widget-apply child :custom-reset-saved))) 3307 (widget-apply child :custom-reset-saved)))
3212 children))) 3308 children)))
3213 3309
3214 (defun custom-group-reset-standard (widget) 3310 ;; This function returns non nil when we need to re-save the options --dv.
3215 "Reset all modified, set, or saved group members." 3311 (defun custom-group-pre-reset-standard (widget)
3312 "Prepare for resetting all modified, set, or saved group members."
3313 (let ((children (widget-get widget :children))
3314 must-save)
3315 (mapc (lambda (child)
3316 (when (memq (widget-get child :custom-state)
3317 '(modified set saved))
3318 (and (widget-apply child :custom-pre-reset-standard)
3319 (setq must-save t))))
3320 children)
3321 must-save
3322 ))
3323
3324 (defun custom-group-post-reset-standard (widget)
3325 "Finish resetting all modified, set, or saved group members."
3216 (let ((children (widget-get widget :children))) 3326 (let ((children (widget-get widget :children)))
3217 (mapc (lambda (child) 3327 (mapc (lambda (child)
3218 (when (memq (widget-get child :custom-state) 3328 (when (memq (widget-get child :custom-state)
3219 '(modified set saved)) 3329 '(modified set saved))
3220 (widget-apply child :custom-reset-standard))) 3330 (widget-apply child :custom-post-reset-standard)))
3221 children))) 3331 children)))
3332
3333 (defun custom-group-reset-standard (widget)
3334 "Reset all modified, set, or saved group members."
3335 (when (custom-group-pre-reset-standard widget)
3336 (custom-save-all))
3337 (custom-group-post-reset-standard widget))
3222 3338
3223 (defun custom-group-state-update (widget) 3339 (defun custom-group-state-update (widget)
3224 "Update magic." 3340 "Update magic."
3225 (unless (eq (widget-get widget :custom-state) 'hidden) 3341 (unless (eq (widget-get widget :custom-state) 'hidden)
3226 (let* ((children (widget-get widget :children)) 3342 (let* ((children (widget-get widget :children))