Mercurial > emacs
annotate man/widget.texi @ 71504:2b4e59cd1121
(Qeql): Add extern.
(x_set_mouse_pixel_position) [MAC_OSX]: Use CGWarpMouseCursorPosition.
(fm_style_face_attributes_alist) [USE_ATSUI]: New variable.
(syms_of_macterm) [USE_ATSUI]: Initialize and staticpro it.
Change keys of Vmac_atsu_font_table from strings to numbers.
(fm_style_to_face_attributes) [USE_ATSUI]: New function.
(init_font_name_table) [USE_ATSUI]: Use it.
(saved_ts_script_language_on_focus) [USE_MAC_TSM]: New variable.
(syms_of_macterm) [USE_MAC_TSM]: Initialize and staticpro it.
[USE_MAC_TSM] (mac_tsm_resume): Restore script and language codes
only when saved_ts_script_language_on_focus coincides with
Vmac_ts_script_language_on_focus.
[USE_MAC_TSM] (mac_tsm_suspend): Save value of
Vmac_ts_script_language_on_focus to saved_ts_script_language_on_focus.
(XTread_socket) [USE_MAC_TSM]: Add Mac OS Classic support.
[USE_MAC_TSM] (mac_handle_text_input_event, init_tsm): Likewise.
| author | YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> |
|---|---|
| date | Wed, 28 Jun 2006 08:31:32 +0000 |
| parents | 11b616eddda4 |
| children | 381523fcc2fd e6bf73e43cf4 |
| rev | line source |
|---|---|
| 25829 | 1 \input texinfo.tex |
| 2 | |
| 3 @c %**start of header | |
| 4 @setfilename ../info/widget | |
| 5 @settitle The Emacs Widget Library | |
|
47737
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
46641
diff
changeset
|
6 @syncodeindex fn cp |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
46641
diff
changeset
|
7 @syncodeindex vr cp |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
46641
diff
changeset
|
8 @syncodeindex ky cp |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
46641
diff
changeset
|
9 @afourpaper |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
46641
diff
changeset
|
10 @c %**end of header |
| 33521 | 11 |
|
47737
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
46641
diff
changeset
|
12 @copying |
|
68639
dc2d5a6655a3
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
68348
diff
changeset
|
13 Copyright @copyright{} 2000, 2002, 2003, 2004, 2005, |
|
69681
11b616eddda4
@copyright{}, no indentation in @copying{}
Karl Berry <karl@gnu.org>
parents:
68639
diff
changeset
|
14 2006 Free Software Foundation, Inc. |
|
47737
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
46641
diff
changeset
|
15 |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
46641
diff
changeset
|
16 @quotation |
| 33521 | 17 Permission is granted to copy, distribute and/or modify this document |
|
65555
69b3598a61c5
Update all manuals to specify GFDL version 1.2.
Romain Francoise <romain@orebokech.com>
parents:
62582
diff
changeset
|
18 under the terms of the GNU Free Documentation License, Version 1.2 or |
| 33521 | 19 any later version published by the Free Software Foundation; with the |
| 20 Invariant Sections being ``The GNU Manifesto'', ``Distribution'' and | |
| 21 ``GNU GENERAL PUBLIC LICENSE'', with the Front-Cover texts being ``A GNU | |
| 22 Manual'', and with the Back-Cover Texts as in (a) below. A copy of the | |
| 23 license is included in the section entitled ``GNU Free Documentation | |
| 24 License'' in the Emacs manual. | |
| 25 | |
| 26 This document is part of a collection distributed under the GNU Free | |
| 27 Documentation License. If you want to distribute this document | |
| 28 separately from the collection, you can do so by adding a copy of the | |
| 29 license to the document, as described in section 6 of the license. | |
| 30 | |
| 31 (a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify | |
| 32 this GNU Manual, like GNU software. Copies published by the Free | |
| 33 Software Foundation raise funds for GNU development.'' | |
|
47737
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
46641
diff
changeset
|
34 @end quotation |
|
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
46641
diff
changeset
|
35 @end copying |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
36 |
| 30009 | 37 @dircategory Emacs |
| 25829 | 38 @direntry |
|
43962
661b1aa856cc
Synchronize DIR entries with @direntry text in Texinfo sources.
Eli Zaretskii <eliz@gnu.org>
parents:
37806
diff
changeset
|
39 * Widget: (widget). The "widget" package used by the Emacs Customization |
|
661b1aa856cc
Synchronize DIR entries with @direntry text in Texinfo sources.
Eli Zaretskii <eliz@gnu.org>
parents:
37806
diff
changeset
|
40 facility. |
| 25829 | 41 @end direntry |
| 42 | |
| 43 @node Top, Introduction, (dir), (dir) | |
| 44 @comment node-name, next, previous, up | |
| 45 @top The Emacs Widget Library | |
| 46 | |
| 47 @menu | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
48 * Introduction:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
49 * User Interface:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
50 * Programming Example:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
51 * Setting Up the Buffer:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
52 * Basic Types:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
53 * Sexp Types:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
54 * Widget Properties:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
55 * Defining New Widgets:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
56 * Widget Browser:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
57 * Widget Minor Mode:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
58 * Utilities:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
59 * Widget Wishlist:: |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
60 * Index:: |
| 25829 | 61 @end menu |
| 62 | |
| 63 @node Introduction, User Interface, Top, Top | |
| 64 @comment node-name, next, previous, up | |
| 65 @section Introduction | |
| 66 | |
|
36512
00a52c680a19
Minor usage fixes. Don't mention Motif or XView.
Richard M. Stallman <rms@gnu.org>
parents:
36020
diff
changeset
|
67 Most graphical user interface toolkits provide a number of standard |
|
00a52c680a19
Minor usage fixes. Don't mention Motif or XView.
Richard M. Stallman <rms@gnu.org>
parents:
36020
diff
changeset
|
68 user interface controls (sometimes known as `widgets' or `gadgets'). |
|
00a52c680a19
Minor usage fixes. Don't mention Motif or XView.
Richard M. Stallman <rms@gnu.org>
parents:
36020
diff
changeset
|
69 Emacs doesn't really support anything like this, except for an |
|
00a52c680a19
Minor usage fixes. Don't mention Motif or XView.
Richard M. Stallman <rms@gnu.org>
parents:
36020
diff
changeset
|
70 incredibly powerful text ``widget.'' On the other hand, Emacs does |
|
00a52c680a19
Minor usage fixes. Don't mention Motif or XView.
Richard M. Stallman <rms@gnu.org>
parents:
36020
diff
changeset
|
71 provide the necessary primitives to implement many other widgets |
|
00a52c680a19
Minor usage fixes. Don't mention Motif or XView.
Richard M. Stallman <rms@gnu.org>
parents:
36020
diff
changeset
|
72 within a text buffer. The @code{widget} package simplifies this task. |
| 25829 | 73 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
74 @cindex basic widgets |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
75 @cindex widgets, basic types |
| 25829 | 76 The basic widgets are: |
| 77 | |
| 78 @table @code | |
| 79 @item link | |
| 80 Areas of text with an associated action. Intended for hypertext links | |
| 81 embedded in text. | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
82 @item push-button |
| 25829 | 83 Like link, but intended for stand-alone buttons. |
| 84 @item editable-field | |
| 85 An editable text field. It can be either variable or fixed length. | |
| 86 @item menu-choice | |
| 87 Allows the user to choose one of multiple options from a menu, each | |
| 88 option is itself a widget. Only the selected option will be visible in | |
| 89 the buffer. | |
| 90 @item radio-button-choice | |
| 91 Allows the user to choose one of multiple options by activating radio | |
| 92 buttons. The options are implemented as widgets. All options will be | |
| 93 visible in the buffer. | |
| 94 @item item | |
| 95 A simple constant widget intended to be used in the @code{menu-choice} and | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
96 @code{radio-button-choice} widgets. |
| 25829 | 97 @item choice-item |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
98 A button item only intended for use in choices. When invoked, the user |
| 25829 | 99 will be asked to select another option from the choice widget. |
| 100 @item toggle | |
| 101 A simple @samp{on}/@samp{off} switch. | |
| 102 @item checkbox | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
103 A checkbox (@samp{[ ]}/@samp{[X]}). |
| 25829 | 104 @item editable-list |
| 105 Create an editable list. The user can insert or delete items in the | |
| 106 list. Each list item is itself a widget. | |
| 107 @end table | |
| 108 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
109 Now, of what possible use can support for widgets be in a text editor? |
| 25829 | 110 I'm glad you asked. The answer is that widgets are useful for |
| 111 implementing forms. A @dfn{form} in Emacs is a buffer where the user is | |
| 112 supposed to fill out a number of fields, each of which has a specific | |
| 113 meaning. The user is not supposed to change or delete any of the text | |
| 114 between the fields. Examples of forms in Emacs are the @file{forms} | |
| 115 package (of course), the customize buffers, the mail and news compose | |
|
52979
3649390c0f91
Replace @sc{ascii} and ASCII with @acronym{ASCII}.
Eli Zaretskii <eliz@gnu.org>
parents:
52936
diff
changeset
|
116 modes, and the @acronym{HTML} form support in the @file{w3} browser. |
| 25829 | 117 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
118 @cindex widget library, why use it |
| 25829 | 119 The advantages for a programmer of using the @code{widget} package to |
| 120 implement forms are: | |
| 121 | |
| 122 @enumerate | |
| 123 @item | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
124 More complex fields than just editable text are supported. |
| 25829 | 125 @item |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
126 You can give the users immediate feedback if they enter invalid data in a |
| 25829 | 127 text field, and sometimes prevent entering invalid data. |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
128 @item |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
129 You can have fixed sized fields, thus allowing multiple fields to be |
| 25829 | 130 lined up in columns. |
| 131 @item | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
132 It is simple to query or set the value of a field. |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
133 @item |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
134 Editing happens in the buffer, not in the mini-buffer. |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
135 @item |
| 25829 | 136 Packages using the library get a uniform look, making them easier for |
| 137 the user to learn. | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
138 @item |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
139 As support for embedded graphics improve, the widget library will be |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
140 extended to use the GUI features. This means that your code using the |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
141 widget library will also use the new graphic features automatically. |
| 25829 | 142 @end enumerate |
| 143 | |
|
68303
9d71640b5bb2
(Introduction): Fix typo.
Luc Teirlinck <teirllm@auburn.edu>
parents:
67725
diff
changeset
|
144 In order to minimize the code that is loaded by users who do not |
| 25829 | 145 create any widgets, the code has been split in two files: |
| 146 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
147 @cindex widget library, files |
| 25829 | 148 @table @file |
| 149 @item widget.el | |
| 150 This will declare the user variables, define the function | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
151 @code{define-widget}, and autoload the function @code{widget-create}. |
| 25829 | 152 @item wid-edit.el |
| 153 Everything else is here, there is no reason to load it explicitly, as | |
| 154 it will be autoloaded when needed. | |
| 155 @end table | |
| 156 | |
| 157 @node User Interface, Programming Example, Introduction, Top | |
| 158 @comment node-name, next, previous, up | |
| 159 @section User Interface | |
| 160 | |
| 161 A form consist of read only text for documentation and some fields, | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
162 where each field contains two parts, a tag and a value. The tags are |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
163 used to identify the fields, so the documentation can refer to the |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
164 @samp{foo field}, meaning the field tagged with @samp{Foo}. Here is an |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
165 example form: |
| 25829 | 166 |
| 167 @example | |
| 168 Here is some documentation. | |
| 169 | |
| 170 Name: @i{My Name} @strong{Choose}: This option | |
| 171 Address: @i{Some Place | |
| 172 In some City | |
| 173 Some country.} | |
| 174 | |
| 175 See also @b{_other work_} for more information. | |
| 176 | |
| 177 Numbers: count to three below | |
| 36020 | 178 @b{[INS]} @b{[DEL]} @i{One} |
| 179 @b{[INS]} @b{[DEL]} @i{Eh, two?} | |
| 180 @b{[INS]} @b{[DEL]} @i{Five!} | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
181 @b{[INS]} |
| 25829 | 182 |
| 183 Select multiple: | |
| 184 | |
| 185 @b{[X]} This | |
| 186 @b{[ ]} That | |
| 187 @b{[X]} Thus | |
| 188 | |
| 189 Select one: | |
| 190 | |
| 191 @b{(*)} One | |
| 192 @b{( )} Another One. | |
| 193 @b{( )} A Final One. | |
| 194 | |
| 195 @b{[Apply Form]} @b{[Reset Form]} | |
| 196 @end example | |
| 197 | |
| 198 The top level widgets in is example are tagged @samp{Name}, | |
| 199 @samp{Choose}, @samp{Address}, @samp{_other work_}, @samp{Numbers}, | |
| 200 @samp{Select multiple}, @samp{Select one}, @samp{[Apply Form]}, and | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
201 @samp{[Reset Form]}. There are basically two things the user can do |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
202 within a form, namely editing the editable text fields and activating |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
203 the buttons. |
| 25829 | 204 |
| 205 @subsection Editable Text Fields | |
| 206 | |
| 207 In the example, the value for the @samp{Name} is most likely displayed | |
| 208 in an editable text field, and so are values for each of the members of | |
| 209 the @samp{Numbers} list. All the normal Emacs editing operations are | |
| 210 available for editing these fields. The only restriction is that each | |
| 211 change you make must be contained within a single editable text field. | |
| 212 For example, capitalizing all text from the middle of one field to the | |
| 213 middle of another field is prohibited. | |
| 214 | |
|
52337
9bdd2608958e
Explain need of static text around editable field
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
52269
diff
changeset
|
215 Editable text fields are created by the @code{editable-field} widget. |
|
9bdd2608958e
Explain need of static text around editable field
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
52269
diff
changeset
|
216 |
|
56601
e546c74f795e
Update how to separate the editable field of an editable-field widget from other widgets.
Lars Hansen <larsh@soem.dk>
parents:
55202
diff
changeset
|
217 @strong{Warning:} In an @code{editable-field} widget, the editable |
|
e546c74f795e
Update how to separate the editable field of an editable-field widget from other widgets.
Lars Hansen <larsh@soem.dk>
parents:
55202
diff
changeset
|
218 field must not be adjacent to another widget---that won't work. |
|
e546c74f795e
Update how to separate the editable field of an editable-field widget from other widgets.
Lars Hansen <larsh@soem.dk>
parents:
55202
diff
changeset
|
219 You must put some text in between. Either make this text part of |
|
e546c74f795e
Update how to separate the editable field of an editable-field widget from other widgets.
Lars Hansen <larsh@soem.dk>
parents:
55202
diff
changeset
|
220 the @code{editable-field} widget itself, or insert it with |
|
e546c74f795e
Update how to separate the editable field of an editable-field widget from other widgets.
Lars Hansen <larsh@soem.dk>
parents:
55202
diff
changeset
|
221 @code{widget-insert}. |
|
e546c74f795e
Update how to separate the editable field of an editable-field widget from other widgets.
Lars Hansen <larsh@soem.dk>
parents:
55202
diff
changeset
|
222 |
|
e546c74f795e
Update how to separate the editable field of an editable-field widget from other widgets.
Lars Hansen <larsh@soem.dk>
parents:
55202
diff
changeset
|
223 The @code{:format} keyword is useful for generating the necessary |
|
e546c74f795e
Update how to separate the editable field of an editable-field widget from other widgets.
Lars Hansen <larsh@soem.dk>
parents:
55202
diff
changeset
|
224 text; for instance, if you give it a value of @code{"Name: %v "}, |
|
e546c74f795e
Update how to separate the editable field of an editable-field widget from other widgets.
Lars Hansen <larsh@soem.dk>
parents:
55202
diff
changeset
|
225 the @samp{Name: } part will provide the necessary separating text |
|
e546c74f795e
Update how to separate the editable field of an editable-field widget from other widgets.
Lars Hansen <larsh@soem.dk>
parents:
55202
diff
changeset
|
226 before the field and the trailing space will provide the |
|
e546c74f795e
Update how to separate the editable field of an editable-field widget from other widgets.
Lars Hansen <larsh@soem.dk>
parents:
55202
diff
changeset
|
227 separating text after the field. If you don't include the |
|
e546c74f795e
Update how to separate the editable field of an editable-field widget from other widgets.
Lars Hansen <larsh@soem.dk>
parents:
55202
diff
changeset
|
228 @code{:size} keyword, the field will extend to the end of the |
|
e546c74f795e
Update how to separate the editable field of an editable-field widget from other widgets.
Lars Hansen <larsh@soem.dk>
parents:
55202
diff
changeset
|
229 line, and the terminating newline will provide separation after. |
| 25829 | 230 |
| 231 The editing text fields are highlighted with the | |
| 232 @code{widget-field-face} face, making them easy to find. | |
| 233 | |
| 234 @deffn Face widget-field-face | |
| 235 Face used for other editing fields. | |
| 236 @end deffn | |
| 237 | |
| 238 @subsection Buttons | |
| 239 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
240 @cindex widget buttons |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
241 @cindex button widgets |
| 25829 | 242 Some portions of the buffer have an associated @dfn{action}, which can |
| 243 be @dfn{invoked} by a standard key or mouse command. These portions | |
| 244 are called @dfn{buttons}. The default commands for activating a button | |
| 245 are: | |
| 246 | |
| 247 @table @kbd | |
| 248 @item @key{RET} | |
| 249 @deffn Command widget-button-press @var{pos} &optional @var{event} | |
| 250 Invoke the button at @var{pos}, defaulting to point. | |
| 251 If point is not located on a button, invoke the binding in | |
| 252 @code{widget-global-map} (by default the global map). | |
| 253 @end deffn | |
| 254 | |
|
36512
00a52c680a19
Minor usage fixes. Don't mention Motif or XView.
Richard M. Stallman <rms@gnu.org>
parents:
36020
diff
changeset
|
255 @kindex Mouse-2 @r{(on button widgets}) |
|
00a52c680a19
Minor usage fixes. Don't mention Motif or XView.
Richard M. Stallman <rms@gnu.org>
parents:
36020
diff
changeset
|
256 @item Mouse-2 |
| 25829 | 257 @deffn Command widget-button-click @var{event} |
| 258 Invoke the button at the location of the mouse pointer. If the mouse | |
| 259 pointer is located in an editable text field, invoke the binding in | |
| 260 @code{widget-global-map} (by default the global map). | |
| 261 @end deffn | |
| 262 @end table | |
| 263 | |
| 264 There are several different kind of buttons, all of which are present in | |
| 265 the example: | |
| 266 | |
| 267 @table @emph | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
268 @cindex option field tag |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
269 @item The Option Field Tags |
| 25829 | 270 When you invoke one of these buttons, you will be asked to choose |
| 271 between a number of different options. This is how you edit an option | |
| 272 field. Option fields are created by the @code{menu-choice} widget. In | |
| 273 the example, @samp{@b{Choose}} is an option field tag. | |
| 36020 | 274 @item The @samp{@b{[INS]}} and @samp{@b{[DEL]}} buttons |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
275 Activating these will insert or delete elements from an editable list. |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
276 The list is created by the @code{editable-list} widget. |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
277 @cindex embedded buttons |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
278 @item Embedded Buttons |
| 25829 | 279 The @samp{@b{_other work_}} is an example of an embedded |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
280 button. Embedded buttons are not associated with a fields, but can serve |
| 25829 | 281 any purpose, such as implementing hypertext references. They are |
| 282 usually created by the @code{link} widget. | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
283 @item The @samp{@b{[ ]}} and @samp{@b{[X]}} buttons |
| 25829 | 284 Activating one of these will convert it to the other. This is useful |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
285 for implementing multiple-choice fields. You can create it with the |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
286 @code{checkbox} widget. |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
287 @item The @samp{@b{( )}} and @samp{@b{(*)}} buttons |
| 25829 | 288 Only one radio button in a @code{radio-button-choice} widget can be |
| 289 selected at any time. When you invoke one of the unselected radio | |
| 290 buttons, it will be selected and the previous selected radio button will | |
| 291 become unselected. | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
292 @item The @samp{@b{[Apply Form]}} @samp{@b{[Reset Form]}} buttons |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
293 These are explicit buttons made with the @code{push-button} widget. The |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
294 main difference from the @code{link} widget is that the buttons will be |
| 25829 | 295 displayed as GUI buttons when possible. |
| 296 @end table | |
| 297 | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
298 To make them easier to locate, buttons are emphasized in the buffer. |
| 25829 | 299 |
| 300 @deffn Face widget-button-face | |
| 301 Face used for buttons. | |
| 302 @end deffn | |
| 303 | |
| 304 @defopt widget-mouse-face | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
305 Face used for highlighting a button when the mouse pointer moves across |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
306 it. |
| 25829 | 307 @end defopt |
| 308 | |
| 309 @subsection Navigation | |
| 310 | |
| 311 You can use all the normal Emacs commands to move around in a form | |
| 312 buffer, plus you will have these additional commands: | |
| 313 | |
| 314 @table @kbd | |
| 315 @item @key{TAB} | |
| 316 @deffn Command widget-forward &optional count | |
| 317 Move point @var{count} buttons or editing fields forward. | |
| 318 @end deffn | |
| 68313 | 319 @item @kbd{M-@key{TAB}} |
|
68348
f2441254ec75
(User Interface): Add S-TAB for widget-backward.
Juri Linkov <juri@jurta.org>
parents:
68313
diff
changeset
|
320 @itemx @kbd{S-@key{TAB}} |
| 25829 | 321 @deffn Command widget-backward &optional count |
| 322 Move point @var{count} buttons or editing fields backward. | |
| 323 @end deffn | |
| 324 @end table | |
| 325 | |
| 326 @node Programming Example, Setting Up the Buffer, User Interface, Top | |
| 327 @comment node-name, next, previous, up | |
| 328 @section Programming Example | |
| 329 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
330 @cindex widgets, programming example |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
331 @cindex example of using widgets |
| 25829 | 332 Here is the code to implement the user interface example (@pxref{User |
| 333 Interface}). | |
| 334 | |
| 335 @lisp | |
| 336 (require 'widget) | |
| 337 | |
| 338 (eval-when-compile | |
| 339 (require 'wid-edit)) | |
| 340 | |
| 341 (defvar widget-example-repeat) | |
| 342 | |
| 343 (defun widget-example () | |
| 344 "Create the widgets from the Widget manual." | |
| 345 (interactive) | |
| 346 (switch-to-buffer "*Widget Example*") | |
| 347 (kill-all-local-variables) | |
| 348 (make-local-variable 'widget-example-repeat) | |
| 349 (let ((inhibit-read-only t)) | |
| 350 (erase-buffer)) | |
|
55202
4c64ee838f41
* subr.el (remove-overlays): Make arguments optional.
Masatake YAMATO <jet@gyve.org>
parents:
55075
diff
changeset
|
351 (remove-overlays) |
| 25829 | 352 (widget-insert "Here is some documentation.\n\nName: ") |
| 353 (widget-create 'editable-field | |
| 354 :size 13 | |
|
56601
e546c74f795e
Update how to separate the editable field of an editable-field widget from other widgets.
Lars Hansen <larsh@soem.dk>
parents:
55202
diff
changeset
|
355 :format "%v " ; Text after the field! |
| 25829 | 356 "My Name") |
| 357 (widget-create 'menu-choice | |
| 358 :tag "Choose" | |
| 359 :value "This" | |
| 360 :help-echo "Choose me, please!" | |
| 361 :notify (lambda (widget &rest ignore) | |
| 362 (message "%s is a good choice!" | |
| 363 (widget-value widget))) | |
| 364 '(item :tag "This option" :value "This") | |
| 365 '(choice-item "That option") | |
| 366 '(editable-field :menu-tag "No option" "Thus option")) | |
| 367 (widget-insert "Address: ") | |
| 368 (widget-create 'editable-field | |
| 369 "Some Place\nIn some City\nSome country.") | |
| 370 (widget-insert "\nSee also ") | |
| 371 (widget-create 'link | |
| 372 :notify (lambda (&rest ignore) | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
373 (widget-value-set widget-example-repeat |
| 25829 | 374 '("En" "To" "Tre")) |
| 375 (widget-setup)) | |
| 376 "other work") | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
377 (widget-insert |
| 37806 | 378 " for more information.\n\nNumbers: count to three below\n") |
| 25829 | 379 (setq widget-example-repeat |
| 380 (widget-create 'editable-list | |
| 381 :entry-format "%i %d %v" | |
| 382 :notify (lambda (widget &rest ignore) | |
| 383 (let ((old (widget-get widget | |
| 384 ':example-length)) | |
| 385 (new (length (widget-value widget)))) | |
| 386 (unless (eq old new) | |
| 387 (widget-put widget ':example-length new) | |
| 388 (message "You can count to %d." new)))) | |
| 389 :value '("One" "Eh, two?" "Five!") | |
| 390 '(editable-field :value "three"))) | |
| 391 (widget-insert "\n\nSelect multiple:\n\n") | |
| 392 (widget-create 'checkbox t) | |
| 393 (widget-insert " This\n") | |
| 394 (widget-create 'checkbox nil) | |
| 395 (widget-insert " That\n") | |
| 396 (widget-create 'checkbox | |
| 397 :notify (lambda (&rest ignore) (message "Tickle")) | |
| 398 t) | |
| 399 (widget-insert " Thus\n\nSelect one:\n\n") | |
| 400 (widget-create 'radio-button-choice | |
| 401 :value "One" | |
| 402 :notify (lambda (widget &rest ignore) | |
| 403 (message "You selected %s" | |
| 404 (widget-value widget))) | |
| 405 '(item "One") '(item "Another One.") '(item "A Final One.")) | |
| 406 (widget-insert "\n") | |
| 407 (widget-create 'push-button | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
408 :notify (lambda (&rest ignore) |
| 25829 | 409 (if (= (length (widget-value widget-example-repeat)) |
| 410 3) | |
| 411 (message "Congratulation!") | |
| 412 (error "Three was the count!"))) | |
| 413 "Apply Form") | |
| 414 (widget-insert " ") | |
| 415 (widget-create 'push-button | |
| 416 :notify (lambda (&rest ignore) | |
| 417 (widget-example)) | |
| 418 "Reset Form") | |
| 419 (widget-insert "\n") | |
| 420 (use-local-map widget-keymap) | |
| 421 (widget-setup)) | |
| 422 @end lisp | |
| 423 | |
| 424 @node Setting Up the Buffer, Basic Types, Programming Example, Top | |
| 425 @comment node-name, next, previous, up | |
| 426 @section Setting Up the Buffer | |
| 427 | |
| 428 Widgets are created with @code{widget-create}, which returns a | |
| 429 @dfn{widget} object. This object can be queried and manipulated by | |
| 430 other widget functions, until it is deleted with @code{widget-delete}. | |
| 431 After the widgets have been created, @code{widget-setup} must be called | |
| 432 to enable them. | |
| 433 | |
| 434 @defun widget-create type [ keyword argument ]@dots{} | |
| 435 Create and return a widget of type @var{type}. | |
| 436 The syntax for the @var{type} argument is described in @ref{Basic Types}. | |
| 437 | |
| 438 The keyword arguments can be used to overwrite the keyword arguments | |
| 439 that are part of @var{type}. | |
| 440 @end defun | |
| 441 | |
| 442 @defun widget-delete widget | |
| 443 Delete @var{widget} and remove it from the buffer. | |
| 444 @end defun | |
| 445 | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
446 @defun widget-setup |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
447 Set up a buffer to support widgets. |
| 25829 | 448 |
| 449 This should be called after creating all the widgets and before allowing | |
| 450 the user to edit them. | |
| 451 @refill | |
| 452 @end defun | |
| 453 | |
| 454 If you want to insert text outside the widgets in the form, the | |
| 455 recommended way to do that is with @code{widget-insert}. | |
| 456 | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
457 @defun widget-insert |
| 25829 | 458 Insert the arguments, either strings or characters, at point. |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
459 The inserted text will be read-only. |
| 25829 | 460 @end defun |
| 461 | |
| 462 There is a standard widget keymap which you might find useful. | |
| 463 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
464 @findex widget-button-press |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
465 @findex widget-button-click |
| 25829 | 466 @defvr Const widget-keymap |
| 467 A keymap with the global keymap as its parent.@* | |
| 468 @key{TAB} and @kbd{C-@key{TAB}} are bound to @code{widget-forward} and | |
|
36512
00a52c680a19
Minor usage fixes. Don't mention Motif or XView.
Richard M. Stallman <rms@gnu.org>
parents:
36020
diff
changeset
|
469 @code{widget-backward}, respectively. @key{RET} and @kbd{Mouse-2} |
| 25829 | 470 are bound to @code{widget-button-press} and |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
471 @code{widget-button-click}.@refill |
| 25829 | 472 @end defvr |
| 473 | |
| 474 @defvar widget-global-map | |
| 475 Keymap used by @code{widget-button-press} and @code{widget-button-click} | |
| 476 when not on a button. By default this is @code{global-map}. | |
| 477 @end defvar | |
| 478 | |
| 479 @node Basic Types, Sexp Types, Setting Up the Buffer, Top | |
| 480 @comment node-name, next, previous, up | |
| 481 @section Basic Types | |
| 482 | |
| 483 The syntax of a type specification is given below: | |
| 484 | |
| 485 @example | |
| 486 NAME ::= (NAME [KEYWORD ARGUMENT]... ARGS) | |
| 487 | NAME | |
| 488 @end example | |
| 489 | |
| 490 Where, @var{name} is a widget name, @var{keyword} is the name of a | |
| 491 property, @var{argument} is the value of the property, and @var{args} | |
| 492 are interpreted in a widget specific way. | |
| 493 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
494 @cindex keyword arguments |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
495 The following keyword arguments that apply to all widgets: |
| 25829 | 496 |
| 497 @table @code | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
498 @vindex value@r{ keyword} |
| 25829 | 499 @item :value |
| 500 The initial value for widgets of this type. | |
| 501 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
502 @vindex format@r{ keyword} |
| 25829 | 503 @item :format |
| 504 This string will be inserted in the buffer when you create a widget. | |
| 505 The following @samp{%} escapes are available: | |
| 506 | |
| 507 @table @samp | |
| 508 @item %[ | |
| 509 @itemx %] | |
| 510 The text inside will be marked as a button. | |
| 511 | |
| 512 By default, the text will be shown in @code{widget-button-face}, and | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
513 surrounded by brackets. |
| 25829 | 514 |
| 515 @defopt widget-button-prefix | |
| 516 String to prefix buttons. | |
| 517 @end defopt | |
| 518 | |
| 519 @defopt widget-button-suffix | |
| 520 String to suffix buttons. | |
| 521 @end defopt | |
| 522 | |
| 523 @item %@{ | |
| 524 @itemx %@} | |
| 525 The text inside will be displayed with the face specified by | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
526 @code{:sample-face}. |
| 25829 | 527 |
| 528 @item %v | |
| 27214 | 529 This will be replaced with the buffer representation of the widget's |
| 25829 | 530 value. What this is depends on the widget type. |
| 531 | |
| 532 @item %d | |
| 533 Insert the string specified by @code{:doc} here. | |
| 534 | |
| 535 @item %h | |
| 536 Like @samp{%d}, with the following modifications: If the documentation | |
| 537 string is more than one line, it will add a button which will toggle | |
| 538 between showing only the first line, and showing the full text. | |
| 539 Furthermore, if there is no @code{:doc} property in the widget, it will | |
| 540 instead examine the @code{:documentation-property} property. If it is a | |
| 541 lambda expression, it will be called with the widget's value as an | |
| 542 argument, and the result will be used as the documentation text. | |
| 543 | |
| 544 @item %t | |
| 545 Insert the string specified by @code{:tag} here, or the @code{princ} | |
| 546 representation of the value if there is no tag. | |
| 547 | |
| 548 @item %% | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
549 Insert a literal @samp{%}. |
| 25829 | 550 @end table |
| 551 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
552 @vindex button-face@r{ keyword} |
| 25829 | 553 @item :button-face |
| 554 Face used to highlight text inside %[ %] in the format. | |
| 555 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
556 @vindex button-prefix@r{ keyword} |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
557 @vindex button-suffix@r{ keyword} |
| 25829 | 558 @item :button-prefix |
| 559 @itemx :button-suffix | |
| 560 Text around %[ %] in the format. | |
| 561 | |
| 562 These can be | |
| 563 @table @emph | |
| 564 @item nil | |
| 565 No text is inserted. | |
| 566 | |
| 567 @item a string | |
| 568 The string is inserted literally. | |
| 569 | |
| 570 @item a symbol | |
| 571 The value of the symbol is expanded according to this table. | |
| 572 @end table | |
| 573 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
574 @vindex doc@r{ keyword} |
| 25829 | 575 @item :doc |
| 576 The string inserted by the @samp{%d} escape in the format | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
577 string. |
| 25829 | 578 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
579 @vindex tag@r{ keyword} |
| 25829 | 580 @item :tag |
| 581 The string inserted by the @samp{%t} escape in the format | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
582 string. |
| 25829 | 583 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
584 @vindex tag-glyph@r{ keyword} |
| 25829 | 585 @item :tag-glyph |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
586 Name of image to use instead of the string specified by @code{:tag} on |
| 25829 | 587 Emacsen that supports it. |
| 588 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
589 @vindex help-echo@r{ keyword} |
| 25829 | 590 @item :help-echo |
| 33521 | 591 Specifies how to display a message whenever you move to the widget with |
| 592 either @code{widget-forward} or @code{widget-backward} or move the mouse | |
| 33538 | 593 over it (using the standard @code{help-echo} mechanism). The argument |
|
52269
b4f51d656553
(Basic Types): The argument to `:help-echo' can now be a form that
Luc Teirlinck <teirllm@auburn.edu>
parents:
49600
diff
changeset
|
594 is either a string to display, a function of one argument, the widget, |
|
b4f51d656553
(Basic Types): The argument to `:help-echo' can now be a form that
Luc Teirlinck <teirllm@auburn.edu>
parents:
49600
diff
changeset
|
595 which should return a string to display, or a form that evaluates to |
|
b4f51d656553
(Basic Types): The argument to `:help-echo' can now be a form that
Luc Teirlinck <teirllm@auburn.edu>
parents:
49600
diff
changeset
|
596 such a string. |
| 25829 | 597 |
|
59469
8507e984115b
(Basic Types): Add :follow-link keyword.
Kim F. Storm <storm@cua.dk>
parents:
56601
diff
changeset
|
598 @vindex follow-link@r{ keyword} |
|
8507e984115b
(Basic Types): Add :follow-link keyword.
Kim F. Storm <storm@cua.dk>
parents:
56601
diff
changeset
|
599 @item :follow-link |
|
8507e984115b
(Basic Types): Add :follow-link keyword.
Kim F. Storm <storm@cua.dk>
parents:
56601
diff
changeset
|
600 Specifies how to interpret a @key{mouse-1} click on the widget. |
|
62582
66abcfdcc731
(Basic Types): Update cross ref from "Enabling Mouse-1 to Follow Links"
Eli Zaretskii <eliz@gnu.org>
parents:
59469
diff
changeset
|
601 @xref{Links and Mouse-1,,, elisp, the Emacs Lisp Reference Manual}. |
|
59469
8507e984115b
(Basic Types): Add :follow-link keyword.
Kim F. Storm <storm@cua.dk>
parents:
56601
diff
changeset
|
602 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
603 @vindex indent@r{ keyword} |
| 25829 | 604 @item :indent |
| 605 An integer indicating the absolute number of spaces to indent children | |
| 606 of this widget. | |
| 607 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
608 @vindex offset@r{ keyword} |
| 25829 | 609 @item :offset |
| 610 An integer indicating how many extra spaces to add to the widget's | |
| 611 grandchildren compared to this widget. | |
| 612 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
613 @vindex extra-offset@r{ keyword} |
| 25829 | 614 @item :extra-offset |
| 615 An integer indicating how many extra spaces to add to the widget's | |
| 616 children compared to this widget. | |
| 617 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
618 @vindex notify@r{ keyword} |
| 25829 | 619 @item :notify |
| 620 A function called each time the widget or a nested widget is changed. | |
| 621 The function is called with two or three arguments. The first argument | |
| 622 is the widget itself, the second argument is the widget that was | |
| 623 changed, and the third argument is the event leading to the change, if | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
624 any. |
| 25829 | 625 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
626 @vindex menu-tag@r{ keyword} |
| 25829 | 627 @item :menu-tag |
| 628 Tag used in the menu when the widget is used as an option in a | |
| 629 @code{menu-choice} widget. | |
| 630 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
631 @vindex menu-tag-get@r{ keyword} |
| 25829 | 632 @item :menu-tag-get |
| 633 Function used for finding the tag when the widget is used as an option | |
| 634 in a @code{menu-choice} widget. By default, the tag used will be either the | |
| 635 @code{:menu-tag} or @code{:tag} property if present, or the @code{princ} | |
| 636 representation of the @code{:value} property if not. | |
| 637 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
638 @vindex match@r{ keyword} |
| 25829 | 639 @item :match |
| 640 Should be a function called with two arguments, the widget and a value, | |
|
47866
5177877a5328
Minor Texinfo usage fix.
Richard M. Stallman <rms@gnu.org>
parents:
47741
diff
changeset
|
641 and returning non-@code{nil} if the widget can represent the specified value. |
| 25829 | 642 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
643 @vindex validate@r{ keyword} |
| 25829 | 644 @item :validate |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
645 A function which takes a widget as an argument, and returns @code{nil} |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
646 if the widget's current value is valid for the widget. Otherwise it |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
647 should return the widget containing the invalid data, and set that |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
648 widget's @code{:error} property to a string explaining the error. |
| 25829 | 649 |
| 650 The following predefined function can be used: | |
| 651 | |
| 652 @defun widget-children-validate widget | |
| 653 All the @code{:children} of @var{widget} must be valid. | |
| 654 @end defun | |
| 655 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
656 @vindex tab-order@r{ keyword} |
| 25829 | 657 @item :tab-order |
| 658 Specify the order in which widgets are traversed with | |
| 659 @code{widget-forward} or @code{widget-backward}. This is only partially | |
| 660 implemented. | |
| 661 | |
| 662 @enumerate a | |
| 663 @item | |
| 664 Widgets with tabbing order @code{-1} are ignored. | |
| 665 | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
666 @item |
| 25829 | 667 (Unimplemented) When on a widget with tabbing order @var{n}, go to the |
| 668 next widget in the buffer with tabbing order @var{n+1} or @code{nil}, | |
| 669 whichever comes first. | |
| 670 | |
| 671 @item | |
| 672 When on a widget with no tabbing order specified, go to the next widget | |
| 673 in the buffer with a positive tabbing order, or @code{nil} | |
| 674 @end enumerate | |
| 675 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
676 @vindex parent@r{ keyword} |
| 25829 | 677 @item :parent |
| 33521 | 678 The parent of a nested widget (e.g.@: a @code{menu-choice} item or an |
| 25829 | 679 element of a @code{editable-list} widget). |
| 680 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
681 @vindex sibling-args@r{ keyword} |
| 25829 | 682 @item :sibling-args |
| 683 This keyword is only used for members of a @code{radio-button-choice} or | |
| 684 @code{checklist}. The value should be a list of extra keyword | |
| 685 arguments, which will be used when creating the @code{radio-button} or | |
| 686 @code{checkbox} associated with this item. | |
| 687 | |
| 688 @end table | |
| 689 | |
| 690 @deffn {User Option} widget-glyph-directory | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
691 Directory where glyphs are found. |
| 25829 | 692 Widget will look here for a file with the same name as specified for the |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
693 image, with either a @file{.xpm} (if supported) or @file{.xbm} extension. |
| 25829 | 694 @end deffn |
| 695 | |
| 696 @deffn{User Option} widget-glyph-enable | |
| 55075 | 697 If non-@code{nil}, allow glyphs to appear on displays where they are supported. |
| 25829 | 698 @end deffn |
| 699 | |
| 700 | |
| 701 @menu | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
702 * link:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
703 * url-link:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
704 * info-link:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
705 * push-button:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
706 * editable-field:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
707 * text:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
708 * menu-choice:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
709 * radio-button-choice:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
710 * item:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
711 * choice-item:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
712 * toggle:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
713 * checkbox:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
714 * checklist:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
715 * editable-list:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
716 * group:: |
| 25829 | 717 @end menu |
| 718 | |
| 719 @node link, url-link, Basic Types, Basic Types | |
| 720 @comment node-name, next, previous, up | |
| 721 @subsection The @code{link} Widget | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
722 @findex link@r{ widget} |
| 25829 | 723 |
| 724 Syntax: | |
| 725 | |
| 726 @example | |
| 727 TYPE ::= (link [KEYWORD ARGUMENT]... [ VALUE ]) | |
| 728 @end example | |
| 729 | |
| 730 The @var{value}, if present, is used to initialize the @code{:value} | |
| 731 property. The value should be a string, which will be inserted in the | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
732 buffer. |
| 25829 | 733 |
| 734 By default the link will be shown in brackets. | |
| 735 | |
| 736 @defopt widget-link-prefix | |
| 737 String to prefix links. | |
| 738 @end defopt | |
| 739 | |
| 740 @defopt widget-link-suffix | |
| 741 String to suffix links. | |
| 742 @end defopt | |
| 743 | |
| 744 @node url-link, info-link, link, Basic Types | |
| 745 @comment node-name, next, previous, up | |
| 746 @subsection The @code{url-link} Widget | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
747 @findex url-link@r{ widget} |
| 25829 | 748 |
| 749 Syntax: | |
| 750 | |
| 751 @example | |
| 752 TYPE ::= (url-link [KEYWORD ARGUMENT]... URL) | |
| 753 @end example | |
| 754 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
755 @findex browse-url-browser-function@r{, and @code{url-link} widget} |
|
52979
3649390c0f91
Replace @sc{ascii} and ASCII with @acronym{ASCII}.
Eli Zaretskii <eliz@gnu.org>
parents:
52936
diff
changeset
|
756 When this link is invoked, the @acronym{WWW} browser specified by |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
757 @code{browse-url-browser-function} will be called with @var{url}. |
| 25829 | 758 |
| 759 @node info-link, push-button, url-link, Basic Types | |
| 760 @comment node-name, next, previous, up | |
| 761 @subsection The @code{info-link} Widget | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
762 @findex info-link@r{ widget} |
| 25829 | 763 |
| 764 Syntax: | |
| 765 | |
| 766 @example | |
| 767 TYPE ::= (info-link [KEYWORD ARGUMENT]... ADDRESS) | |
| 768 @end example | |
| 769 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
770 When this link is invoked, the built-in Info reader is started on |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
771 @var{address}. |
| 25829 | 772 |
| 773 @node push-button, editable-field, info-link, Basic Types | |
| 774 @comment node-name, next, previous, up | |
| 775 @subsection The @code{push-button} Widget | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
776 @findex push-button@r{ widget} |
| 25829 | 777 |
| 778 Syntax: | |
| 779 | |
| 780 @example | |
| 781 TYPE ::= (push-button [KEYWORD ARGUMENT]... [ VALUE ]) | |
| 782 @end example | |
| 783 | |
| 784 The @var{value}, if present, is used to initialize the @code{:value} | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
785 property. The value should be a string, which will be inserted in the |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
786 buffer. |
| 25829 | 787 |
| 788 By default the tag will be shown in brackets. | |
| 789 | |
| 790 @defopt widget-push-button-prefix | |
| 791 String to prefix push buttons. | |
| 792 @end defopt | |
| 793 | |
| 794 @defopt widget-push-button-suffix | |
| 795 String to suffix push buttons. | |
| 796 @end defopt | |
| 797 | |
| 798 @node editable-field, text, push-button, Basic Types | |
| 799 @comment node-name, next, previous, up | |
| 800 @subsection The @code{editable-field} Widget | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
801 @findex editable-field@r{ widget} |
| 25829 | 802 |
| 803 Syntax: | |
| 804 | |
| 805 @example | |
| 806 TYPE ::= (editable-field [KEYWORD ARGUMENT]... [ VALUE ]) | |
| 807 @end example | |
| 808 | |
| 809 The @var{value}, if present, is used to initialize the @code{:value} | |
| 810 property. The value should be a string, which will be inserted in | |
| 811 field. This widget will match all string values. | |
| 812 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
813 The following extra properties are recognized: |
| 25829 | 814 |
| 815 @table @code | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
816 @vindex size@r{ keyword} |
| 25829 | 817 @item :size |
| 818 The width of the editable field.@* | |
| 819 By default the field will reach to the end of the line. | |
| 820 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
821 @vindex value-face@r{ keyword} |
| 25829 | 822 @item :value-face |
| 823 Face used for highlighting the editable field. Default is | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
824 @code{widget-field-face}, see @ref{User Interface}. |
| 25829 | 825 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
826 @vindex secret@r{ keyword} |
| 25829 | 827 @item :secret |
| 33521 | 828 Character used to display the value. You can set this to e.g.@: @code{?*} |
| 25829 | 829 if the field contains a password or other secret information. By |
| 55075 | 830 default, this is @code{nil}, and the value is not secret. |
| 25829 | 831 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
832 @vindex valid-regexp@r{ keyword} |
| 25829 | 833 @item :valid-regexp |
| 834 By default the @code{:validate} function will match the content of the | |
| 835 field with the value of this attribute. The default value is @code{""} | |
| 836 which matches everything. | |
| 837 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
838 @vindex keymap@r{ keyword} |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
839 @vindex widget-field-keymap |
| 25829 | 840 @item :keymap |
| 841 Keymap used in the editable field. The default value is | |
| 842 @code{widget-field-keymap}, which allows you to use all the normal | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
843 editing commands, even if the buffer's major mode suppresses some of |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
844 them. Pressing @key{RET} invokes the function specified by |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
845 @code{:action}. |
| 25829 | 846 @end table |
| 847 | |
| 848 @node text, menu-choice, editable-field, Basic Types | |
| 849 @comment node-name, next, previous, up | |
| 850 @subsection The @code{text} Widget | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
851 @findex text@r{ widget} |
| 25829 | 852 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
853 @vindex widget-text-keymap |
| 25829 | 854 This is just like @code{editable-field}, but intended for multiline text |
| 855 fields. The default @code{:keymap} is @code{widget-text-keymap}, which | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
856 does not rebind the @key{RET} key. |
| 25829 | 857 |
| 858 @node menu-choice, radio-button-choice, text, Basic Types | |
| 859 @comment node-name, next, previous, up | |
| 860 @subsection The @code{menu-choice} Widget | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
861 @findex menu-choice@r{ widget} |
| 25829 | 862 |
| 863 Syntax: | |
| 864 | |
| 865 @example | |
| 866 TYPE ::= (menu-choice [KEYWORD ARGUMENT]... TYPE ... ) | |
| 867 @end example | |
| 868 | |
| 27214 | 869 The @var{type} argument represents each possible choice. The widget's |
| 870 value will be that of the chosen @var{type} argument. This widget will | |
| 871 match any value matching at least one of the specified @var{type} | |
| 872 arguments. | |
| 25829 | 873 |
| 874 @table @code | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
875 @vindex void@r{ keyword} |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
876 @item :void |
| 25829 | 877 Widget type used as a fallback when the value does not match any of the |
| 878 specified @var{type} arguments. | |
| 879 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
880 @vindex case-fold@r{ keyword} |
| 25829 | 881 @item :case-fold |
| 55075 | 882 Set this to @code{nil} if you don't want to ignore case when prompting for a |
| 25829 | 883 choice through the minibuffer. |
| 884 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
885 @vindex children@r{ keyword} |
| 25829 | 886 @item :children |
| 55075 | 887 A list whose @sc{car} is the widget representing the currently chosen |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
888 type in the buffer. |
| 25829 | 889 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
890 @vindex choice@r{ keyword} |
| 25829 | 891 @item :choice |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
892 The current chosen type. |
| 25829 | 893 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
894 @vindex args@r{ keyword} |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
895 @item :args |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
896 The list of types. |
| 25829 | 897 @end table |
| 898 | |
| 899 @node radio-button-choice, item, menu-choice, Basic Types | |
| 900 @comment node-name, next, previous, up | |
| 901 @subsection The @code{radio-button-choice} Widget | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
902 @findex radio-button-choice@r{ widget} |
| 25829 | 903 |
| 904 Syntax: | |
| 905 | |
| 906 @example | |
| 907 TYPE ::= (radio-button-choice [KEYWORD ARGUMENT]... TYPE ... ) | |
| 908 @end example | |
| 909 | |
| 27214 | 910 The @var{type} argument represents each possible choice. The widget's |
| 911 value will be that of the chosen @var{type} argument. This widget will | |
| 912 match any value matching at least one of the specified @var{type} | |
| 913 arguments. | |
| 25829 | 914 |
| 915 The following extra properties are recognized. | |
| 916 | |
| 917 @table @code | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
918 @vindex entry-format@r{ keyword} |
| 25829 | 919 @item :entry-format |
| 920 This string will be inserted for each entry in the list. | |
| 921 The following @samp{%} escapes are available: | |
| 922 @table @samp | |
| 923 @item %v | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
924 Replace with the buffer representation of the @var{type} widget. |
| 25829 | 925 @item %b |
| 926 Replace with the radio button. | |
| 927 @item %% | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
928 Insert a literal @samp{%}. |
| 25829 | 929 @end table |
| 930 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
931 @vindex button-args@r{ keyword} |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
932 @item :button-args |
| 25829 | 933 A list of keywords to pass to the radio buttons. Useful for setting |
| 33521 | 934 e.g.@: the @samp{:help-echo} for each button. |
| 25829 | 935 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
936 @vindex buttons@r{ keyword} |
| 25829 | 937 @item :buttons |
| 938 The widgets representing the radio buttons. | |
| 939 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
940 @vindex children@r{ keyword} |
| 25829 | 941 @item :children |
| 942 The widgets representing each type. | |
| 943 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
944 @vindex choice@r{ keyword} |
| 25829 | 945 @item :choice |
| 946 The current chosen type | |
| 947 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
948 @vindex args@r{ keyword} |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
949 @item :args |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
950 The list of types. |
| 25829 | 951 @end table |
| 952 | |
| 953 You can add extra radio button items to a @code{radio-button-choice} | |
| 954 widget after it has been created with the function | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
955 @code{widget-radio-add-item}. |
| 25829 | 956 |
| 957 @defun widget-radio-add-item widget type | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
958 Add to @code{radio-button-choice} widget @var{widget} a new radio button |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
959 item of type @var{type}. |
| 25829 | 960 @end defun |
| 961 | |
| 962 Please note that such items added after the @code{radio-button-choice} | |
| 963 widget has been created will @strong{not} be properly destructed when | |
| 964 you call @code{widget-delete}. | |
| 965 | |
| 966 @node item, choice-item, radio-button-choice, Basic Types | |
| 967 @comment node-name, next, previous, up | |
| 968 @subsection The @code{item} Widget | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
969 @findex item@r{ widget} |
| 25829 | 970 |
| 971 Syntax: | |
| 972 | |
| 973 @example | |
| 974 ITEM ::= (item [KEYWORD ARGUMENT]... VALUE) | |
| 975 @end example | |
| 976 | |
| 977 The @var{value}, if present, is used to initialize the @code{:value} | |
| 978 property. The value should be a string, which will be inserted in the | |
| 979 buffer. This widget will only match the specified value. | |
| 980 | |
| 981 @node choice-item, toggle, item, Basic Types | |
| 982 @comment node-name, next, previous, up | |
| 983 @subsection The @code{choice-item} Widget | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
984 @findex choice-item@r{ widget} |
| 25829 | 985 |
| 986 Syntax: | |
| 987 | |
| 988 @example | |
| 989 ITEM ::= (choice-item [KEYWORD ARGUMENT]... VALUE) | |
| 990 @end example | |
| 991 | |
| 992 The @var{value}, if present, is used to initialize the @code{:value} | |
| 993 property. The value should be a string, which will be inserted in the | |
| 994 buffer as a button. Activating the button of a @code{choice-item} is | |
| 995 equivalent to activating the parent widget. This widget will only match | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
996 the specified value. |
| 25829 | 997 |
| 998 @node toggle, checkbox, choice-item, Basic Types | |
| 999 @comment node-name, next, previous, up | |
| 1000 @subsection The @code{toggle} Widget | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1001 @findex toggle@r{ widget} |
| 25829 | 1002 |
| 1003 Syntax: | |
| 1004 | |
| 1005 @example | |
| 1006 TYPE ::= (toggle [KEYWORD ARGUMENT]...) | |
| 1007 @end example | |
| 1008 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1009 The widget has two possible states, @samp{on} and @samp{off}, which |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1010 correspond to a @code{t} or @code{nil} value, respectively. |
| 25829 | 1011 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1012 The following extra properties are recognized: |
| 25829 | 1013 |
| 1014 @table @code | |
| 1015 @item :on | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1016 A string representing the @samp{on} state. By default the string |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1017 @samp{on}. |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1018 @item :off |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1019 A string representing the @samp{off} state. By default the string |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1020 @samp{off}. |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1021 @vindex on-glyph@r{ keyword} |
| 25829 | 1022 @item :on-glyph |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1023 Name of a glyph to be used instead of the @samp{:on} text string, on |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1024 emacsen that supports this. |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1025 @vindex off-glyph@r{ keyword} |
| 25829 | 1026 @item :off-glyph |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1027 Name of a glyph to be used instead of the @samp{:off} text string, on |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1028 emacsen that supports this. |
| 25829 | 1029 @end table |
| 1030 | |
| 1031 @node checkbox, checklist, toggle, Basic Types | |
| 1032 @comment node-name, next, previous, up | |
| 1033 @subsection The @code{checkbox} Widget | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1034 @findex checkbox@r{ widget} |
| 25829 | 1035 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1036 This widget has two possible states, @samp{selected} and |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1037 @samp{unselected}, which corresponds to a @code{t} or @code{nil} value. |
| 25829 | 1038 |
| 1039 Syntax: | |
| 1040 | |
| 1041 @example | |
| 1042 TYPE ::= (checkbox [KEYWORD ARGUMENT]...) | |
| 1043 @end example | |
| 1044 | |
| 1045 @node checklist, editable-list, checkbox, Basic Types | |
| 1046 @comment node-name, next, previous, up | |
| 1047 @subsection The @code{checklist} Widget | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1048 @findex checklist@r{ widget} |
| 25829 | 1049 |
| 1050 Syntax: | |
| 1051 | |
| 1052 @example | |
| 1053 TYPE ::= (checklist [KEYWORD ARGUMENT]... TYPE ... ) | |
| 1054 @end example | |
| 1055 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1056 The @var{type} arguments represent each checklist item. The widget's |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1057 value will be a list containing the values of all checked @var{type} |
| 27214 | 1058 arguments. The checklist widget will match a list whose elements all |
| 1059 match at least one of the specified @var{type} arguments. | |
| 25829 | 1060 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1061 The following extra properties are recognized: |
| 25829 | 1062 |
| 1063 @table @code | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1064 @vindex entry-format@r{ keyword} |
| 25829 | 1065 @item :entry-format |
| 1066 This string will be inserted for each entry in the list. | |
| 1067 The following @samp{%} escapes are available: | |
| 1068 @table @samp | |
| 1069 @item %v | |
| 1070 Replaced with the buffer representation of the @var{type} widget. | |
| 1071 @item %b | |
| 1072 Replace with the checkbox. | |
| 1073 @item %% | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1074 Insert a literal @samp{%}. |
| 25829 | 1075 @end table |
| 1076 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1077 @vindex greedy@r{ keyword} |
| 25829 | 1078 @item :greedy |
| 27214 | 1079 Usually a checklist will only match if the items are in the exact |
| 25829 | 1080 sequence given in the specification. By setting @code{:greedy} to |
| 55075 | 1081 non-@code{nil}, it will allow the items to come in any sequence. |
| 1082 However, if you extract the value they will be in the sequence given | |
| 1083 in the checklist, i.e.@: the original sequence is forgotten. | |
| 25829 | 1084 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1085 @vindex button-args@r{ keyword} |
| 33521 | 1086 @item :button-args |
| 25829 | 1087 A list of keywords to pass to the checkboxes. Useful for setting |
| 33521 | 1088 e.g.@: the @samp{:help-echo} for each checkbox. |
| 25829 | 1089 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1090 @vindex buttons@r{ keyword} |
| 25829 | 1091 @item :buttons |
| 1092 The widgets representing the checkboxes. | |
| 1093 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1094 @vindex children@r{ keyword} |
| 25829 | 1095 @item :children |
| 1096 The widgets representing each type. | |
| 1097 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1098 @vindex args@r{ keyword} |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1099 @item :args |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1100 The list of types. |
| 25829 | 1101 @end table |
| 1102 | |
| 1103 @node editable-list, group, checklist, Basic Types | |
| 1104 @comment node-name, next, previous, up | |
| 1105 @subsection The @code{editable-list} Widget | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1106 @findex editable-list@r{ widget} |
| 25829 | 1107 |
| 1108 Syntax: | |
| 1109 | |
| 1110 @example | |
| 1111 TYPE ::= (editable-list [KEYWORD ARGUMENT]... TYPE) | |
| 1112 @end example | |
| 1113 | |
| 1114 The value is a list, where each member represents one widget of type | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1115 @var{type}. |
| 25829 | 1116 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1117 The following extra properties are recognized: |
| 25829 | 1118 |
| 1119 @table @code | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1120 @vindex entry-format@r{ keyword} |
| 25829 | 1121 @item :entry-format |
| 1122 This string will be inserted for each entry in the list. | |
| 1123 The following @samp{%} escapes are available: | |
| 1124 @table @samp | |
| 1125 @item %v | |
| 1126 This will be replaced with the buffer representation of the @var{type} | |
| 1127 widget. | |
| 1128 @item %i | |
| 36020 | 1129 Insert the @b{[INS]} button. |
| 25829 | 1130 @item %d |
| 1131 Insert the @b{[DEL]} button. | |
| 1132 @item %% | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1133 Insert a literal @samp{%}. |
| 25829 | 1134 @end table |
| 1135 | |
| 36020 | 1136 @vindex insert-button-args@r{ keyword} |
| 1137 @item :insert-button-args | |
| 25829 | 1138 A list of keyword arguments to pass to the insert buttons. |
| 1139 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1140 @vindex delete-button-args@r{ keyword} |
| 25829 | 1141 @item :delete-button-args |
| 1142 A list of keyword arguments to pass to the delete buttons. | |
| 1143 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1144 @vindex append-button-args@r{ keyword} |
| 25829 | 1145 @item :append-button-args |
| 1146 A list of keyword arguments to pass to the trailing insert button. | |
| 1147 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1148 @vindex buttons@r{ keyword} |
| 25829 | 1149 @item :buttons |
| 1150 The widgets representing the insert and delete buttons. | |
| 1151 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1152 @vindex children@r{ keyword} |
| 25829 | 1153 @item :children |
| 1154 The widgets representing the elements of the list. | |
| 1155 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1156 @vindex args@r{ keyword} |
| 25829 | 1157 @item :args |
| 55075 | 1158 List whose @sc{car} is the type of the list elements. |
| 25829 | 1159 @end table |
| 1160 | |
| 1161 @node group, , editable-list, Basic Types | |
| 1162 @comment node-name, next, previous, up | |
| 1163 @subsection The @code{group} Widget | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1164 @findex group@r{ widget} |
| 25829 | 1165 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1166 This widget simply group other widgets together. |
| 25829 | 1167 |
| 1168 Syntax: | |
| 1169 | |
| 1170 @example | |
| 1171 TYPE ::= (group [KEYWORD ARGUMENT]... TYPE...) | |
| 1172 @end example | |
| 1173 | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1174 The value is a list, with one member for each @var{type}. |
| 25829 | 1175 |
| 1176 @node Sexp Types, Widget Properties, Basic Types, Top | |
| 1177 @comment | |
| 1178 @section Sexp Types | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1179 @cindex sexp types |
| 25829 | 1180 |
| 55075 | 1181 A number of widgets for editing @dfn{s-expressions} (Lisp types), sexp |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1182 for short, are also available. These basically fall in several |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1183 categories described in this section. |
| 25829 | 1184 |
| 1185 @menu | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1186 * constants:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1187 * generic:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1188 * atoms:: |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1189 * composite:: |
| 25829 | 1190 @end menu |
| 1191 | |
| 1192 @node constants, generic, Sexp Types, Sexp Types | |
| 1193 @comment node-name, next, previous, up | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1194 @subsection The Constant Widgets |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1195 @cindex constant widgets |
| 25829 | 1196 |
| 55075 | 1197 The @code{const} widget can contain any Lisp expression, but the user is |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1198 prohibited from editing it, which is mainly useful as a component of one |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1199 of the composite widgets. |
| 25829 | 1200 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1201 The syntax for the @code{const} widget is: |
| 25829 | 1202 |
| 1203 @example | |
| 1204 TYPE ::= (const [KEYWORD ARGUMENT]... [ VALUE ]) | |
| 1205 @end example | |
| 1206 | |
| 1207 The @var{value}, if present, is used to initialize the @code{:value} | |
| 1208 property and can be any s-expression. | |
| 1209 | |
| 1210 @deffn Widget const | |
| 1211 This will display any valid s-expression in an immutable part of the | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1212 buffer. |
| 25829 | 1213 @end deffn |
| 1214 | |
| 1215 There are two variations of the @code{const} widget, namely | |
| 1216 @code{variable-item} and @code{function-item}. These should contain a | |
| 1217 symbol with a variable or function binding. The major difference from | |
| 1218 the @code{const} widget is that they will allow the user to see the | |
| 1219 variable or function documentation for the symbol. | |
| 1220 | |
| 1221 @deffn Widget variable-item | |
| 1222 An immutable symbol that is bound as a variable. | |
| 1223 @end deffn | |
| 1224 | |
| 1225 @deffn Widget function-item | |
| 1226 An immutable symbol that is bound as a function. | |
| 1227 @end deffn | |
| 1228 | |
| 1229 @node generic, atoms, constants, Sexp Types | |
| 1230 @comment node-name, next, previous, up | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1231 @subsection Generic Sexp Widget |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1232 @cindex generic sexp widget |
| 25829 | 1233 |
| 55075 | 1234 The @code{sexp} widget can contain any Lisp expression, and allows the |
| 25829 | 1235 user to edit it inline in the buffer. |
| 1236 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1237 The syntax for the @code{sexp} widget is: |
| 25829 | 1238 |
| 1239 @example | |
| 1240 TYPE ::= (sexp [KEYWORD ARGUMENT]... [ VALUE ]) | |
| 1241 @end example | |
| 1242 | |
| 1243 @deffn Widget sexp | |
| 1244 This will allow you to edit any valid s-expression in an editable buffer | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1245 field. |
| 25829 | 1246 |
| 1247 The @code{sexp} widget takes the same keyword arguments as the | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1248 @code{editable-field} widget. @xref{editable-field}. |
| 25829 | 1249 @end deffn |
| 1250 | |
| 1251 @node atoms, composite, generic, Sexp Types | |
| 1252 @comment node-name, next, previous, up | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1253 @subsection Atomic Sexp Widgets |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1254 @cindex atomic sexp widget |
| 25829 | 1255 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1256 The atoms are s-expressions that do not consist of other s-expressions. |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1257 For example, a string, a file name, or a symbol are atoms, while a list |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1258 is a composite type. You can edit the value of an atom with the |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1259 following widgets. |
| 25829 | 1260 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1261 The syntax for all the atoms are: |
| 25829 | 1262 |
| 1263 @example | |
| 1264 TYPE ::= (NAME [KEYWORD ARGUMENT]... [ VALUE ]) | |
| 1265 @end example | |
| 1266 | |
| 1267 The @var{value}, if present, is used to initialize the @code{:value} | |
| 1268 property and must be an expression of the same type as the widget. | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1269 That is, the string widget can only be initialized with a string. |
| 25829 | 1270 |
| 1271 All the atom widgets take the same keyword arguments as the | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1272 @code{editable-field} widget. @xref{editable-field}. |
| 25829 | 1273 |
| 1274 @deffn Widget string | |
| 1275 Allows you to edit a string in an editable field. | |
| 1276 @end deffn | |
| 1277 | |
| 1278 @deffn Widget regexp | |
| 1279 Allows you to edit a regular expression in an editable field. | |
| 1280 @end deffn | |
| 1281 | |
| 1282 @deffn Widget character | |
| 1283 Allows you to enter a character in an editable field. | |
| 1284 @end deffn | |
| 1285 | |
| 1286 @deffn Widget file | |
|
67725
edc7ae3b8f06
(atoms): Delete obsolete remark about `file' widget.
Luc Teirlinck <teirllm@auburn.edu>
parents:
65555
diff
changeset
|
1287 Allows you to edit a file name in an editable field. |
| 25829 | 1288 |
| 1289 Keywords: | |
| 1290 @table @code | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1291 @vindex must-match@r{ keyword} |
| 25829 | 1292 @item :must-match |
| 55075 | 1293 If this is set to non-@code{nil}, only existing file names will be |
| 1294 allowed in the minibuffer. | |
| 25829 | 1295 @end table |
| 1296 @end deffn | |
| 1297 | |
| 1298 @deffn Widget directory | |
| 1299 Allows you to edit a directory name in an editable field. | |
| 1300 Similar to the @code{file} widget. | |
| 1301 @end deffn | |
| 1302 | |
| 1303 @deffn Widget symbol | |
| 55075 | 1304 Allows you to edit a Lisp symbol in an editable field. |
| 25829 | 1305 @end deffn |
| 1306 | |
| 1307 @deffn Widget function | |
| 1308 Allows you to edit a lambda expression, or a function name with completion. | |
| 1309 @end deffn | |
| 1310 | |
| 1311 @deffn Widget variable | |
| 1312 Allows you to edit a variable name, with completion. | |
| 1313 @end deffn | |
| 1314 | |
| 1315 @deffn Widget integer | |
| 1316 Allows you to edit an integer in an editable field. | |
| 1317 @end deffn | |
| 1318 | |
| 1319 @deffn Widget number | |
| 1320 Allows you to edit a number in an editable field. | |
| 1321 @end deffn | |
| 1322 | |
| 1323 @deffn Widget boolean | |
| 55075 | 1324 Allows you to edit a boolean. In Lisp this means a variable which is |
| 1325 either @code{nil} meaning false, or non-@code{nil} meaning true. | |
| 25829 | 1326 @end deffn |
| 1327 | |
| 1328 | |
| 1329 @node composite, , atoms, Sexp Types | |
| 1330 @comment node-name, next, previous, up | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1331 @subsection Composite Sexp Widgets |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1332 @cindex composite sexp widgets |
| 25829 | 1333 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1334 The syntax for the composite widget is: |
| 25829 | 1335 |
| 1336 @example | |
| 1337 TYPE ::= (NAME [KEYWORD ARGUMENT]... COMPONENT...) | |
| 1338 @end example | |
| 1339 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1340 @noindent |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1341 where each @var{component} must be a widget type. Each component widget |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1342 will be displayed in the buffer, and will be editable by the user. |
| 25829 | 1343 |
| 1344 @deffn Widget cons | |
| 55075 | 1345 The value of a @code{cons} widget is a cons-cell where the @sc{car} is |
| 1346 the value of the first component and the @sc{cdr} is the value of the | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1347 second component. There must be exactly two components. |
| 25829 | 1348 @end deffn |
| 1349 | |
| 1350 @deffn Widget list | |
| 1351 The value of a @code{list} widget is a list containing the value of | |
| 1352 each of its component. | |
| 1353 @end deffn | |
| 1354 | |
| 1355 @deffn Widget vector | |
| 1356 The value of a @code{vector} widget is a vector containing the value of | |
| 1357 each of its component. | |
| 1358 @end deffn | |
| 1359 | |
| 1360 The above suffice for specifying fixed size lists and vectors. To get | |
| 1361 variable length lists and vectors, you can use a @code{choice}, | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1362 @code{set}, or @code{repeat} widgets together with the @code{:inline} |
| 25829 | 1363 keywords. If any component of a composite widget has the @code{:inline} |
| 1364 keyword set, its value must be a list which will then be spliced into | |
| 1365 the composite. For example, to specify a list whose first element must | |
| 1366 be a file name, and whose remaining arguments should either by the | |
| 1367 symbol @code{t} or two files, you can use the following widget | |
| 1368 specification: | |
| 1369 | |
| 1370 @example | |
| 1371 (list file | |
| 1372 (choice (const t) | |
| 1373 (list :inline t | |
| 1374 :value ("foo" "bar") | |
| 1375 string string))) | |
| 1376 @end example | |
| 1377 | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1378 The value of a widget of this type will either have the form |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1379 @code{(file t)} or @code{(file string string)}. |
| 25829 | 1380 |
| 1381 This concept of inline is probably hard to understand. It was certainly | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1382 hard to implement, so instead of confusing you more by trying to explain |
| 27214 | 1383 it here, I'll just suggest you meditate over it for a while. |
| 25829 | 1384 |
| 1385 @deffn Widget choice | |
| 27214 | 1386 Allows you to edit a sexp which may have one of a fixed set of types. |
| 1387 It is currently implemented with the @code{choice-menu} basic widget, | |
| 1388 and has a similar syntax. | |
| 25829 | 1389 @end deffn |
| 1390 | |
| 1391 @deffn Widget set | |
| 1392 Allows you to specify a type which must be a list whose elements all | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1393 belong to given set. The elements of the list are not significant. |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1394 This is implemented on top of the @code{checklist} basic widget, and has |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1395 a similar syntax. |
| 25829 | 1396 @end deffn |
| 1397 | |
| 1398 @deffn Widget repeat | |
| 1399 Allows you to specify a variable length list whose members are all of | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1400 the same type. Implemented on top of the @code{editable-list} basic |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1401 widget, and has a similar syntax. |
| 25829 | 1402 @end deffn |
| 1403 | |
| 1404 @node Widget Properties, Defining New Widgets, Sexp Types, Top | |
| 1405 @comment node-name, next, previous, up | |
| 1406 @section Properties | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1407 @cindex properties of widgets |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1408 @cindex widget properties |
| 25829 | 1409 |
| 1410 You can examine or set the value of a widget by using the widget object | |
| 1411 that was returned by @code{widget-create}. | |
| 1412 | |
| 1413 @defun widget-value widget | |
| 1414 Return the current value contained in @var{widget}. | |
| 1415 It is an error to call this function on an uninitialized widget. | |
| 1416 @end defun | |
| 1417 | |
| 1418 @defun widget-value-set widget value | |
| 1419 Set the value contained in @var{widget} to @var{value}. | |
| 1420 It is an error to call this function with an invalid @var{value}. | |
| 1421 @end defun | |
| 1422 | |
| 1423 @strong{Important:} You @emph{must} call @code{widget-setup} after | |
| 1424 modifying the value of a widget before the user is allowed to edit the | |
| 1425 widget again. It is enough to call @code{widget-setup} once if you | |
| 1426 modify multiple widgets. This is currently only necessary if the widget | |
| 1427 contains an editing field, but may be necessary for other widgets in the | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1428 future. |
| 25829 | 1429 |
| 1430 If your application needs to associate some information with the widget | |
| 1431 objects, for example a reference to the item being edited, it can be | |
| 1432 done with @code{widget-put} and @code{widget-get}. The property names | |
| 1433 must begin with a @samp{:}. | |
| 1434 | |
| 1435 @defun widget-put widget property value | |
| 1436 In @var{widget} set @var{property} to @var{value}. | |
| 1437 @var{property} should be a symbol, while @var{value} can be anything. | |
| 1438 @end defun | |
| 1439 | |
| 1440 @defun widget-get widget property | |
| 1441 In @var{widget} return the value for @var{property}. | |
| 1442 @var{property} should be a symbol, the value is what was last set by | |
| 1443 @code{widget-put} for @var{property}. | |
| 1444 @end defun | |
| 1445 | |
| 1446 @defun widget-member widget property | |
| 55075 | 1447 Non-@code{nil} if @var{widget} has a value (even @code{nil}) for |
| 1448 property @var{property}. | |
| 25829 | 1449 @end defun |
| 1450 | |
| 1451 Occasionally it can be useful to know which kind of widget you have, | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1452 i.e.@: the name of the widget type you gave when the widget was created. |
| 25829 | 1453 |
| 1454 @defun widget-type widget | |
| 1455 Return the name of @var{widget}, a symbol. | |
| 1456 @end defun | |
| 1457 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1458 @cindex active widget |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1459 @cindex inactive widget |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1460 @cindex activate a widget |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1461 @cindex deactivate a widget |
| 25829 | 1462 Widgets can be in two states: active, which means they are modifiable by |
| 1463 the user, or inactive, which means they cannot be modified by the user. | |
| 1464 You can query or set the state with the following code: | |
| 1465 | |
| 1466 @lisp | |
| 1467 ;; Examine if @var{widget} is active or not. | |
| 1468 (if (widget-apply @var{widget} :active) | |
| 1469 (message "Widget is active.") | |
| 1470 (message "Widget is inactive.") | |
| 1471 | |
| 1472 ;; Make @var{widget} inactive. | |
| 1473 (widget-apply @var{widget} :deactivate) | |
| 1474 | |
| 1475 ;; Make @var{widget} active. | |
| 1476 (widget-apply @var{widget} :activate) | |
| 1477 @end lisp | |
| 1478 | |
| 27214 | 1479 A widget is inactive if it, or any of its ancestors (found by |
| 1480 following the @code{:parent} link), have been deactivated. To make sure | |
| 1481 a widget is really active, you must therefore activate both it and | |
| 25829 | 1482 all its ancestors. |
| 1483 | |
| 1484 @lisp | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1485 (while widget |
| 25829 | 1486 (widget-apply widget :activate) |
| 1487 (setq widget (widget-get widget :parent))) | |
| 1488 @end lisp | |
| 1489 | |
| 1490 You can check if a widget has been made inactive by examining the value | |
| 55075 | 1491 of the @code{:inactive} keyword. If this is non-@code{nil}, the widget itself |
| 27214 | 1492 has been deactivated. This is different from using the @code{:active} |
| 1493 keyword, in that the latter tells you if the widget @strong{or} any of | |
| 1494 its ancestors have been deactivated. Do not attempt to set the | |
| 25829 | 1495 @code{:inactive} keyword directly. Use the @code{:activate} |
| 27214 | 1496 @code{:deactivate} keywords instead. |
| 25829 | 1497 |
| 1498 | |
| 1499 @node Defining New Widgets, Widget Browser, Widget Properties, Top | |
| 1500 @comment node-name, next, previous, up | |
| 1501 @section Defining New Widgets | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1502 @cindex new widgets |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1503 @cindex defining new widgets |
| 25829 | 1504 |
|
37448
a788be76cf22
widget-define => define-widget.
Richard M. Stallman <rms@gnu.org>
parents:
36512
diff
changeset
|
1505 You can define specialized widgets with @code{define-widget}. It allows |
| 25829 | 1506 you to create a shorthand for more complex widgets, including specifying |
| 27214 | 1507 component widgets and new default values for the keyword |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1508 arguments. |
| 25829 | 1509 |
|
37448
a788be76cf22
widget-define => define-widget.
Richard M. Stallman <rms@gnu.org>
parents:
36512
diff
changeset
|
1510 @defun define-widget name class doc &rest args |
| 25829 | 1511 Define a new widget type named @var{name} from @code{class}. |
| 1512 | |
| 1513 @var{name} and class should both be symbols, @code{class} should be one | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1514 of the existing widget types. |
| 25829 | 1515 |
| 55075 | 1516 The third argument @var{doc} is a documentation string for the widget. |
| 25829 | 1517 |
| 1518 After the new widget has been defined, the following two calls will | |
| 1519 create identical widgets: | |
| 1520 | |
| 1521 @itemize @bullet | |
| 1522 @item | |
| 1523 @lisp | |
| 1524 (widget-create @var{name}) | |
| 1525 @end lisp | |
| 1526 | |
| 1527 @item | |
| 1528 @lisp | |
| 1529 (apply widget-create @var{class} @var{args}) | |
| 1530 @end lisp | |
| 1531 @end itemize | |
| 1532 | |
| 1533 @end defun | |
| 1534 | |
|
37448
a788be76cf22
widget-define => define-widget.
Richard M. Stallman <rms@gnu.org>
parents:
36512
diff
changeset
|
1535 Using @code{define-widget} just stores the definition of the widget type |
| 27214 | 1536 in the @code{widget-type} property of @var{name}, which is what |
| 25829 | 1537 @code{widget-create} uses. |
| 1538 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1539 If you only want to specify defaults for keywords with no complex |
| 25829 | 1540 conversions, you can use @code{identity} as your conversion function. |
| 1541 | |
| 1542 The following additional keyword arguments are useful when defining new | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1543 widgets: |
| 25829 | 1544 @table @code |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1545 @vindex convert-widget@r{ keyword} |
| 25829 | 1546 @item :convert-widget |
| 1547 Function to convert a widget type before creating a widget of that | |
| 1548 type. It takes a widget type as an argument, and returns the converted | |
| 1549 widget type. When a widget is created, this function is called for the | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1550 widget type and all the widget's parent types, most derived first. |
| 25829 | 1551 |
| 1552 The following predefined functions can be used here: | |
| 1553 | |
| 1554 @defun widget-types-convert-widget widget | |
| 1555 Convert @code{:args} as widget types in @var{widget}. | |
| 1556 @end defun | |
| 1557 | |
| 1558 @defun widget-value-convert-widget widget | |
| 1559 Initialize @code{:value} from @code{:args} in @var{widget}. | |
| 1560 @end defun | |
| 1561 | |
| 47741 | 1562 @vindex copy@r{ keyword} |
| 1563 @item :copy | |
| 1564 Function to deep copy a widget type. It takes a shallow copy of the | |
| 1565 widget type as an argument (made by @code{copy-sequence}), and returns a | |
| 1566 deep copy. The purpose of this is to avoid having different instances | |
| 1567 of combined widgets share nested attributes. | |
| 1568 | |
| 1569 The following predefined functions can be used here: | |
| 1570 | |
| 1571 @defun widget-types-copy widget | |
| 1572 Copy @code{:args} as widget types in @var{widget}. | |
| 1573 @end defun | |
| 1574 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1575 @vindex value-to-internal@r{ keyword} |
| 25829 | 1576 @item :value-to-internal |
| 1577 Function to convert the value to the internal format. The function | |
| 1578 takes two arguments, a widget and an external value, and returns the | |
| 1579 internal value. The function is called on the present @code{:value} | |
| 1580 when the widget is created, and on any value set later with | |
| 1581 @code{widget-value-set}. | |
| 1582 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1583 @vindex value-to-external@r{ keyword} |
| 25829 | 1584 @item :value-to-external |
| 1585 Function to convert the value to the external format. The function | |
| 1586 takes two arguments, a widget and an internal value, and returns the | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1587 external value. The function is called on the present @code{:value} |
| 25829 | 1588 when the widget is created, and on any value set later with |
| 1589 @code{widget-value-set}. | |
| 1590 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1591 @vindex create@r{ keyword} |
| 25829 | 1592 @item :create |
| 1593 Function to create a widget from scratch. The function takes one | |
| 27214 | 1594 argument, a widget type, and creates a widget of that type, inserts it |
| 1595 in the buffer, and returns a widget object. | |
| 25829 | 1596 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1597 @vindex delete@r{ keyword} |
| 25829 | 1598 @item :delete |
| 1599 Function to delete a widget. The function takes one argument, a widget, | |
| 1600 and should remove all traces of the widget from the buffer. | |
| 1601 | |
|
52936
cd6e896ac111
2003-10-26 Per Abrahamsen <abraham@dina.kvl.dk>
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
52703
diff
changeset
|
1602 The default value is: |
|
cd6e896ac111
2003-10-26 Per Abrahamsen <abraham@dina.kvl.dk>
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
52703
diff
changeset
|
1603 |
|
cd6e896ac111
2003-10-26 Per Abrahamsen <abraham@dina.kvl.dk>
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
52703
diff
changeset
|
1604 @defun widget-default-delete widget |
|
cd6e896ac111
2003-10-26 Per Abrahamsen <abraham@dina.kvl.dk>
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
52703
diff
changeset
|
1605 Remove @var{widget} from the buffer. |
|
cd6e896ac111
2003-10-26 Per Abrahamsen <abraham@dina.kvl.dk>
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
52703
diff
changeset
|
1606 Delete all @code{:children} and @code{:buttons} in @var{widget}. |
|
cd6e896ac111
2003-10-26 Per Abrahamsen <abraham@dina.kvl.dk>
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
52703
diff
changeset
|
1607 @end defun |
|
cd6e896ac111
2003-10-26 Per Abrahamsen <abraham@dina.kvl.dk>
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
52703
diff
changeset
|
1608 |
|
cd6e896ac111
2003-10-26 Per Abrahamsen <abraham@dina.kvl.dk>
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
52703
diff
changeset
|
1609 In most cases you should not change this value, but instead use |
|
cd6e896ac111
2003-10-26 Per Abrahamsen <abraham@dina.kvl.dk>
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
52703
diff
changeset
|
1610 @code{:value-delete} to make any additional cleanup. |
|
cd6e896ac111
2003-10-26 Per Abrahamsen <abraham@dina.kvl.dk>
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
52703
diff
changeset
|
1611 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1612 @vindex value-create@r{ keyword} |
| 25829 | 1613 @item :value-create |
| 1614 Function to expand the @samp{%v} escape in the format string. It will | |
| 27214 | 1615 be called with the widget as its argument and should insert a |
| 1616 representation of the widget's value in the buffer. | |
| 25829 | 1617 |
|
52936
cd6e896ac111
2003-10-26 Per Abrahamsen <abraham@dina.kvl.dk>
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
52703
diff
changeset
|
1618 Nested widgets should be listed in @code{:children} or @code{:buttons} |
|
cd6e896ac111
2003-10-26 Per Abrahamsen <abraham@dina.kvl.dk>
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
52703
diff
changeset
|
1619 to make sure they are automatically deleted. |
|
cd6e896ac111
2003-10-26 Per Abrahamsen <abraham@dina.kvl.dk>
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
52703
diff
changeset
|
1620 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1621 @vindex value-delete@r{ keyword} |
| 25829 | 1622 @item :value-delete |
| 27214 | 1623 Should remove the representation of the widget's value from the buffer. |
| 25829 | 1624 It will be called with the widget as its argument. It doesn't have to |
| 1625 remove the text, but it should release markers and delete nested widgets | |
|
52936
cd6e896ac111
2003-10-26 Per Abrahamsen <abraham@dina.kvl.dk>
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
52703
diff
changeset
|
1626 if these are not listed in @code{:children} or @code{:buttons}. |
| 25829 | 1627 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1628 @vindex value-get@r{ keyword} |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1629 @item :value-get |
| 25829 | 1630 Function to extract the value of a widget, as it is displayed in the |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1631 buffer. |
| 25829 | 1632 |
| 1633 The following predefined function can be used here: | |
| 1634 | |
| 1635 @defun widget-value-value-get widget | |
| 1636 Return the @code{:value} property of @var{widget}. | |
| 1637 @end defun | |
| 1638 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1639 @vindex format-handler@r{ keyword} |
| 25829 | 1640 @item :format-handler |
| 1641 Function to handle unknown @samp{%} escapes in the format string. It | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1642 will be called with the widget and the character that follows the |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1643 @samp{%} as arguments. You can set this to allow your widget to handle |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1644 non-standard escapes. |
| 25829 | 1645 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1646 @findex widget-default-format-handler |
| 25829 | 1647 You should end up calling @code{widget-default-format-handler} to handle |
| 1648 unknown escape sequences, which will handle the @samp{%h} and any future | |
| 1649 escape sequences, as well as give an error for unknown escapes. | |
| 1650 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1651 @vindex action@r{ keyword} |
| 25829 | 1652 @item :action |
| 1653 Function to handle user initiated events. By default, @code{:notify} | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1654 the parent. |
| 25829 | 1655 |
| 1656 The following predefined function can be used here: | |
| 1657 | |
| 1658 @defun widget-parent-action widget &optional event | |
| 1659 Tell @code{:parent} of @var{widget} to handle the @code{:action}. | |
| 1660 Optional @var{event} is the event that triggered the action. | |
| 1661 @end defun | |
| 1662 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1663 @vindex prompt-value@r{ keyword} |
| 25829 | 1664 @item :prompt-value |
| 1665 Function to prompt for a value in the minibuffer. The function should | |
| 1666 take four arguments, @var{widget}, @var{prompt}, @var{value}, and | |
| 1667 @var{unbound} and should return a value for widget entered by the user. | |
| 1668 @var{prompt} is the prompt to use. @var{value} is the default value to | |
| 55075 | 1669 use, unless @var{unbound} is non-@code{nil}, in which case there is no default |
| 25829 | 1670 value. The function should read the value using the method most natural |
| 1671 for this widget, and does not have to check that it matches. | |
| 1672 @end table | |
| 1673 | |
| 1674 If you want to define a new widget from scratch, use the @code{default} | |
| 1675 widget as its base. | |
| 1676 | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1677 @deffn Widget default |
|
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1678 Widget used as a base for other widgets. |
| 25829 | 1679 |
| 1680 It provides most of the functionality that is referred to as ``by | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1681 default'' in this text. |
| 25829 | 1682 @end deffn |
| 1683 | |
| 1684 @node Widget Browser, Widget Minor Mode, Defining New Widgets, Top | |
| 1685 @comment node-name, next, previous, up | |
| 1686 @section Widget Browser | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1687 @cindex widget browser |
| 25829 | 1688 |
| 1689 There is a separate package to browse widgets. This is intended to help | |
| 1690 programmers who want to examine the content of a widget. The browser | |
| 1691 shows the value of each keyword, but uses links for certain keywords | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1692 such as @samp{:parent}, which avoids printing cyclic structures. |
| 25829 | 1693 |
| 46641 | 1694 @deffn Command widget-browse @var{widget} |
| 1695 Create a widget browser for @var{widget}. | |
| 1696 When called interactively, prompt for @var{widget}. | |
| 25829 | 1697 @end deffn |
| 1698 | |
| 46641 | 1699 @deffn Command widget-browse-other-window @var{widget} |
| 1700 Create a widget browser for @var{widget} and show it in another window. | |
| 1701 When called interactively, prompt for @var{widget}. | |
| 25829 | 1702 @end deffn |
| 1703 | |
| 46641 | 1704 @deffn Command widget-browse-at @var{pos} |
| 1705 Create a widget browser for the widget at @var{pos}. | |
| 25829 | 1706 When called interactively, use the position of point. |
| 1707 @end deffn | |
| 1708 | |
| 1709 @node Widget Minor Mode, Utilities, Widget Browser, Top | |
| 1710 @comment node-name, next, previous, up | |
| 1711 @section Widget Minor Mode | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1712 @cindex widget minor mode |
| 25829 | 1713 |
| 1714 There is a minor mode for manipulating widgets in major modes that | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1715 don't provide any support for widgets themselves. This is mostly |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1716 intended to be useful for programmers doing experiments. |
| 25829 | 1717 |
| 1718 @deffn Command widget-minor-mode | |
| 1719 Toggle minor mode for traversing widgets. | |
| 1720 With arg, turn widget mode on if and only if arg is positive. | |
| 1721 @end deffn | |
| 1722 | |
| 1723 @defvar widget-minor-mode-keymap | |
| 1724 Keymap used in @code{widget-minor-mode}. | |
| 1725 @end defvar | |
| 1726 | |
| 1727 @node Utilities, Widget Wishlist, Widget Minor Mode, Top | |
| 1728 @comment node-name, next, previous, up | |
| 1729 @section Utilities. | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1730 @cindex utility functions for widgets |
| 25829 | 1731 |
| 1732 @defun widget-prompt-value widget prompt [ value unbound ] | |
| 1733 Prompt for a value matching @var{widget}, using @var{prompt}. | |
| 1734 The current value is assumed to be @var{value}, unless @var{unbound} is | |
| 55075 | 1735 non-@code{nil}.@refill |
| 25829 | 1736 @end defun |
| 1737 | |
| 1738 @defun widget-get-sibling widget | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1739 Get the item which @var{widget} is assumed to toggle. |
| 25829 | 1740 This is only meaningful for radio buttons or checkboxes in a list. |
| 1741 @end defun | |
| 1742 | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1743 @node Widget Wishlist, Index, Utilities, Top |
| 25829 | 1744 @comment node-name, next, previous, up |
| 1745 @section Wishlist | |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1746 @cindex todo |
| 25829 | 1747 |
| 1748 @itemize @bullet | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1749 @item |
| 25829 | 1750 It should be possible to add or remove items from a list with @kbd{C-k} |
| 1751 and @kbd{C-o} (suggested by @sc{rms}). | |
| 1752 | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1753 @item |
| 36020 | 1754 The @samp{[INS]} and @samp{[DEL]} buttons should be replaced by a single |
| 1755 dash (@samp{-}). The dash should be a button that, when invoked, asks | |
| 1756 whether you want to add or delete an item (@sc{rms} wanted to git rid of | |
| 1757 the ugly buttons, the dash is my idea). | |
| 1758 | |
| 25829 | 1759 @item |
| 1760 The @code{menu-choice} tag should be prettier, something like the abbreviated | |
| 1761 menus in Open Look. | |
| 1762 | |
| 1763 @item | |
| 1764 Finish @code{:tab-order}. | |
| 1765 | |
| 1766 @item | |
| 1767 Make indentation work with glyphs and proportional fonts. | |
| 1768 | |
| 1769 @item | |
| 1770 Add commands to show overview of object and class hierarchies to the | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1771 browser. |
| 25829 | 1772 |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1773 @item |
| 25829 | 1774 Find a way to disable mouse highlight for inactive widgets. |
| 1775 | |
| 1776 @item | |
| 1777 Find a way to make glyphs look inactive. | |
| 1778 | |
| 1779 @item | |
| 36020 | 1780 Add @code{property-list} widget. |
| 1781 | |
| 1782 @item | |
| 1783 Add @code{association-list} widget. | |
| 1784 | |
| 1785 @item | |
| 25829 | 1786 Add @code{key-binding} widget. |
| 1787 | |
| 1788 @item | |
| 1789 Add @code{widget} widget for editing widget specifications. | |
| 1790 | |
| 1791 @item | |
| 1792 Find clean way to implement variable length list. | |
| 1793 See @code{TeX-printer-list} for an explanation. | |
| 1794 | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1795 @item |
| 25829 | 1796 @kbd{C-h} in @code{widget-prompt-value} should give type specific help. |
| 1797 | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47866
diff
changeset
|
1798 @item |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1799 Add a @code{mailto} widget. |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1800 @end itemize |
| 25829 | 1801 |
|
30775
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1802 @node Index, , Widget Wishlist, Top |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1803 @comment node-name, next, previous, up |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1804 @unnumbered Index |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1805 |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1806 This is an alphabetical listing of all concepts, functions, commands, |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1807 variables, and widgets described in this manual. |
|
33d2bde9a99a
(Top): Add Index in the menu.
Eli Zaretskii <eliz@gnu.org>
parents:
30009
diff
changeset
|
1808 @printindex cp |
| 25829 | 1809 |
| 29713 | 1810 @setchapternewpage odd |
| 25829 | 1811 @contents |
| 1812 @bye | |
| 52401 | 1813 |
| 1814 @ignore | |
| 1815 arch-tag: 2b427731-4c61-4e72-85de-5ccec9c623f0 | |
| 1816 @end ignore |
