org-fold--reveal-outline-maybe: Fix wrong side of point error

* lisp/org-fold.el (org-fold--reveal-outline-maybe): Widen the buffer
before testing headline validity.  Otherwise, `goto-char' may not move
where expected in narrowed buffer.
This commit is contained in:
Ihor Radchenko 2022-05-09 20:39:57 +08:00
parent 2a6f5cecf7
commit 717f83bf75
No known key found for this signature in database
GPG Key ID: 6470762A7DA11D8B
1 changed files with 32 additions and 31 deletions

View File

@ -932,37 +932,38 @@ This function is intended to be used as a member of
This function is intended to be used as :fragile property of
`org-fold-outline' spec. See `org-fold-core--specs' for details."
(save-match-data
(save-excursion
(goto-char (car region))
;; The line before beginning of the fold should be either a
;; headline or a list item.
(backward-char)
(beginning-of-line)
;; Make sure that headline is not partially hidden
(unless (org-fold-folded-p nil 'headline)
(org-fold-region (max (point-min) (1- (point)))
(let ((endl (line-end-position)))
(save-excursion
(goto-char endl)
(skip-chars-forward "\n\t\r ")
;; Unfold blank lines.
(if (or (and (looking-at-p "\\*")
(> (point) (1+ endl)))
(eq (point) (point-max)))
(point)
endl)))
nil 'headline))
;; Never hide level 1 headlines
(save-excursion
(goto-char (line-end-position))
(when (re-search-forward (rx bol "* ") (cdr region) t)
(org-fold-region (match-beginning 0) (line-end-position) nil 'headline)))
;; Check the validity of headline
(unless (let ((case-fold-search t))
(looking-at (rx-to-string
`(or (regex ,(org-item-re))
(regex ,org-outline-regexp-bol)))))
t))))
(org-with-wide-buffer
(goto-char (car region))
;; The line before beginning of the fold should be either a
;; headline or a list item.
(backward-char)
(beginning-of-line)
;; Make sure that headline is not partially hidden
(unless (org-fold-folded-p nil 'headline)
(org-fold-region
(max (point-min) (1- (point)))
(let ((endl (line-end-position)))
(save-excursion
(goto-char endl)
(skip-chars-forward "\n\t\r ")
;; Unfold blank lines.
(if (or (and (looking-at-p "\\*")
(> (point) (1+ endl)))
(eq (point) (point-max)))
(point)
endl)))
nil 'headline))
;; Never hide level 1 headlines
(save-excursion
(goto-char (line-end-position))
(when (re-search-forward (rx bol "* ") (cdr region) t)
(org-fold-region (match-beginning 0) (line-end-position) nil 'headline)))
;; Check the validity of headline
(unless (let ((case-fold-search t))
(looking-at (rx-to-string
`(or (regex ,(org-item-re))
(regex ,org-outline-regexp-bol)))))
t))))
(defun org-fold--reveal-drawer-or-block-maybe (region spec)
"Reveal folded drawer/block (according to SPEC) in REGION when needed.