| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Most graphical user interface toolkits provide
a number of standard user interface controls (sometimes known as
‘widgets’ or ‘gadgets’). Historically, Emacs didn’t support anything like
this, except for its incredibly powerful text “widget”. However,
since XEmacs 21.4, XEmacs has supported “native” widgets (GUI controls
implemented as Lisp APIs in C for the MS Windows, Motif, Athena, and GTK
toolkits) and libglade (GUI controls with an XML API for the GTK
toolkit). On the other hand, Emacs does provide the necessary
primitives to implement many other widgets within a text buffer, and of
course this is the only way to implement self-contained controls in a
text terminal. The widget package simplifies this task.
Examples of some basic widgets include:
linkAreas of text with an associated action. Intended for hypertext links embedded in text.
push-buttonLike link, but intended for stand-alone buttons.
editable-fieldAn editable text field. It can be either variable or fixed length.
menu-choiceAllows the user to choose one of multiple options from a menu, each option is itself a widget. Only the selected option will be visible in the buffer.
radio-button-choiceAllows the user to choose one of multiple options by activating radio buttons. The options are implemented as widgets. All options will be visible in the buffer.
itemA simple constant widget intended to be used in the menu-choice and
radio-button-choice widgets.
choice-itemA button item only intended for use in choices. When invoked, the user will be asked to select another option from the choice widget.
toggleA simple ‘on’/‘off’ switch.
checkboxA checkbox (‘[ ]’/‘[X]’).
editable-listCreate an editable list. The user can insert or delete items in the list. Each list item is itself a widget.
Now, of what possible use can support for widgets be in a text editor? I’m glad you asked. The answer is that widgets are useful for implementing forms. A form in Emacs is a buffer where the user is supposed to fill out a number of fields, each of which has a specific meaning. The user is not supposed to change or delete any of the text between the fields. Examples of forms in Emacs are the ‘forms’ package (of course), the customize buffers, the mail and news compose modes, and the HTML form support in the ‘w3’ browser.
The advantages for a programmer of using the widget package to
implement forms are:
In order to minimize the code that is loaded by users who does not create any widgets, the code has been split in two files:
This declares the user variables, defines the function
define-widget, and autoloads the function widget-create.
Everything else is here. Do not load it explicitly, as it will be autoloaded when needed.
| [ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated on September 25, 2026 using texi2html 1.82.