From 646f6ec133bf56dc05d45c91cfbdb140966ed175 Mon Sep 17 00:00:00 2001 From: Morgan Smith Date: Wed, 1 May 2024 12:36:40 -0400 Subject: [PATCH] Obsolete `org-cached-entry-get' in favor of `org-entry-get' We have a better performing cache mechanism in `org-entry-get'. * lisp/org.el (org-make-tags-matcher): Replace uses of `org-cached-entry-get' with `org-entry-get'. (org-cached-entry-get): Move to ... * lisp/org-compat.el (org-cached-entry-get): ... here. Obsolete in favor of `org-entry-get'. --- lisp/org-compat.el | 23 +++++++++++++++++++++++ lisp/org.el | 20 ++------------------ 2 files changed, 25 insertions(+), 18 deletions(-) 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)