diff options
| author | Kévin Le Gouguec <kevin.legouguec@gmail.com> | 2025-02-20 22:37:13 +0100 |
|---|---|---|
| committer | Kévin Le Gouguec <kevin.legouguec@gmail.com> | 2025-03-08 17:29:34 +0100 |
| commit | f23ee932509e0a67aaafc499f0cd6b25535e4b95 (patch) | |
| tree | 4d9127f6b4b6813c11d9c95c461af30c41e66f37 /lisp/button.el | |
| parent | 269d337f9191cb58e70f93f8aae47a9bd8d635f9 (diff) | |
Prevent button.el from clearing help-echo strings
In order to fix one of the issues discussed in bug#61413, i.e.
'buttonize' clobbering the help-echo property set by
'icon-string'.
This is a reasonable interpretation of the button.el
docstrings - "if HELP-ECHO, use that as the `help-echo'
property"; conversely, if not HELP-ECHO, then do not do
anything, preserving existing values for that property.
* lisp/button.el (button--properties): Only add a help-echo
property if HELP-ECHO is non-nil. Add an additional property
for bookkeeping.
(unbuttonize-region): Check for that bookkeeping property
before clearing help-echo.
* test/lisp/button-tests.el (button--preserve-help-echo):
Validate these changes.
Diffstat (limited to 'lisp/button.el')
| -rw-r--r-- | lisp/button.el | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/lisp/button.el b/lisp/button.el index 674de1bb4fa..58f00c4c2ad 100644 --- a/lisp/button.el +++ b/lisp/button.el @@ -652,15 +652,19 @@ Also see `buttonize-region'." string)) (defun button--properties (callback data help-echo) - (list 'font-lock-face 'button - 'mouse-face 'highlight - 'help-echo help-echo - 'button t - 'follow-link t - 'category t - 'button-data data - 'keymap button-map - 'action callback)) + (append + (list 'font-lock-face 'button + 'mouse-face 'highlight + 'button t + 'follow-link t + 'category t + 'button-data data + 'keymap button-map + 'action callback) + (and help-echo + (list 'help-echo help-echo + ;; Record that button.el is responsible for this property. + 'help-echo-button t)))) (defun buttonize-region (start end callback &optional data help-echo) "Make the region between START and END into a button. @@ -681,8 +685,14 @@ This removes both text-property and overlay based buttons." (when (overlay-get o 'button) (delete-overlay o))) (with-silent-modifications - (remove-text-properties start end - (button--properties nil nil nil)) + (remove-text-properties + start end + (append + (button--properties nil nil nil) + ;; Only remove help-echo if it was added by button.el. + (and (get-text-property start 'help-echo-button) + (list 'help-echo nil + 'help-echo-button nil)))) (add-face-text-property start end 'button nil))) |
