]> code.delx.au - gnu-emacs/blobdiff - lisp/widget.el
Comint, term, and compile now set EMACS
[gnu-emacs] / lisp / widget.el
index ffe8682b616a809545ae89eb5b1c369fb57a9cfc..2db645ab08de16f42f2a358873b4b9a8c7a9f6de 100644 (file)
@@ -1,18 +1,18 @@
 ;;; widget.el --- a library of user interface components
 ;;
-;; Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 2001-2016 Free Software Foundation, Inc.
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: help, extensions, faces, hypermedia
-;; Version: 1.9920
 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
+;; Package: emacs
 
 ;; This file is part of GNU Emacs.
 
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Commentary:
-;; 
+;;
 ;; The widget library is partially documented in the `widget' Info
 ;; file.
 ;;
 ;; Doing this is unnecessary in Emacs 20.  Kept as dummy in case
 ;; external libraries call it.  We save a kb or two of purespace by
 ;; dummying-out such definitions generally.
-(defmacro define-widget-keywords (&rest keys)
-;;;  ;; Don't use backquote, since that makes trouble trying to
-;;;  ;; re-bootstrap from just the .el files.
-;;;  (list 'eval-and-compile
-;;;    (list 'let (list (list 'keywords (list 'quote keys)))
-;;;     (list 'while 'keywords
-;;;      (list 'or (list 'boundp (list 'car 'keywords))
-;;;          (list 'set (list 'car 'keywords) (list 'car 'keywords)))
-;;;      (list 'setq 'keywords (list 'cdr 'keywords)))))
+(defmacro define-widget-keywords (&rest _keys)
+  ;; ;; Don't use backquote, since that makes trouble trying to
+  ;; ;; re-bootstrap from just the .el files.
+  ;; (list 'eval-and-compile
+  ;;   (list 'let (list (list 'keywords (list 'quote keys)))
+  ;;     (list 'while 'keywords
+  ;;   (list 'or (list 'boundp (list 'car 'keywords))
+  ;;     (list 'set (list 'car 'keywords) (list 'car 'keywords)))
+  ;;   (list 'setq 'keywords (list 'cdr 'keywords)))))
   )
 
-;;;(define-widget-keywords :documentation-indent
-;;;  :complete-function :complete :button-overlay
-;;;  :field-overlay  
-;;;  :documentation-shown :button-prefix  
-;;;  :button-suffix :mouse-down-action :glyph-up :glyph-down :glyph-inactive  
-;;;  :prompt-internal :prompt-history :prompt-match
-;;;  :prompt-value  :deactivate :active  
-;;;  :inactive :activate :sibling-args :delete-button-args
-;;;  :insert-button-args :append-button-args :button-args 
-;;;  :tag-glyph :off-glyph :on-glyph :valid-regexp
-;;;  :secret :sample-face :sample-face-get :case-fold 
-;;;  :create :convert-widget :format :value-create :offset :extra-offset
-;;;  :tag :doc :from :to :args :value :action
-;;;  :value-set :value-delete :match :parent :delete :menu-tag-get
-;;;  :value-get :choice :void :menu-tag :on :off :on-type :off-type
-;;;  :notify :entry-format :button :children :buttons :insert-before
-;;;  :delete-at :format-handler :widget :value-pos :value-to-internal
-;;;  :indent :size :value-to-external :validate :error :directory
-;;;  :must-match :type-error :value-inline :inline :match-inline :greedy
-;;;  :button-face-get :button-face :value-face :keymap :entry-from
-;;;  :entry-to :help-echo :documentation-property :tab-order) 
-
+;;(define-widget-keywords :documentation-indent
+;;  :complete-function :complete :button-overlay
+;;  :field-overlay
+;;  :documentation-shown :button-prefix
+;;  :button-suffix :mouse-down-action :glyph-up :glyph-down :glyph-inactive
+;;  :prompt-internal :prompt-history :prompt-match
+;;  :prompt-value  :deactivate :active
+;;  :inactive :activate :sibling-args :delete-button-args
+;;  :insert-button-args :append-button-args :button-args
+;;  :tag-glyph :off-glyph :on-glyph :valid-regexp
+;;  :secret :sample-face :sample-face-get :case-fold
+;;  :create :convert-widget :format :value-create :offset :extra-offset
+;;  :tag :doc :from :to :args :value :action
+;;  :value-set :value-delete :match :parent :delete :menu-tag-get
+;;  :value-get :choice :void :menu-tag :on :off :on-type :off-type
+;;  :notify :entry-format :button :children :buttons :insert-before
+;;  :delete-at :format-handler :widget :value-pos :value-to-internal
+;;  :indent :size :value-to-external :validate :error :directory
+;;  :must-match :type-error :value-inline :inline :match-inline :greedy
+;;  :button-face-get :button-face :value-face :keymap :entry-from
+;;  :entry-to :help-echo :documentation-property :tab-order)
+
+(put 'define-widget 'doc-string-elt 3)  ;`declare' doesn't work in functions.
 (defun define-widget (name class doc &rest args)
   "Define a new widget type named NAME from CLASS.
 
@@ -81,11 +80,14 @@ create identical widgets:
 
 * (widget-create NAME)
 
-* (apply 'widget-create CLASS ARGS)
+* (apply \\='widget-create CLASS ARGS)
 
 The third argument DOC is a documentation string for the widget."
+  ;;
+  (unless (or (null doc) (stringp doc))
+    (error "widget documentation must be nil or a string."))
   (put name 'widget-type (cons class args))
-  (put name 'widget-documentation doc)
+  (put name 'widget-documentation (purecopy doc))
   name)
 
 ;; This is used by external widget code (in W3, at least).