From: Ken Manheimer Date: Sun, 5 Jul 2020 20:38:13 +0000 (-0400) Subject: Backport: Rectify allout-widgets region undecoration so item at start is not missed. X-Git-Tag: emacs-27.1-rc1~20 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=bc10e467f1c2b885637ef734afc331e6b2127373;p=emacs.git Backport: Rectify allout-widgets region undecoration so item at start is not missed. * lisp/allout-widgets.el (allout-widgets-undecorate-region): Reorganize the loop so an item at the start is not skipped. (cherry picked from commit 33d85cb768b40794bffcd9ab22fbdec1211a74e5) --- diff --git a/lisp/allout-widgets.el b/lisp/allout-widgets.el index 5460551106b..2a8dced5e9c 100644 --- a/lisp/allout-widgets.el +++ b/lisp/allout-widgets.el @@ -2060,19 +2060,22 @@ Optional FORCE means force reassignment of the region property." ;;;_ > allout-widgets-undecorate-region (start end) (defun allout-widgets-undecorate-region (start end) "Eliminate widgets and decorations for all items in region from START to END." - (let ((next start) - widget) + (let (done next widget + (end (or end (point-max)))) (save-excursion (goto-char start) - (while (< (setq next (next-single-char-property-change next - 'display - (current-buffer) - end)) - end) - (goto-char next) - (when (setq widget (allout-get-item-widget)) - ;; if the next-property/overly progression got us to a widget: - (allout-widgets-undecorate-item widget t)))))) + (while (not done) + (when (and (allout-on-current-heading-p) + (setq widget (allout-get-item-widget))) + (if widget + (allout-widgets-undecorate-item widget t))) + (goto-char (setq next + (next-single-char-property-change (point) + 'display + (current-buffer) + end))) + (if (>= next end) + (setq done t)))))) ;;;_ > allout-widgets-undecorate-text (text) (defun allout-widgets-undecorate-text (text) "Eliminate widgets and decorations for all items in TEXT."