annotate lisp/widget.el @ 67086:7ae3d744378e

(Custom-reset-standard): Make it handle Custom group buffers correctly. (It used to throw an error in such buffers.) Make it ask for confirmation in group buffers and other Custom buffers containing more than one customization item.
author Luc Teirlinck <teirllm@auburn.edu>
date Tue, 22 Nov 2005 23:28:28 +0000
parents 005159df0f00
children 3bd95f4f2941 7beb78bc1f8e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 30147
diff changeset
1 ;;; widget.el --- a library of user interface components
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
2 ;;
64762
41bb365f41c4 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64091
diff changeset
3 ;; Copyright (C) 1996, 1997, 2002, 2003, 2004,
41bb365f41c4 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64091
diff changeset
4 ;; 2005 Free Software Foundation, Inc.
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
5 ;;
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
6 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
7 ;; Keywords: help, extensions, faces, hypermedia
18258
e83bc8150072 Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 18139
diff changeset
8 ;; Version: 1.9920
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
9 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
10
17520
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
11 ;; This file is part of GNU Emacs.
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
12
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
13 ;; GNU Emacs is free software; you can redistribute it and/or modify
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
14 ;; it under the terms of the GNU General Public License as published by
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
15 ;; the Free Software Foundation; either version 2, or (at your option)
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
16 ;; any later version.
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
17
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
18 ;; GNU Emacs is distributed in the hope that it will be useful,
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
21 ;; GNU General Public License for more details.
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
22
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
23 ;; You should have received a copy of the GNU General Public License
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
24 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64091
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
25 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
26 ;; Boston, MA 02110-1301, USA.
17520
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
27
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
28 ;;; Commentary:
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38436
diff changeset
29 ;;
25179
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
30 ;; The widget library is partially documented in the `widget' Info
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
31 ;; file.
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
32 ;;
25179
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
33 ;; This file only contains the code needed to define new widget types.
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
34 ;; Everything else is autoloaded from `wid-edit.el'.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
35
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
36 ;;; Code:
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
37
25179
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
38 ;; Doing this is unnecessary in Emacs 20. Kept as dummy in case
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
39 ;; external libraries call it. We save a kb or two of purespace by
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
40 ;; dummying-out such definitions generally.
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
41 (defmacro define-widget-keywords (&rest keys)
66401
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
42 ;; ;; Don't use backquote, since that makes trouble trying to
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
43 ;; ;; re-bootstrap from just the .el files.
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
44 ;; (list 'eval-and-compile
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
45 ;; (list 'let (list (list 'keywords (list 'quote keys)))
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
46 ;; (list 'while 'keywords
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
47 ;; (list 'or (list 'boundp (list 'car 'keywords))
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
48 ;; (list 'set (list 'car 'keywords) (list 'car 'keywords)))
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
49 ;; (list 'setq 'keywords (list 'cdr 'keywords)))))
25179
c7ee317291f8 (define-widget-keywords): Make dummy definition and comment-out its use.
Dave Love <fx@gnu.org>
parents: 21788
diff changeset
50 )
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
51
66401
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
52 ;;(define-widget-keywords :documentation-indent
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
53 ;; :complete-function :complete :button-overlay
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
54 ;; :field-overlay
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
55 ;; :documentation-shown :button-prefix
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
56 ;; :button-suffix :mouse-down-action :glyph-up :glyph-down :glyph-inactive
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
57 ;; :prompt-internal :prompt-history :prompt-match
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
58 ;; :prompt-value :deactivate :active
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
59 ;; :inactive :activate :sibling-args :delete-button-args
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
60 ;; :insert-button-args :append-button-args :button-args
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
61 ;; :tag-glyph :off-glyph :on-glyph :valid-regexp
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
62 ;; :secret :sample-face :sample-face-get :case-fold
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
63 ;; :create :convert-widget :format :value-create :offset :extra-offset
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
64 ;; :tag :doc :from :to :args :value :action
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
65 ;; :value-set :value-delete :match :parent :delete :menu-tag-get
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
66 ;; :value-get :choice :void :menu-tag :on :off :on-type :off-type
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
67 ;; :notify :entry-format :button :children :buttons :insert-before
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
68 ;; :delete-at :format-handler :widget :value-pos :value-to-internal
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
69 ;; :indent :size :value-to-external :validate :error :directory
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
70 ;; :must-match :type-error :value-inline :inline :match-inline :greedy
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
71 ;; :button-face-get :button-face :value-face :keymap :entry-from
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
72 ;; :entry-to :help-echo :documentation-property :tab-order)
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
73
67059
005159df0f00 (define-widget): Don't use declare for the doc-string-elt.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66401
diff changeset
74 (put 'define-widget 'doc-string-elt 3) ;`declare' doesn't work in functions.
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
75 (defun define-widget (name class doc &rest args)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
76 "Define a new widget type named NAME from CLASS.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
77
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
78 NAME and CLASS should both be symbols, CLASS should be one of the
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
79 existing widget types, or nil to create the widget from scratch.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
80
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
81 After the new widget has been defined, the following two calls will
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
82 create identical widgets:
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
83
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
84 * (widget-create NAME)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
85
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
86 * (apply 'widget-create CLASS ARGS)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
87
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
88 The third argument DOC is a documentation string for the widget."
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
89 (put name 'widget-type (cons class args))
17550
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17520
diff changeset
90 (put name 'widget-documentation doc)
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17520
diff changeset
91 name)
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
92
30147
490de0786afa (widget-plist-member): New alias.
Dave Love <fx@gnu.org>
parents: 25179
diff changeset
93 ;; This is used by external widget code (in W3, at least).
490de0786afa (widget-plist-member): New alias.
Dave Love <fx@gnu.org>
parents: 25179
diff changeset
94 (defalias 'widget-plist-member 'plist-member)
490de0786afa (widget-plist-member): New alias.
Dave Love <fx@gnu.org>
parents: 25179
diff changeset
95
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
96 ;;; The End.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
97
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
98 (provide 'widget)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
99
66401
a8bf0a9de6ac (define-widget): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64762
diff changeset
100 ;; arch-tag: 932c71a3-9aeb-4827-a293-8b88b26d5c58
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 30147
diff changeset
101 ;;; widget.el ends here