Next: , Previous: Browsing Custom, Up: Easy Customization

48.1.3 Changing a Variable

Here is an example of what a variable, or user option, looks like in the customization buffer:

     [Hide] Kill Ring Max: 60
        [State]: STANDARD.
        Maximum length of kill ring before oldest elements are thrown away.

The first line shows that the variable is named kill-ring-max, formatted as ‘Kill Ring Max’ for easier viewing. Its value is ‘60’. The button labeled ‘[Hide]’, if activated, hides the variable's value and state; this is useful to avoid cluttering up the customization buffer with very long values (for this reason, variables that have very long values may start out hidden). If you use the ‘[Hide]’ button, it changes to ‘[Show Value]’, which you can activate to reveal the value and state. On a graphical display, the ‘[Hide]’ and ‘[Show Value]’ buttons are replaced with graphical triangles pointing downwards and rightwards respectively.

The line after the variable name indicates the customization state of the variable: in this example, ‘STANDARD’ means you have not changed the variable, so its value is the default one. The ‘[State]’ button gives a menu of operations for customizing the variable.

Below the customization state is the documentation for the variable. This is the same documentation that would be shown by the C-h v command (see Examining). If the documentation is more than one line long, only one line may be shown. If so, that line ends with a ‘[More]’ button; activate this to see the full documentation.

To enter a new value for ‘Kill Ring Max’, just move point to the value and edit it. For example, type M-d to delete the ‘60’ and type in another number. As you begin to alter the text, the ‘[State]’ line will change:

     [State]: EDITED, shown value does not take effect until you
              set or save it.

Editing the value does not make it take effect right away. To do that, you must set the variable by activating the ‘[State]’ button and choosing ‘Set for Current Session’. Then the variable's state becomes:

     [State]: SET for current session only.

You don't have to worry about specifying a value that is not valid; the ‘Set for Current Session’ operation checks for validity and will not install an unacceptable value.

While editing certain kinds of values, such as file names, directory names, and Emacs command names, you can perform completion with C-M-i (widget-complete), or the equivalent keys M-<TAB> or <ESC> <TAB>. This behaves much like minibuffer completion (see Completion).

Typing <RET> on an editable value field moves point forward to the next field or button, like <TAB>. You can thus type <RET> when you are finished editing a field, to move on to the next button or field. To insert a newline within an editable field, use C-o or C-q C-j.

For some variables, there is only a fixed set of legitimate values, and you are not allowed to edit the value directly. Instead, a ‘[Value Menu]’ button appears before the value; activating this button presents a choice of values. For a boolean “on or off” value, the button says ‘[Toggle]’, and flips the value. After using the ‘[Value Menu]’ or ‘[Toggle]’ button, you must again set the variable to make the chosen value take effect.

Some variables have values with complex structure. For example, the value of minibuffer-frame-alist is an association list. Here is how it appears in the customization buffer:

     [Hide] Minibuffer Frame Alist:
     [INS] [DEL] Parameter: width
                 Value: 80
     [INS] [DEL] Parameter: height
                 Value: 2
     [INS]
        [ State ]: STANDARD.
        Alist of parameters for the initial minibuffer frame. [Hide]
        [...more lines of documentation...]

In this case, each association in the list consists of two items, one labeled ‘Parameter’ and one labeled ‘Value’; both are editable fields. You can delete an association from the list with the ‘[DEL]’ button next to it. To add an association, use the ‘[INS]’ button at the position where you want to insert it; the very last ‘[INS]’ button inserts at the end of the list.

When you set a variable, the new value takes effect only in the current Emacs session. To save the value for future sessions, use the ‘[State]’ button and select the ‘Save for Future Sessions’ operation. See Saving Customizations.

You can also restore the variable to its standard value by using the ‘[State]’ button and selecting the ‘Erase Customization’ operation. There are actually four reset operations:

Undo Edits
If you have modified but not yet set the variable, this restores the text in the customization buffer to match the actual value.
Reset to Saved
This restores the value of the variable to the last saved value, and updates the text accordingly.
Erase Customization
This sets the variable to its standard value. Any saved value that you have is also eliminated.
Set to Backup Value
This sets the variable to a previous value that was set in the customization buffer in this session. If you customize a variable and then reset it, which discards the customized value, you can get the discarded value back again with this operation.

Sometimes it is useful to record a comment about a specific customization. Use the ‘Add Comment’ item from the ‘[State]’ menu to create a field for entering the comment.

Near the top of the customization buffer are two lines of buttons:

      [Set for Current Session] [Save for Future Sessions]
      [Undo Edits] [Reset to Saved] [Erase Customization]   [Exit]

Each of the first five buttons performs the stated operation—set, save, reset, etc.—on all the settings in the buffer that could meaningfully be affected. They do not operate on settings that are hidden, nor on subgroups that are hidden or not visible in the buffer.

The command C-c C-c (Custom-set) is equivalent using to the ‘[Set for Current Session]’ button. The command C-x C-s (Custom-save) is like using the ‘[Save for Future Sessions]’ button.

The ‘[Exit]’ button switches out of the customization buffer, and buries the buffer at the bottom of the buffer list. To make it kill the customization buffer instead, change the variable custom-buffer-done-kill to t.