diff --git a/lisp/org-compat.el b/lisp/org-compat.el index bba21bd0e..92cad3d6e 100644 --- a/lisp/org-compat.el +++ b/lisp/org-compat.el @@ -649,6 +649,29 @@ Counting starts at 1." (define-obsolete-variable-alias 'org-plantuml-executable-args 'org-plantuml-args "Org 9.6") +(defvar org-cached-props nil) +(defvar org-use-property-inheritance) +(declare-function org-entry-get "org" (epom property &optional inherit literal-nil)) +(declare-function org-entry-properties "org" (&optional epom which)) +(defun org-cached-entry-get (pom property) + (if (or (eq t org-use-property-inheritance) + (and (stringp org-use-property-inheritance) + (let ((case-fold-search t)) + (string-match-p org-use-property-inheritance property))) + (and (listp org-use-property-inheritance) + (member-ignore-case property org-use-property-inheritance))) + ;; Caching is not possible, check it directly. + (org-entry-get pom property 'inherit) + ;; Get all properties, so we can do complicated checks easily. + (cdr (assoc-string property + (or org-cached-props + (setq org-cached-props (org-entry-properties pom))) + t)))) + +(make-obsolete 'org-cached-entry-get + "Performs badly. Instead use `org-entry-get' with the argument INHERIT set to `selective'" + "9.7") + (defconst org-latex-line-break-safe "\\\\[0pt]" "Linebreak protecting the following [...]. diff --git a/lisp/org.el b/lisp/org.el index 2d1a2055f..36b52b0ab 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -11480,22 +11480,6 @@ are also TODO tasks." (defalias 'org-tags-sparse-tree 'org-match-sparse-tree) -(defvar org-cached-props nil) -(defun org-cached-entry-get (pom property) - (if (or (eq t org-use-property-inheritance) - (and (stringp org-use-property-inheritance) - (let ((case-fold-search t)) - (string-match-p org-use-property-inheritance property))) - (and (listp org-use-property-inheritance) - (member-ignore-case property org-use-property-inheritance))) - ;; Caching is not possible, check it directly. - (org-entry-get pom property 'inherit) - ;; Get all properties, so we can do complicated checks easily. - (cdr (assoc-string property - (or org-cached-props - (setq org-cached-props (org-entry-properties pom))) - t)))) - (defun org-global-tags-completion-table (&optional files) "Return the list of all tags in all agenda buffer/files. Optional FILES argument is a list of files which can be used @@ -11670,7 +11654,7 @@ See also `org-scan-tags'." ("CATEGORY" '(org-get-category (point))) ("TODO" 'todo) - (p `(org-cached-entry-get nil ,p)))) + (p `(org-entry-get (point) ,p 'selective)))) ;; Determine operand (aka. property ;; value). (pv (match-string 8 term)) @@ -11707,7 +11691,7 @@ See also `org-scan-tags'." (setq term rest))) (push `(and ,@tagsmatcher) orlist) (setq tagsmatcher nil)) - (setq tagsmatcher `(progn (setq org-cached-props nil) (or ,@orlist))))) + (setq tagsmatcher `(or ,@orlist)))) ;; Make the TODO matcher. (when (org-string-nw-p todomatch)