diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index 1948854003d..f877a6a5a27 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi @@ -7968,6 +7968,11 @@ between @var{start} and @var{end} into a button. Arguments @code{help-echo} property of the button. @end defun +@defun unbuttonize-region start end +This function removes all buttons between @var{start} and @var{end} in +the current buffer (both overlay and text-property based ones). +@end defun + @node Manipulating Buttons @subsection Manipulating Buttons @cindex manipulating buttons diff --git a/etc/NEWS b/etc/NEWS index e14efad8199..3d77612f304 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -222,6 +222,12 @@ When called with a prefix argument, accepting, declining, or tentatively accepting an icalendar event will prompt for a comment to add to the response. +** Button + ++++ +*** New function 'unbuttonize-region'. +It removes all the buttons in the specified region. + ** Eshell --- diff --git a/lisp/button.el b/lisp/button.el index c0584729172..de6ea8d966c 100644 --- a/lisp/button.el +++ b/lisp/button.el @@ -663,10 +663,22 @@ itself will be used instead as the function argument. If HELP-ECHO, use that as the `help-echo' property. -Also see `buttonize'." +Also see `buttonize' and `unbuttonize-region'." (add-text-properties start end (button--properties callback data help-echo)) (add-face-text-property start end 'button t)) +(defun unbuttonize-region (start end) + "Remove all the buttons between START and END. +This removes both text-property and overlay based buttons." + (dolist (o (overlays-in start end)) + (when (overlay-get o 'button) + (delete-overlay o))) + (with-silent-modifications + (remove-text-properties start end + (button--properties nil nil nil)) + (add-face-text-property start end + 'button nil))) + (provide 'button) ;;; button.el ends here