Merge from emacs-23; up to 2010-06-12T11:17:12Z!eliz@gnu.org.
[bpt/emacs.git] / lisp / widget.el
CommitLineData
e8af40ee 1;;; widget.el --- a library of user interface components
d543e20b 2;;
73b0cd50 3;; Copyright (C) 1996-1997, 2001-2011 Free Software Foundation, Inc.
d543e20b
PA
4;;
5;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
6;; Keywords: help, extensions, faces, hypermedia
8697863a 7;; Version: 1.9920
d543e20b 8;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
bd78fa1d 9;; Package: emacs
d543e20b 10
c2383d2d
RS
11;; This file is part of GNU Emacs.
12
eb3fa2cf 13;; GNU Emacs is free software: you can redistribute it and/or modify
c2383d2d 14;; it under the terms of the GNU General Public License as published by
eb3fa2cf
GM
15;; the Free Software Foundation, either version 3 of the License, or
16;; (at your option) any later version.
c2383d2d
RS
17
18;; GNU Emacs is distributed in the hope that it will be useful,
19;; but WITHOUT ANY WARRANTY; without even the implied warranty of
20;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21;; GNU General Public License for more details.
22
23;; You should have received a copy of the GNU General Public License
eb3fa2cf 24;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
c2383d2d 25
d543e20b 26;;; Commentary:
f1180544 27;;
b3e49cbb
DL
28;; The widget library is partially documented in the `widget' Info
29;; file.
d543e20b 30;;
b3e49cbb 31;; This file only contains the code needed to define new widget types.
d543e20b
PA
32;; Everything else is autoloaded from `wid-edit.el'.
33
34;;; Code:
35
b3e49cbb
DL
36;; Doing this is unnecessary in Emacs 20. Kept as dummy in case
37;; external libraries call it. We save a kb or two of purespace by
38;; dummying-out such definitions generally.
06b60517 39(defmacro define-widget-keywords (&rest _keys)
f12126f8
SM
40 ;; ;; Don't use backquote, since that makes trouble trying to
41 ;; ;; re-bootstrap from just the .el files.
42 ;; (list 'eval-and-compile
43 ;; (list 'let (list (list 'keywords (list 'quote keys)))
44 ;; (list 'while 'keywords
45 ;; (list 'or (list 'boundp (list 'car 'keywords))
46 ;; (list 'set (list 'car 'keywords) (list 'car 'keywords)))
47 ;; (list 'setq 'keywords (list 'cdr 'keywords)))))
b3e49cbb
DL
48 )
49
f12126f8
SM
50;;(define-widget-keywords :documentation-indent
51;; :complete-function :complete :button-overlay
52;; :field-overlay
53;; :documentation-shown :button-prefix
54;; :button-suffix :mouse-down-action :glyph-up :glyph-down :glyph-inactive
55;; :prompt-internal :prompt-history :prompt-match
56;; :prompt-value :deactivate :active
57;; :inactive :activate :sibling-args :delete-button-args
58;; :insert-button-args :append-button-args :button-args
59;; :tag-glyph :off-glyph :on-glyph :valid-regexp
60;; :secret :sample-face :sample-face-get :case-fold
61;; :create :convert-widget :format :value-create :offset :extra-offset
62;; :tag :doc :from :to :args :value :action
63;; :value-set :value-delete :match :parent :delete :menu-tag-get
64;; :value-get :choice :void :menu-tag :on :off :on-type :off-type
65;; :notify :entry-format :button :children :buttons :insert-before
66;; :delete-at :format-handler :widget :value-pos :value-to-internal
67;; :indent :size :value-to-external :validate :error :directory
68;; :must-match :type-error :value-inline :inline :match-inline :greedy
69;; :button-face-get :button-face :value-face :keymap :entry-from
70;; :entry-to :help-echo :documentation-property :tab-order)
d543e20b 71
74b99d45 72(put 'define-widget 'doc-string-elt 3) ;`declare' doesn't work in functions.
d543e20b
PA
73(defun define-widget (name class doc &rest args)
74 "Define a new widget type named NAME from CLASS.
75
76NAME and CLASS should both be symbols, CLASS should be one of the
77existing widget types, or nil to create the widget from scratch.
78
79After the new widget has been defined, the following two calls will
80create identical widgets:
81
82* (widget-create NAME)
83
84* (apply 'widget-create CLASS ARGS)
85
86The third argument DOC is a documentation string for the widget."
87 (put name 'widget-type (cons class args))
aaa448c9 88 (put name 'widget-documentation (purecopy doc))
6d528fc5 89 name)
d543e20b 90
89492072
DL
91;; This is used by external widget code (in W3, at least).
92(defalias 'widget-plist-member 'plist-member)
93
d543e20b
PA
94;;; The End.
95
96(provide 'widget)
97
e8af40ee 98;;; widget.el ends here