Fix: Compatibility with org>=9.2

The API for `org-get-tags-at` and `org-timestamp--to-internal-time`
changed in org-mode version 9.2.

Thanks to Ataias Pereira Reis (@ataias) and Daniel Kraus (@dakra).

Closes #27.  Closes #31.
This commit is contained in:
Daniel Kraus 2019-07-12 18:53:06 +02:00 committed by Adam Porter
parent 0b7628c1f7
commit adcb96cb1e
3 changed files with 16 additions and 4 deletions

View file

@ -236,6 +236,9 @@ If ~MARKERS~ is non-nil, ~org-agenda-ng--add-markers~ is used to add markers to
*Changed* *Changed*
+ ~(regexp)~ selector accepts multiple regexps to test. + ~(regexp)~ selector accepts multiple regexps to test.
*Compatibility*
+ Fixes for compatibility with Org 9.2. (Thanks to [[https://github.com/ataias][Ataias Pereira Reis]] and [[https://github.com/dakra][Daniel Kraus]].)
*Internal* *Internal*
+ Optimizations for some query selectors, e.g. =regexp= and =todo=. These can provide a significant improvement for some queries. See benchmarks in [[file:notes.org][notes.org]]. + Optimizations for some query selectors, e.g. =regexp= and =todo=. These can provide a significant improvement for some queries. See benchmarks in [[file:notes.org][notes.org]].

View file

@ -50,6 +50,9 @@
(defvar org-super-agenda-mode) (defvar org-super-agenda-mode)
(declare-function org-super-agenda--group-items "org-super-agenda") (declare-function org-super-agenda--group-items "org-super-agenda")
(when (version< org-version "9.2")
(defalias 'org-get-tags 'org-get-tags-at))
;;;; Variables ;;;; Variables
(defvar org-ql-agenda-buffer-name "*Org Agenda NG*" (defvar org-ql-agenda-buffer-name "*Org Agenda NG*"
@ -328,8 +331,8 @@ Its property list should be the second item in the list, as returned by `org-ele
(if-let ((marker (or (org-element-property :org-hd-marker element) (if-let ((marker (or (org-element-property :org-hd-marker element)
(org-element-property :org-marker element)))) (org-element-property :org-marker element))))
(with-current-buffer (marker-buffer marker) (with-current-buffer (marker-buffer marker)
;; I wish `org-get-tags-at' used the correct buffer automatically. ;; I wish `org-get-tags' used the correct buffer automatically.
(org-get-tags-at marker (not org-use-tag-inheritance))) (org-get-tags marker (not org-use-tag-inheritance)))
;; No marker found ;; No marker found
(warn "No marker found for item: %s" title) (warn "No marker found for item: %s" title)
(org-element-property :tags element)) (org-element-property :tags element))

View file

@ -25,6 +25,12 @@
(require 'dash) (require 'dash)
;;;; Compatibility
(when (version< org-version "9.2")
(defalias 'org-get-tags 'org-get-tags-at)
(defalias 'org-timestamp-to-time 'org-timestamp--to-internal-time))
;;;; Variables ;;;; Variables
(defvar org-ql--today nil) (defvar org-ql--today nil)
@ -457,8 +463,8 @@ With KEYWORDS, return non-nil if its keyword is one of KEYWORDS (a list of strin
(org-ql--defpredicate tags (&rest tags) (org-ql--defpredicate tags (&rest tags)
"Return non-nil if current heading has one or more of TAGS (a list of strings)." "Return non-nil if current heading has one or more of TAGS (a list of strings)."
;; TODO: Try to use `org-make-tags-matcher' to improve performance. It would be nice to not have ;; TODO: Try to use `org-make-tags-matcher' to improve performance. It would be nice to not have
;; to run `org-get-tags-at' for every heading, especially with inheritance. ;; to run `org-get-tags' for every heading, especially with inheritance.
(when-let ((tags-at (org-get-tags-at (point) (not org-use-tag-inheritance)))) (when-let ((tags-at (org-get-tags (point) (not org-use-tag-inheritance))))
(cl-typecase tags (cl-typecase tags
(null t) (null t)
(otherwise (seq-intersection tags tags-at))))) (otherwise (seq-intersection tags tags-at)))))