make-text-button no longer modifies its string arg

* etc/NEWS: Mention this.
* lisp/apropos.el (apropos-library-button):
* lisp/ibuf-ext.el (ibuffer-old-saved-filters-warning):
There’s no longer a need copy make-text-button’s string arg.
* lisp/button.el (make-text-button): Return a copy of a string arg.
Delay making the copy until after error-checking.
This commit is contained in:
Paul Eggert 2020-06-06 12:05:10 -07:00
parent 8bcc781bc7
commit 7ac79872ae
4 changed files with 13 additions and 5 deletions

View file

@ -476,6 +476,11 @@ are 'eq'. To compare contents, use 'compare-window-configurations'
instead. This change helps fix a bug in 'sxhash-equal', which returned
incorrect hashes for window configurations and some other objects.
** When its first argument is a string, 'make-text-button' no longer
modifies the string's text properties; instead, it uses and returns
a copy of the string. This helps avoid trouble when strings are
shared or constants.
---
** The obsolete function 'thread-alive-p' has been removed.

View file

@ -661,7 +661,7 @@ Return list of symbols and documentation found."
(defun apropos-library-button (sym)
(if (null sym)
"<nothing>"
(let ((name (copy-sequence (symbol-name sym))))
(let ((name (symbol-name sym)))
(make-text-button name nil
'type 'apropos-library
'face 'apropos-symbol

View file

@ -341,15 +341,14 @@ If the property `button-data' is present, it will later be used
as the argument for the `action' callback function instead of the
default argument, which is the button itself.
BEG can also be a string, in which case it is made into a button.
BEG can also be a string, in which case a copy of it is made into
a button and returned.
Also see `insert-text-button'."
(let ((object nil)
(type-entry
(or (plist-member properties 'type)
(plist-member properties :type))))
(when (stringp beg)
(setq object beg beg 0 end (length object)))
;; Disallow setting the `category' property directly.
(when (plist-get properties 'category)
(error "Button `category' property may not be set directly"))
@ -362,6 +361,10 @@ Also see `insert-text-button'."
(setcar type-entry 'category)
(setcar (cdr type-entry)
(button-category-symbol (cadr type-entry))))
(when (stringp beg)
(setq object (copy-sequence beg))
(setq beg 0)
(setq end (length object)))
;; Now add all the text properties at once.
(add-text-properties beg end
;; Each button should have a non-eq `button'

View file

@ -202,7 +202,7 @@ The format has been repaired and the variable modified accordingly.
You can save the current value through the customize system by
either clicking or hitting return "
(make-text-button
(copy-sequence "here") nil
"here" nil
'face '(:weight bold :inherit button)
'mouse-face '(:weight normal :background "gray50" :inherit button)
'follow-link t