GNU Info

Info Node: (elisp)Simple Types

(elisp)Simple Types


Next: Composite Types Up: Customization Types
Enter node , (file) or (file)node

Simple Types
------------

   This section describes all the simple customization types.

`sexp'
     The value may be any Lisp object that can be printed and read
     back.  You can use `sexp' as a fall-back for any option, if you
     don't want to take the time to work out a more specific type to
     use.

`integer'
     The value must be an integer, and is represented textually in the
     customization buffer.

`number'
     The value must be a number, and is represented textually in the
     customization buffer.

`string'
     The value must be a string, and the customization buffer shows
     just the contents, with no delimiting `"' characters and no
     quoting with `\'.

`regexp'
     Like `string' except that the string must be a valid regular
     expression.

`character'
     The value must be a character code.  A character code is actually
     an integer, but this type shows the value by inserting the
     character in the buffer, rather than by showing the number.

`file'
     The value must be a file name, and you can do completion with
     `M-<TAB>'.

`(file :must-match t)'
     The value must be a file name for an existing file, and you can do
     completion with `M-<TAB>'.

`directory'
     The value must be a directory name, and you can do completion with
     `M-<TAB>'.

`hook'
     The value must be a list of functions (or a single function, but
     that is obsolete usage).  This customization type is used for hook
     variables.  You can use the `:options' keyword in a hook variable's
     `defcustom' to specify a list of functions recommended for use in
     the hook; see Note: Variable Definitions.

`alist'
     The value must be a list of cons-cells, the CAR of each cell
     representing a key, and the CDR of the same cell representing an
     associated value.  The user can add and delete key/value pairs, and
     edit both the key and the value of each pair.

     You can specify the key and value types like this:

          (alist :key-type KEY-TYPE :value-type VALUE-TYPE)

     where KEY-TYPE and VALUE-TYPE are customization type
     specifications.  The default key type is `sexp', and the default
     value type is `sexp'.

     The user can add any key matching the specified key type, but you
     can give some keys a preferential treatment by specifying them
     with the `:options' (see Note: Variable Definitions).  The
     specified keys will always be shown in the customize buffer
     (together with a suitable value), with a checkbox to include or
     exclude or disable the key/value pair from the alist.  The user
     will not be able to edit the keys specified by the `:options'
     keyword argument.

     The argument to the `:options' keywords should be a list of option
     specifications.  Ordinarily, the options are simply atoms, which
     are the specified keys.  For example:

          :options '("foo" "bar" "baz")

     specifies that there are three "known" keys, namely `"foo"',
     `"bar"' and `"baz"', which will always be shown first.

     You may want to restrict the value type for specific keys, for
     example, the value associated with the `"bar"' key can only be an
     integer.  You can specify this by using a list instead of an atom
     in the option specification.  The first element will specify the
     key, like before, while the second element will specify the value
     type.

          :options '("foo" ("bar" integer) "baz")

     Finally, you may want to change how the key is presented.  By
     default, the key is simply shown as a `const', since the user
     cannot change the special keys specified with the `:options'
     keyword.  However, you may want to use a more specialized type for
     presenting the key, like `function-item' if you know it is a
     symbol with a function binding.  This is done by using a
     customization type specification instead of a symbol for the key.

          :options '("foo" ((function-item some-function) integer) "baz")

     Many alists use lists with two elements, instead of cons cells.
     For example,

          (defcustom list-alist '(("foo" 1) ("bar" 2) ("baz" 3))
            "Each element is a list of the form (KEY VALUE).")

     instead of

          (defcustom cons-alist '(("foo" . 1) ("bar" . 2) ("baz" . 3))
            "Each element is a cons-cell (KEY . VALUE).")

     Because of the way lists are implemented on top of cons cells, you
     can treat `list-alist' in the example above as a cons cell alist,
     where the value type is a list with a single element containing
     the real value.

          (defcustom list-alist '(("foo" 1) ("bar" 2) ("baz" 3))
            "Each element is a list of the form (KEY VALUE)."
            :type '(alist :value-type (group integer)))

     The `group' widget is used here instead of `list' only because the
     formatting is better suited for the purpose.

     Similarily, you can have alists with more values associated with
     each key, using variations of this trick:

          (defcustom person-data '(("brian"  50 t)
                                   ("dorith" 55 nil)
                                   ("ken"    52 t))
            "Alist of basic info about people.
          Each element has the form (NAME AGE MALE-FLAG)."
            :type '(alist :value-type (group age boolean)))
          
          (defcustom pets '(("brian")
                            ("dorith" "dog" "guppy")
                            ("ken" "cat"))
            "Alist of people's pets.
          In an element (KEY . VALUE), KEY is the person's name,
          and the VALUE is a list of that person's pets."
            :type '(alist :value-type (repeat string)))

`plist'
     The `plist' custom type is similar to the `alist' (see above),
     except that the information is stored as a property list, i.e. a
     list of this form:

          (KEY VALUE KEY VALUE KEY VALUE ...)

     The default `:key-type' for `plist' is `symbol', rather than
     `sexp'.

`symbol'
     The value must be a symbol.  It appears in the customization
     buffer as the name of the symbol.

`function'
     The value must be either a lambda expression or a function name.
     When it is a function name, you can do completion with `M-<TAB>'.

`variable'
     The value must be a variable name, and you can do completion with
     `M-<TAB>'.

`face'
     The value must be a symbol which is a face name, and you can do
     completion with `M-<TAB>'.

`boolean'
     The value is boolean--either `nil' or `t'.  Note that by using
     `choice' and `const' together (see the next section), you can
     specify that the value must be `nil' or `t', but also specify the
     text to describe each value in a way that fits the specific
     meaning of the alternative.

`coding-system'
     The value must be a coding-system name, and you can do completion
     with `M-<TAB>'.

`color'
     The value must be a valid color name, and you can do completion
     with `M-<TAB>'.  A sample is provided,


automatically generated by info2www version 1.2.2.9