diff man/custom.texi @ 16:0293115a14e9 r19-15b91

Import from CVS: tag r19-15b91
author cvs
date Mon, 13 Aug 2007 08:49:20 +0200
parents
children 859a2309aef8
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/man/custom.texi	Mon Aug 13 08:49:20 2007 +0200
@@ -0,0 +1,644 @@
+\input texinfo.tex
+
+@c %**start of header
+@setfilename custom
+@settitle The Customization Library
+@iftex
+@afourpaper
+@headings double
+@end iftex
+@c %**end of header
+
+@node Top, Introduction, (dir), (dir)
+@comment  node-name,  next,  previous,  up
+@top The Customization Library
+
+Version: 1.20
+
+@menu
+* Introduction::                
+* User Commands::               
+* The Customization Buffer::    
+* Declarations::                
+* Utilities::                   
+* The Init File::               
+* Wishlist::                    
+@end menu
+
+@node   Introduction, User Commands, Top, Top
+@comment  node-name,  next,  previous,  up
+@section Introduction
+
+This library allows customization of @dfn{user options}.  Currently two
+types of user options are supported, namely @dfn{variables} and
+@dfn{faces}.  Each user option can have four different values
+simultaneously:
+@table @dfn
+@item factory setting
+The value specified by the programmer.
+@item saved value
+The value saved by the user as the default for this variable.  This
+overwrites the factory setting when starting a new emacs.
+@item current value
+The value used by Emacs.  This will not be remembered next time you
+run Emacs.
+@item widget value
+The value entered by the user in a customization buffer, but not yet
+applied.
+@end table
+
+Variables also have a @dfn{type}, which specifies what kind of values
+the variable can hold, and how the value is presented in a customization
+buffer.  By default a variable can hold any valid expression, but the
+programmer can specify a more limited type when declaring the variable.
+
+The user options are organized in a number of @dfn{groups}.  Each group
+can contain a number user options, as well as other groups.  The groups
+allows the user to concentrate on a specific part of emacs.
+
+@node  User Commands, The Customization Buffer, Introduction, Top
+@comment  node-name,  next,  previous,  up
+@section User Commands
+
+The following commands will create a customization buffer:
+
+@table @code
+@item customize
+Create a customization buffer containing a specific group, by default
+the @code{emacs} group.
+
+@item customize-variable
+Create a customization buffer containing a single variable.  
+
+@item customize-face
+Create a customization buffer containing a single face.
+
+@item customize-apropos
+Create a customization buffer containing all variables, faces, and
+groups that match a user specified regular expression.
+@end table
+
+@node The Customization Buffer, Declarations, User Commands, Top
+@comment  node-name,  next,  previous,  up
+@section The Customization Buffer.
+
+The customization buffer allows the user to make temporary or permanent
+changes to how specific aspects of emacs works, by setting and editing
+user options.  
+
+The customization buffer contains three types of text:
+
+@table @dfn
+@item informative text
+where the normal editing commands are disabled.
+
+@item editable fields
+where you can edit with the usual emacs commands.  Editable fields are
+usually displayed with a grey background if your terminal supports
+colors, or an italic font otherwise.
+
+@item buttons
+which can be activated by either pressing the @kbd{@key{ret}} while
+point is located on the text, or pushing @kbd{mouse-2} while the mouse
+pointer is above the tex.  Buttons are usually displayed in a bold
+font. 
+@end table
+
+You can move to the next the next editable field or button by pressing
+@kbd{@key{tab}} or the previous with @kbd{M-@key{tab}}.  Some buttons
+have a small helpful message about their purpose, which will be
+displayed when you move to it with the @key{tab} key.  
+
+The buffer is divided into three part, an introductory text, a list of
+customization options, and a line of customization buttons.  Each part
+will be described in the following. 
+
+@menu
+* The Introductory Text::       
+* The Customization Options::   
+* The Variable Options::        
+* The Face Options::            
+* The Group Options::           
+* The State Button::            
+* The Customization Buttons::   
+@end menu
+
+@node  The Introductory Text, The Customization Options, The Customization Buffer, The Customization Buffer
+@comment  node-name,  next,  previous,  up
+@subsection  The Introductory Text
+
+The start of the buffer contains a short explanation of what it is, and
+how to get help.  It will typically look like this:
+
+@example
+This is a customization buffer.
+Push RET or click mouse-2 on the word _help_ for more information.
+@end example
+
+Rather boring.  It is mostly just informative text, but the word
+@samp{help} is a button that will bring up this document when
+activated.  
+
+@node  The Customization Options, The Variable Options, The Introductory Text, The Customization Buffer
+@comment  node-name,  next,  previous,  up
+@subsection The Customization Options
+
+Each customization option looks similar to the following text:
+
+@example
+ *** custom-background-mode: default 
+ State: this item is unchanged from its factory setting.
+ [ ] [?] The brightness of the background.
+@end example
+
+The option contains the parts described below.
+
+@table @samp
+@item ***
+The Level Button.  The customization options in the buffer are organized
+in a hierarchy, which is indicated by the number of stars in the level
+button.  The top level options will be shown as @samp{*}.  When they are
+expanded, the suboptions will be shown as @samp{**}.  The example option
+is thus a subsuboption.
+
+Activating the level buttons will toggle between hiding and exposing the
+content of that option.  The content can either be the value of the
+option, as in this example, or a list of suboptions.
+
+@item custom-background-mode
+This is the tag of the the option.  The tag is a name of a variable, a
+face, or customization group.  Activating the tag has an effect that
+depends on the exact type of the option.  In this particular case,
+activating the tag will bring up a menu that will allow you to choose
+from the three possible values of the `custom-background-mode'
+variable. 
+
+@item default
+After the tag, the options value is shown.  Depending on its type, you
+may be able to edit the value directly.  If an option should contain a
+file name, it is displayed in an editable field, i.e. you can edit it
+using the standard emacs editing commands.
+
+@item State: this item is unchanged from its factory setting.
+The state line.  This line will explain the state of the option,
+e.g. whether it is currently hidden, or whether it has been modified or
+not.  Activating the button will allow you to change the state, e.g. set
+or reset the changes you have made.  This is explained in detail in the
+following sections.
+
+@item [ ]
+The magic button.  This is an abbreviated version of the state line. 
+
+@item [?] 
+The documentation button.  If the documentation is more than one line,
+this button will be present.  Activating the button will toggle whether
+the complete documentation is shown, or only the first line.
+
+@item The brightness of the background.
+This is a documentation string explaining the purpose of this particular
+customization option.
+
+@end table
+
+@node  The Variable Options, The Face Options, The Customization Options, The Customization Buffer
+@comment  node-name,  next,  previous,  up
+@subsection The Variable Options
+
+The most common customization options are emacs lisp variables.  The
+actual editing of these variables depend on what type values the
+variable is expected to contain.  For example, a lisp variable whose
+value should be a string will typically be represented with an editable
+text field in the buffer, where you can change the string directly.  If
+the value is a list, each item in the list will be presented in the
+buffer buffer on a separate line, with buttons to insert new items in
+the list, or delete existing items from the list.  You may want to see 
+@ref{User Interface,,, widget, The Widget Library}, where some examples
+of editing are discussed.  
+
+You can either choose to edit the value directly, or edit the lisp
+value for that variable.  The lisp value is a lisp expression that
+will be evaluated when you start emacs.  The result of the evaluation
+will be used as the initial value for that variable.  Editing the
+lisp value is for experts only, but if the current value of the
+variable is of a wrong type (i.e. a symbol where a string is expected),
+the `edit lisp' mode will always be selected.
+
+You can see what mode is currently selected by looking at the state
+button.  If it uses parenthesises (like @samp{( )}) it is in edit lisp
+mode, with square brackets (like @samp{[ ]}) it is normal edit mode.
+You can switch mode by activating the state button, and select either
+@samp{Edit} or @samp{Edit lisp} from the menu.
+
+You can change the state of the variable with the other menu items:
+
+@table @samp
+@item Set
+When you have made your modifications in the buffer, you need to
+activate this item to make the modifications take effect.  The
+modifications will be forgotten next time you run emacs.
+
+@item Save
+Unless you activate this item instead!  This will mark the modification
+as permanent, i.e. the changes will be remembered in the next emacs
+session.
+
+@item Reset
+If you have made some modifications and not yet applied them, you can
+undo the modification by activating this item.
+
+@item Reset to Saved
+Activating this item will reset the value of the variable to the last
+value you marked as permanent with `Save'.
+
+@item Reset to Factory Settings
+Activating this item will undo all modifications you have made, and
+reset the value to the initial value specified by the program itself. 
+@end table
+
+By default, the value of large or complicated variables are hidden.   You
+can show the value by clicking on the level button.
+
+@node  The Face Options, The Group Options, The Variable Options, The Customization Buffer
+@comment  node-name,  next,  previous,  up
+@subsection The Face Options
+
+A face is an object that controls the appearance of some buffer text.
+The face has a number of possible attributes, such as boldness,
+foreground color, and more.  For each attribute you can specify whether
+this attribute is controlled by the face, and if so, what the value is.
+For example, if the attribute bold is not controlled by a face, using
+that face on some buffer text will not affect its boldness.  If the bold
+attribute is controlled by the face, it can be turned either on or of.
+
+It is possible to specify that a face should have different attributes
+on different device types.  For example, a face may make text red on a
+color device, and bold on a monochrome device.
+
+The way this is presented in the customization buffer is to have a list
+of display specifications, and for each display specification a list of
+face attributes.  For each face attribute, there is a checkbox
+specifying whether this attribute has effect and what the value is.
+Here is an example:
+
+@example
+ *** custom-invalid-face: (sample)
+ [ ] Face used when the customize item is invalid.
+ [INS] [DEL] Display: [ ] Type: [ ] X [ ] TTY
+                      [X] Class: [X] Color [ ] Grayscale [ ] Monochrome
+                      [ ] Background: [ ] Light [ ] Dark
+             Attributes: [ ] Bold: off 
+                         [ ] Italic: off 
+                         [ ] Underline: off 
+                         [X] Foreground: yellow (sample)
+                         [X] Background: red (sample)
+                         [ ] Stipple:  
+ [INS] [DEL] Display: all
+             Attributes: [X] Bold: on 
+                         [X] Italic: on 
+                         [X] Underline: on 
+                         [ ] Foreground: default (sample)
+                         [ ] Background: default (sample)
+                         [ ] Stipple:  
+ [INS]
+@end example
+
+This has two display specifications.  The first will match all color
+displays, independently on whether the device is X11 or a tty, and
+whether background color is dark or light.  For devices matching this
+specification, @samp{custom-invalid-face} will force text to be
+displayed in yellow on red, but leave all other attributes alone.
+
+The second display will simply match everything.  Since the list is
+prioritised, this means that it will match all non-color displays.  For
+these, the face will not affect the foreground or background color, but
+force the font to be both bold, italic, and underline.
+
+You can add or delete display specifications by activating the
+@samp{[INS]} and @samp{[DEL]} buttons, and modify them by clicking on
+the check boxes.  The first checkbox in each line in the display
+specification is special.  It specify whether this particular property
+will even be relevant.  By not checking the box in the first display, we
+match all device types, also device types other than X11 and tty, for
+example ms-windows, nextstep, and mac os.
+
+After modifying the face, you can activate the state button to make the
+changes take effect.  The menu items in the state button menu is similar
+to the state menu items for variables described in the previous section.
+
+@node  The Group Options, The State Button, The Face Options, The Customization Buffer
+@comment  node-name,  next,  previous,  up
+@subsection The Group Options
+
+Since Emacs has approximately a zillion configuration options, they have
+been organized in groups.  Each group can contain other groups, thus
+creating a customization hierarchy.  The nesting of the customization
+within the visible part of this hierarchy is indicated by the number of
+stars in the level button.
+
+Since there is really no customization needed for the group itself, the
+menu items in the groups state button will affect all modified group
+members recursively.  Thus, if you activate the @samp{Set} menu item,
+all variables and faces that have been modified and belong to that group
+will be applied.  For those members that themselves are groups, it will
+work as if you had activated the @samp{Set} menu item on them as well.
+
+@node  The State Button, The Customization Buttons, The Group Options, The Customization Buffer
+@comment  node-name,  next,  previous,  up
+@subsection The State Line and The Magic Button
+
+The state line has two purposes.  The first is to hold the state menu,
+as described in the previous sections.  The second is to indicate the
+state of each customization item.  
+
+For the magic button, this is done by the character inside the brackets.
+The following states have been defined, the first that applies to the
+current item will be used:
+
+@table @samp
+@item -
+The option is currently hidden.  For group options that means the
+members are not shown, for variables and faces that the value is not
+shown.  You cannot perform any of the state change operations on a
+hidden customization option.
+
+@item *
+The value if this option has been modified in the buffer, but not yet
+applied.  
+
+@item +
+The item has has been set by the user.
+
+@item :
+The current value of this option is different from the saved value.   
+
+@item !
+The saved value of this option is different from the factory setting.
+
+@item @@
+The factory setting of this option is not known.  This occurs when you
+try to customize variables or faces that have not been explicitly
+declared as customizable.
+
+@item SPC
+The factory setting is still in effect.
+
+@end table
+
+For non-hidden group options, the state shown is the most severe state
+of its members, where more severe means that it appears earlier in the
+list above (except hidden members, which are ignored).
+
+@node  The Customization Buttons,  , The State Button, The Customization Buffer
+@comment  node-name,  next,  previous,  up
+@subsection The Customization Buttons
+
+The last part of the customization buffer looks like this:
+
+@example
+[Set] [Save] [Reset]
+@end example
+
+Activating the @samp{[Set]}, @samp{[Save]}, or @samp{[Reset]}
+button will affect all modified customization items that are visible in
+the buffer.
+
+@node   Declarations, Utilities, The Customization Buffer, Top
+@comment  node-name,  next,  previous,  up
+@section Declarations
+
+@menu
+* Declaring Groups::            
+* Declaring Variables::         
+* Declaring Faces::             
+@end menu
+
+All the customization declarations can be changes by keyword arguments.
+Groups, variables, and faces all share these common keywords:
+
+@table @code
+@item :group
+@var{value} should be a customization group. 
+Add @var{symbol} to that group. 
+@item :link
+@var{value} should be a widget type. 
+Add @var{value} to the extrenal links for this customization option.
+Useful widget types include @code{custom-manual}, @code{info-link}, and
+@code{url-link}. 
+@item :load
+Add @var{value} to the files that should be loaded nefore displaying
+this customization option.  The value should be iether a string, which
+should be a string which will be loaded with @code{load-library} unless
+present in @code{load-history}, or a symbol which will be loaded with
+@code{require}. 
+@item :tag
+@var{Value} should be a short string used for identifying the option in
+customization menus and buffers.  By default the tag will be
+automatically created from the options name.
+@end table
+
+@node  Declaring Groups, Declaring Variables, Declarations, Declarations
+@comment  node-name,  next,  previous,  up
+@subsection Declaring Groups
+
+Use @code{defgroup} to declare new customization groups. 
+
+@defun defgroup symbol members doc [keyword value]...
+Declare @var{symbol} as a customization group containing @var{members}. 
+@var{symbol} does not need to be quoted.
+
+@var{doc} is the group documentation.
+
+@var{members} should be an alist of the form ((@var{name}
+@var{widget})...) where @var{name} is a symbol and @var{widget} is a
+widget for editing that symbol.  Useful widgets are
+@code{custom-variable} for editing variables, @code{custom-face} for
+editing faces, and @code{custom-group} for editing groups.@refill
+
+Internally, custom uses the symbol property @code{custom-group} to keep
+track of the group members, and @code{group-documentation} for the
+documentation string. 
+
+The following additional @var{keyword}'s are defined:
+
+@table @code
+@item :prefix
+@var{value} should be a string.  If the string is a prefix for the name
+of a member of the group, that prefix will be ignored when creating a
+tag for that member.
+@end table
+@end defun
+
+@node  Declaring Variables, Declaring Faces, Declaring Groups, Declarations
+@comment  node-name,  next,  previous,  up
+@subsection Declaring Variables
+
+Use @code{defcustom} to declare user editable variables.
+
+@defun defcustom symbol value doc [keyword value]...
+Declare @var{symbol} as a customizable variable that defaults to @var{value}.
+Neither @var{symbol} nor @var{value} needs to be quoted.
+If @var{symbol} is not already bound, initialize it to @var{value}.
+
+@var{doc} is the variable documentation.
+
+The following additional @var{keyword}'s are defined:
+
+@table @code
+@item :type	
+@var{value} should be a widget type.
+@item :options
+@var{value} should be a list of possible members of the specified type.
+For hooks, this is a list of function names.
+@end table
+
+@xref{Sexp Types,,,widget,The Widget Library}, for information about
+widgets to use together with the @code{:type} keyword.
+@end defun
+
+Internally, custom uses the symbol property @code{custom-type} to keep
+track of the variables type, @code{factory-value} for the program
+specified default value, @code{saved-value} for a value saved by the
+user, and @code{variable-documentation} for the documentation string.
+
+Use @code{custom-add-option} to specify that a specific function is
+useful as an meber of a hook.
+
+@defun custom-add-option symbol option
+To the variable @var{symbol} add @var{option}.
+
+If @var{symbol} is a hook variable, @var{option} should be a hook
+member.  For other types variables, the effect is undefined."
+@end defun
+
+@node  Declaring Faces,  , Declaring Variables, Declarations
+@comment  node-name,  next,  previous,  up
+@subsection Declaring Faces
+
+Faces are declared with @code{defface}.
+
+@defun defface face spec doc [keyword value]... 
+
+Declare @var{face} as a customizable face that defaults to @var{spec}.
+@var{face} does not need to be quoted.
+
+If @var{face} has been set with `custom-set-face', set the face attributes
+as specified by that function, otherwise set the face attributes
+according to @var{spec}.
+
+@var{doc} is the face documentation.
+
+@var{spec} should be an alist of the form @samp{((@var{display} @var{atts})...)}.
+
+@var{atts} is a list of face attributes and their values.  The possible
+attributes are defined in the variable `custom-face-attributes'.
+Alternatively, @var{atts} can be a face in which case the attributes of
+that face is used.
+
+The @var{atts} of the first entry in @var{spec} where the @var{display}
+matches the frame should take effect in that frame.  @var{display} can
+either be the symbol `t', which will match all frames, or an alist of
+the form @samp{((@var{req} @var{item}...)...)}@refill
+
+For the @var{display} to match a FRAME, the @var{req} property of the
+frame must match one of the @var{item}.  The following @var{req} are
+defined:@refill
+
+@table @code
+@item type
+(the value of (window-system))@br
+Should be one of @code{x} or @code{tty}.
+
+@item class
+(the frame's color support)@br
+Should be one of @code{color}, @code{grayscale}, or @code{mono}.
+
+@item background
+(what color is used for the background text)@br
+Should be one of @code{light} or @code{dark}.
+@end table
+  
+Internally, custom uses the symbol property @code{factory-face} for the
+program specified default face properties, @code{saved-face} for
+properties saved by the user, and @code{face-documentation} for the
+documentation string.@refill
+
+@end defun
+
+@node  Utilities, The Init File, Declarations, Top
+@comment  node-name,  next,  previous,  up
+@section Utilities
+
+These utilities can come in handy when adding customization support. 
+
+@deffn Widget custom-manual
+Widget type for specifying the info manual entry for a customization
+option.  It takes one argument, an info address.
+@end deffn
+
+@defun custom-add-to-group group member widget
+To existing @var{group} add a new @var{member} of type @var{widget},
+If there already is an entry for that member, overwrite it.
+@end defun
+
+@defun custom-add-link symbol widget
+To the custom option @var{symbol} add the link @var{widget}.
+@end defun
+
+@defun custom-add-load symbol load
+To the custom option @var{symbol} add the dependency @var{load}.
+@var{load} should be either a library file name, or a feature name.
+@end defun
+
+@defun custom-menu-create symbol &optional name
+Create menu for customization group @var{symbol}.
+If optional @var{name} is given, use that as the name of the menu. 
+Otherwise make up a name from @var{symbol}.
+The menu is in a format applicable to @code{easy-menu-define}.
+@end defun
+
+@node  The Init File, Wishlist, Utilities, Top
+@comment  node-name,  next,  previous,  up
+@section The Init File
+
+When you save the customizations, call to @code{custom-set-variables},
+@code{custom-set-faces} are inserted into the file specified by
+@code{custom-file}.  By default @code{custom-file} is your @file{.emacs}
+file.  The two functions will initialize variables and faces as you have
+specified. 
+
+@node  Wishlist,  , The Init File, Top
+@comment  node-name,  next,  previous,  up
+@section Wishlist
+
+@itemize @bullet
+@item
+The menu items should be grayed out when the information is
+missing.  I.e. if a variable doesn't have a factory setting, the user
+should not be allowed to select the @samp{Factory} menu item.
+
+@item 
+We need @strong{much} better support for keyboard operations in the
+customize buffer.
+
+@item
+Support real specifiers under XEmacs.
+
+@item
+Integrate with @file{w3} so you can customization buffers with much
+better formatting.  I'm thinking about adding a <custom>name</custom>
+tag. 
+
+@item
+Add an `examples' section, with explained examples of custom type
+definitions. 
+
+@item
+Support undo using lmi's @file{gnus-undo.el}.
+
+@item
+Make it possible to append to `choice', `radio', and `set' options.
+
+@end itemize
+
+@contents
+@bye