From aad1926a4f348185f2dbdb6ffd1ba86f3d80710c Mon Sep 17 00:00:00 2001 From: Miles Bader Date: Wed, 2 Mar 2005 09:12:54 +0000 Subject: [PATCH] Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-145 (make-text-button): Default button type if not specified 2005-03-02 Miles Bader * lisp/button.el (make-text-button): If the user doesn't specify a type, use the default. Rewrite to use `add-text-properties' and plist functions. --- lisp/ChangeLog | 6 ++++++ lisp/button.el | 37 ++++++++++++++++++------------------- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 56097bb2ccc..01fb5a5e6b4 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2005-03-02 Miles Bader + + * button.el (make-text-button): If the user doesn't specify a + type, use the default. Rewrite to use `add-text-properties' and + plist functions. + 2005-03-01 Robert J. Chassell * textmodes/texinfmt.el: (texinfo-no-refill-regexp): Comment out diff --git a/lisp/button.el b/lisp/button.el index 5f9b5094e6c..78008f06db2 100644 --- a/lisp/button.el +++ b/lisp/button.el @@ -1,6 +1,6 @@ ;;; button.el --- clickable buttons ;; -;; Copyright (C) 2001 Free Software Foundation, Inc. +;; Copyright (C) 2001, 2005 Free Software Foundation, Inc. ;; ;; Author: Miles Bader ;; Keywords: extensions @@ -298,24 +298,23 @@ large numbers of buttons can also be somewhat faster using `make-text-button'. Also see `insert-text-button'." - (let (prop val) - (while properties - (setq prop (pop properties)) - (setq val (pop properties)) - ;; Note that all the following code is basically equivalent to - ;; `button-put', but we can do it much more efficiently since we - ;; already have BEG and END. - (cond ((memq prop '(type :type)) - ;; We translate a `type' property into a `category' - ;; property, since that's what's actually used by - ;; text-properties for inheritance. - (setq prop 'category) - (setq val (button-category-symbol val))) - ((eq prop 'category) - ;; Disallow setting the `category' property directly. - (error "Button `category' property may not be set directly"))) - ;; Add the property. - (put-text-property beg end prop val))) + (let ((type-entry + (or (plist-member properties 'type) + (plist-member properties :type)))) + ;; Disallow setting the `category' property directly. + (when (plist-get properties 'category) + (error "Button `category' property may not be set directly")) + (if (null type-entry) + ;; The user didn't specify a `type' property, use the default. + (setq properties (cons 'category (cons 'default-button properties))) + ;; The user did specify a `type' property. Translate it into a + ;; `category' property, which is what's actually used by + ;; text-properties for inheritance. + (setcar type-entry 'category) + (setcar (cdr type-entry) + (button-category-symbol (car (cdr type-entry)))))) + ;; Now add all the text properties at once + (add-text-properties beg end properties) ;; Return something that can be used to get at the button. beg) -- 2.39.2