From 86345df9ab24982c8d7e6a0d518e1d7dc5ae509b Mon Sep 17 00:00:00 2001 From: Ihor Radchenko Date: Sat, 16 Oct 2021 23:40:14 +0800 Subject: [PATCH] org.el/org-in-commented-heading-p: Support cache and passing element arg --- lisp/org.el | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/lisp/org.el b/lisp/org.el index ea43d6636..c17c24dbb 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -20612,20 +20612,32 @@ instead of back to heading." "Non-nil when on a headline." (outline-on-heading-p t)) -(defun org-in-commented-heading-p (&optional no-inheritance) +(defun org-in-commented-heading-p (&optional no-inheritance element) "Non-nil if point is under a commented heading. This function also checks ancestors of the current headline, -unless optional argument NO-INHERITANCE is non-nil." - (cond - ((org-before-first-heading-p) nil) - ((let ((headline (nth 4 (org-heading-components)))) - (and headline - (let ((case-fold-search nil)) - (string-match-p (concat "^" org-comment-string "\\(?: \\|$\\)") - headline))))) - (no-inheritance nil) - (t - (save-excursion (and (org-up-heading-safe) (org-in-commented-heading-p)))))) +unless optional argument NO-INHERITANCE is non-nil. + +Optional argument ELEMENT contains element at point." + (save-match-data + (if-let ((el (or element (org-element-at-point nil 'cached)))) + (catch :found + (setq el (org-element-lineage el '(headline) 'include-self)) + (if no-inheritance + (org-element-property :commentedp el) + (while el + (when (org-element-property :commentedp el) + (throw :found t)) + (setq el (org-element-property :parent el))))) + (cond + ((org-before-first-heading-p) nil) + ((let ((headline (nth 4 (org-heading-components)))) + (and headline + (let ((case-fold-search nil)) + (string-match-p (concat "^" org-comment-string "\\(?: \\|$\\)") + headline))))) + (no-inheritance nil) + (t + (save-excursion (and (org-up-heading-safe) (org-in-commented-heading-p)))))))) (defun org-in-archived-heading-p (&optional no-inheritance) "Non-nil if point is under an archived heading.