help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Custom type for "&rest props" style arguments?


From: Kevin Rodgers
Subject: Re: Custom type for "&rest props" style arguments?
Date: Thu, 12 Jan 2006 10:12:03 -0700
User-agent: Mozilla Thunderbird 0.9 (X11/20041105)

Reiner Steib wrote:
Hi,

I'd like to have a customizable list as follows:

(defcustom rs-test-list
  '((gnus-summary-save-newsrc "save" nil :visible nil)
    (gnus-summary-print-article "print")
        (gnus-summary-edit-article
     "search" nil :visible (not (gnus-group-read-only-p))))
  "List of tool bar function items.

The first element of each item must be a menu command.  The
second must be an icon file name.  The first two elements are
required, all other are optinal.  The third argument is a keymap
or nil (default keymap).  The forth and all following arguments
are passed as the PROPS argument to `tool-bar-local-item'."
  :type '(repeat (list (function :tag "Menu Command")
                       (string   :tag "Icon file")
                       (choice (const :tag "Default map" nil)
                               (sexp :tag "Other map"))
                       (choice :tag "Properties"
                               (const :tag "None" nil)
                               (sexp :tag "Other")))))

My problem is how to express "the forth and all following arguments"
as a custom type.  My code results in a "mismatch" when calling `M-x
customize-variable RET rs-test-list RET'.  The "Properties" are
supposed to be passed as the PROPS argument to `tool-bar-local-item':

,----[ <f1> f tool-bar-local-item RET ]
| tool-bar-local-item is a compiled Lisp function in `tool-bar.el'.
| (tool-bar-local-item ICON DEF KEY MAP &rest PROPS)
| | Add an item to the tool bar in map MAP.
| ICON names the image, DEF is the key definition and KEY is a symbol
| for the fake function key in the menu keymap.  Remaining arguments
| PROPS are additional items to add to the menu item specification.  See
| Info node `(elisp)Tool Bar'.  [...]
`----

Here is an attempt for a defcustom of a single element:

(defcustom rs-test-item
  '(gnus-summary-save-newsrc "save" nil :visible nil) ;; -> mismatch
  ;; '(gnus-summary-print-article "print") ;; -> works
  ;; '(gnus-summary-edit-article
  ;;   "search" nil :visible (not (gnus-group-read-only-p))) ;; -> mismatch
  "A single item for testing."
  :type '(list (function :tag "Menu Command")
               (string   :tag "Icon file name")
               (choice (const :tag "Default map" nil)
                       (const :tag "No menu" t)
                       (sexp :tag "Other map"))
               (choice :tag "Properties"
                       (const :tag "None" nil)
                       (sexp  :tag "Other"))))

(Instead of `:visible test-function' there could also arbitrary other
arguments accepted by `tool-bar-local-item' such as `:help "Do
this"')

Any hints?

I think you need the list widget's :inline keyword, described in the
"composite" node of the widget manual, perhaps like this:

(repeat :tag "Properties" :inline t
        (list :inline t
              ;; is there a keyword type, instead of symbol?
              (symbol :tag "Property") (sexp :tag "Value")))

--
Kevin Rodgers





reply via email to

[Prev in Thread] Current Thread [Next in Thread]