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:
parent
8bcc781bc7
commit
7ac79872ae
4 changed files with 13 additions and 5 deletions
5
etc/NEWS
5
etc/NEWS
|
@ -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.
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue