Release: v0.7.2

-----BEGIN PGP SIGNATURE-----
 
 iF0EABECAB0WIQRibGN7s6Ag030zGsLn4Z3JMOysmwUCZRO8JAAKCRDn4Z3JMOys
 mxpgAKDB9mCBhmsIfMAgQVRCcAOjBu6A7gCfQRSwZyBQYXIFwJ/y9JA2Ftpkafw=
 =w2+9
 -----END PGP SIGNATURE-----

Merge tag 'v0.7.2'

Release: v0.7.2

# -----BEGIN PGP SIGNATURE-----
#
# iF0EABECAB0WIQRibGN7s6Ag030zGsLn4Z3JMOysmwUCZRO8JAAKCRDn4Z3JMOys
# mxpgAKDB9mCBhmsIfMAgQVRCcAOjBu6A7gCfQRSwZyBQYXIFwJ/y9JA2Ftpkafw=
# =w2+9
# -----END PGP SIGNATURE-----
# gpg: directory '/data/data/com.termux/files/home/.gnupg' created
# gpg: Signature made 2023-09-27 07:22:44 +0200 CEST
# gpg:                using DSA key 626C637BB3A020D37D331AC2E7E19DC930ECAC9B
# gpg: Can't check signature: No public key
This commit is contained in:
Bram Schoenmakers 2023-10-03 19:05:42 +02:00
commit 9496ad3c20
7 changed files with 341 additions and 285 deletions

View file

@ -1,7 +1,6 @@
#+TITLE: org-ql #+TITLE: org-ql
# NOTE: Using =BEGIN_HTML= for this causes TeX/info export to fail, but this HTML block works. # NOTE: Using =BEGIN_HTML= for this causes TeX/info export to fail, but this HTML block works.
# #+HTML: <a href=https://alphapapa.github.io/dont-tread-on-emacs/><img src="images/dont-tread-on-emacs-150.png" align="right"></a>
#+HTML: <img src="images/dog.png" align="right"> #+HTML: <img src="images/dog.png" align="right">
# NOTE: To avoid having this in the info manual, we use HTML rather than Org syntax; it still appears with the GitHub renderer. # NOTE: To avoid having this in the info manual, we use HTML rather than Org syntax; it still appears with the GitHub renderer.
@ -543,10 +542,21 @@ Simple links may also be written manually in either sexp or non-sexp form, like:
/Note:/ Breaking changes may be made before version 1.0, but in the event of major changes, attempts at backward compatibility will be made with obsolescence declarations, translation of arguments, etc. Users who need stability guarantees before 1.0 may choose to use tagged stable releases. /Note:/ Breaking changes may be made before version 1.0, but in the event of major changes, attempts at backward compatibility will be made with obsolescence declarations, translation of arguments, etc. Users who need stability guarantees before 1.0 may choose to use tagged stable releases.
** 0.7.1-pre ** 0.7.2
*Fixes*
+ Timestamp predicates are more tolerant of partial input (e.g. preventing errors while the user is typing a query into ~org-ql-find~).
+ Query parser ignores leading whitespace (e.g. preventing errors while the user is typing a query into ~org-ql-find~).
+ Use of ~org-ql-find~ with ~:query-prefix~ argument prevented selection of results. ([[https://github.com/alphapapa/org-ql/issues/351][#351]]. Thanks to [[https://github.com/danielfleischer][Daniel Fleischer]] for reporting.)
+ Handle narrowed buffers correctly in ~org-ql-find~.
+ Warn about empty headings in ~org-ql-completing-read~ (the Org format allows a heading line to have no text, but it's useless for this purpose, and usually indicates unnoticed corruption).
** 0.7.1
*Fixes* *Fixes*
+ Function ~org-ql-completing-read~ is more compatible with default Emacs completion. (See [[https://github.com/alphapapa/org-ql/issues/338][#338]]. Thanks to [[https://github.com/arozbiz][arozbiz]] for reporting.) + Function ~org-ql-completing-read~ is more compatible with default Emacs completion. (See [[https://github.com/alphapapa/org-ql/issues/338][#338]]. Thanks to [[https://github.com/arozbiz][arozbiz]] for reporting.)
+ Function ~org-ql-completing-read~ would sometimes stop updating with changes in input. (See [[https://github.com/alphapapa/org-ql/issues/350][#350]]. Thanks to [[https://github.com/anpandey][Ankit Raj Pandey]] for reporting and fixing, and to [[https://github.com/minad][Daniel Mendler]] for advising.)
+ In ~org-ql-completing-read~, format links for display, and use ~org-entry-get~ internally rather than ~org-get-heading~.
** 0.7 ** 0.7

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

View file

@ -111,144 +111,151 @@ single predicate)."
(cl-labels (;; (debug-message (cl-labels (;; (debug-message
;; (f &rest args) (apply #'message (concat "ORG-QL-COMPLETING-READ: " f) args)) ;; (f &rest args) (apply #'message (concat "ORG-QL-COMPLETING-READ: " f) args))
(action (action
() (font-lock-ensure (point-at-bol) (point-at-eol)) () (font-lock-ensure (point-at-bol) (point-at-eol))
;; FIXME: We want the fontified heading, and `org-heading-components' returns it ;; FIXME: We want the fontified heading, and `org-heading-components' returns it
;; without properties, so we have to use `org-get-heading', which added additional ;; without properties, so we have to use `org-get-heading', which added additional
;; optional arguments in a certain Org version, so in those versions, it will ;; optional arguments in a certain Org version, so in those versions, it will
;; return priority cookies and comment strings. ;; return priority cookies and comment strings.
(let ((heading (org-get-heading t t))) (let ((heading (org-link-display-format (org-entry-get (point) "ITEM"))))
(when (gethash heading table) (if (string-empty-p heading)
;; Disambiguate heading (even adding the path isn't enough, because that could ;; A heading's string can be empty, but we can't use one because it
;; also be duplicated). ;; wouldn't be useful to the user; and if one is found, it's very
(if-let ((suffix (gethash heading disambiguations))) ;; likely to indicate an unnoticed mistake or corruption in the
(setf heading (format "%s <%s>" heading (cl-incf suffix))) ;; file: so display a warning and don't record it as a candidate.
(setf heading (format "%s <%s>" heading (puthash heading 2 disambiguations))))) (warn "Empty heading at %S in %S" (point) (buffer-name))
(puthash heading (point-marker) table))) (when (gethash heading table)
;; Disambiguate heading (even adding the path isn't enough, because that could
;; also be duplicated).
(if-let ((suffix (gethash heading disambiguations)))
(setf heading (format "%s <%s>" heading (cl-incf suffix)))
(setf heading (format "%s <%s>" heading (puthash heading 2 disambiguations)))))
(let ((marker (point-marker)))
(puthash (propertize heading 'org-marker marker) marker table)))))
(path (marker) (path (marker)
(org-with-point-at marker (org-with-point-at marker
(let* ((path (thread-first (org-get-outline-path nil t) (let* ((path (thread-first (org-get-outline-path nil t)
(org-format-outline-path window-width nil "") (org-format-outline-path window-width nil "")
(org-split-string ""))) (org-split-string "")))
(formatted-path (if org-ql-completing-read-reverse-paths (formatted-path (if org-ql-completing-read-reverse-paths
(concat "\\" (string-join (reverse path) "\\")) (concat "\\" (string-join (reverse path) "\\"))
(concat "/" (string-join path "/"))))) (concat "/" (string-join path "/")))))
formatted-path))) formatted-path)))
(todo (todo
(marker) (if-let (it (org-entry-get marker "TODO")) (marker) (if-let (it (org-entry-get marker "TODO"))
(concat (propertize it 'face (org-get-todo-face it)) " ") (concat (propertize it 'face (org-get-todo-face it)) " ")
"")) ""))
(affix (completions) (affix (completions)
;; (debug-message "AFFIX:%S" completions) ;; (debug-message "AFFIX:%S" completions)
(cl-loop for completion in completions (cl-loop for completion in completions
for marker = (gethash completion table) for marker = (get-text-property 0 'org-marker completion)
for prefix = (todo marker) for prefix = (todo marker)
for suffix = (concat (path marker) " " (snippet marker)) for suffix = (concat (path marker) " " (snippet marker))
collect (list completion prefix suffix))) collect (list completion prefix suffix)))
(annotate (candidate) (annotate (candidate)
;; (debug-message "ANNOTATE:%S" candidate) ;; (debug-message "ANNOTATE:%S" candidate)
(while-no-input (while-no-input
;; Using `while-no-input' here doesn't make it as responsive as, ;; Using `while-no-input' here doesn't make it as responsive as,
;; e.g. Helm while typing, but it seems to help a little when using the ;; e.g. Helm while typing, but it seems to help a little when using the
;; org-rifle-style snippets. ;; org-rifle-style snippets.
(or (snippet (gethash candidate table)) ""))) (or (snippet (get-text-property 0 'org-marker candidate)) "")))
(snippet (snippet
(marker) (when-let (marker) (when-let
((snippet ((snippet
(org-with-point-at marker (org-with-point-at marker
(or (funcall org-ql-completing-read-snippet-function snippet-regexp) (or (funcall org-ql-completing-read-snippet-function snippet-regexp)
(org-ql-completing-read--snippet-simple))))) (org-ql-completing-read--snippet-simple)))))
(propertize (concat " " snippet) (propertize (concat " " snippet)
'face 'org-ql-completing-read-snippet))) 'face 'org-ql-completing-read-snippet)))
(group (candidate transform) (group (candidate transform)
(pcase transform (pcase transform
(`nil (buffer-name (marker-buffer (gethash candidate table)))) (`nil (buffer-name (marker-buffer (get-text-property 0 'org-marker candidate))))
(_ candidate))) (_ candidate)))
(try (string _collection _pred point &optional _metadata) (try (string _collection _pred point &optional _metadata)
;; (debug-message "TRY: STRING:%S" string) ;; (debug-message "TRY: STRING:%S" string)
(cons string point)) (cons string point))
(all (string table pred _point) (all (string table pred _point)
;; (debug-message "all: STRING:%S" string) ;; (debug-message "all: STRING:%S" string)
;; (debug-message "all-completions RETURNS: %S" (all-completions string table pred)) ;; (debug-message "all-completions RETURNS: %S" (all-completions string table pred))
(all-completions string table pred)) (all-completions string table pred))
(collection (input _pred flag) (collection (input _pred flag)
(when query-prefix (pcase flag
(setf input (concat query-prefix input))) ('metadata (list 'metadata
(pcase flag (cons 'group-function #'group)
('metadata (list 'metadata (cons 'affixation-function #'affix)
(cons 'group-function #'group) (cons 'annotation-function #'annotate)))
(cons 'affixation-function #'affix) (`t
(cons 'annotation-function #'annotate))) ;; (debug-message "COLLECTION:t INPUT:%S KEYS:%S"
(`t ;; input (hash-table-keys table))
;; (debug-message "COLLECTION:t INPUT:%S KEYS:%S" ;; It's not ideal to call `run-query' unconditionally here, but due to
;; input (hash-table-keys table)) ;; the complexity of the "Programmed Completion" API, it's basically
;; It's not ideal to call `run-query' unconditionally here, but due to ;; necessary, and org-ql's caching should make it nearly free.
;; the complexity of the "Programmed Completion" API, it's basically (run-query input)
;; necessary, and org-ql's caching should make it nearly free. (hash-table-keys table))
(run-query input) ('lambda
(hash-table-keys table)) ;; (debug-message "COLLECTION:lambda INPUT:%S KEYS:%S"
('lambda ;; input (hash-table-keys table))
;; (debug-message "COLLECTION:lambda INPUT:%S KEYS:%S" (if (not (hash-table-empty-p table))
;; input (hash-table-keys table)) (when (gethash input table)
(if (not (hash-table-empty-p table)) t)
(when (gethash input table) (run-query input)
t) (when (gethash input table)
(run-query input) ;; (debug-message "COLLECTION:lambda INPUT:%S FOUND" input)
(when (gethash input table) t)))
;; (debug-message "COLLECTION:lambda INPUT:%S FOUND" input) (`nil
t))) ;; (debug-message "COLLECTION:nil INPUT:%S" input)
(`nil (if (not (hash-table-empty-p table))
;; (debug-message "COLLECTION:nil INPUT:%S" input) (when (gethash input table)
(if (not (hash-table-empty-p table)) t)
(when (gethash input table) (run-query input)
t) ;; (debug-message "COLLECTION:nil INPUT:%S KEYS:%S"
(run-query input) ;; input (hash-table-keys table))
;; (debug-message "COLLECTION:nil INPUT:%S KEYS:%S" (cond ((hash-table-empty-p table)
;; input (hash-table-keys table)) nil)
(cond ((hash-table-empty-p table) ((gethash input table)
nil) t)
((gethash input table) (t
t) ;; FIXME: "it should return the longest common prefix
(t ;; substring of all matches otherwise"...but there's no
;; FIXME: "it should return the longest common prefix ;; function to compute that? At least returning an empty
;; substring of all matches otherwise"...but there's no ;; string doesn't seem to break anything.
;; function to compute that? At least returning an empty input))))
;; string doesn't seem to break anything. (`(boundaries . ,suffix)
input)))) ;; (debug-message "COLLECTION:boundaries INPUT:%S SUFFIX:%S KEYS:%S"
(`(boundaries . ,suffix) ;; input suffix (hash-table-keys table))
;; (debug-message "COLLECTION:boundaries INPUT:%S SUFFIX:%S KEYS:%S" ;; FIXME: This is unlikely to be correct, but I'm not even sure if it
;; input suffix (hash-table-keys table)) ;; can be correct in this case since the input (e.g. "todo: foo")
;; FIXME: This is unlikely to be correct, but I'm not even sure if it ;; usually won't match a completion candidate directly.
;; can be correct in this case since the input (e.g. "todo: foo") `(boundaries 0 . ,(length suffix)))))
;; usually won't match a completion candidate directly.
`(boundaries 0 . ,(length suffix)))))
(run-query (input) (run-query (input)
;; (debug-message "RUN-QUERY:%S" input) ;; (debug-message "RUN-QUERY:%S" input)
(unless (or (string-empty-p input) (when query-prefix
(equal last-input input)) (setf input (concat query-prefix input)))
;; (debug-message "RUN-QUERY:%S RUNNING" input) (unless (or (string-empty-p input)
(setf last-input input) (equal last-input input))
;; Clear hash table each time the user changes the input. ;; (debug-message "RUN-QUERY:%S RUNNING" input)
(clrhash table) (setf last-input input)
(clrhash disambiguations) ;; Clear hash table each time the user changes the input.
(when query-filter (clrhash table)
(setf input (funcall query-filter input))) (clrhash disambiguations)
(pcase org-ql-completing-read-snippet-function (when query-filter
('org-ql-completing-read--snippet-regexp (setf input (funcall query-filter input)))
(setf query-tokens (pcase org-ql-completing-read-snippet-function
;; Remove any tokens that specify predicates or are too short. ('org-ql-completing-read--snippet-regexp
(--select (not (or (string-match-p (rx bos (1+ (not (any ":"))) ":") it) (setf query-tokens
(< (length it) org-ql-completing-read-snippet-minimum-token-length))) ;; Remove any tokens that specify predicates or are too short.
(split-string input nil t (rx space))) (--select (not (or (string-match-p (rx bos (1+ (not (any ":"))) ":") it)
snippet-regexp (< (length it) org-ql-completing-read-snippet-minimum-token-length)))
(when query-tokens (split-string input nil t (rx space)))
;; Limiting each context word to 15 characters prevents snippet-regexp
;; excessively long, non-word strings from ending up in (when query-tokens
;; snippets, which can adversely affect performance. ;; Limiting each context word to 15 characters prevents
(rx-to-string `(seq (optional (repeat 1 3 (repeat 1 15 (not space)) (0+ space))) ;; excessively long, non-word strings from ending up in
bow (or ,@query-tokens) (0+ (not space)) ;; snippets, which can adversely affect performance.
(optional (repeat 1 3 (0+ space) (repeat 1 15 (not space)))))))))) (rx-to-string `(seq (optional (repeat 1 3 (repeat 1 15 (not space)) (0+ space)))
(org-ql-select buffers-files (org-ql--query-string-to-sexp input) bow (or ,@query-tokens) (0+ (not space))
:action #'action)))) (optional (repeat 1 3 (0+ space) (repeat 1 15 (not space))))))))))
(org-ql-select buffers-files (org-ql--query-string-to-sexp input)
:action #'action))))
;; NOTE: It seems that the `completing-read' machinery can call, abort, and re-call the ;; NOTE: It seems that the `completing-read' machinery can call, abort, and re-call the
;; collection function while the user is typing, which can interrupt the machinery Org uses to ;; collection function while the user is typing, which can interrupt the machinery Org uses to
;; prepare an Org buffer when an Org file is loaded. This results in, e.g. the buffer being ;; prepare an Org buffer when an Org file is loaded. This results in, e.g. the buffer being

View file

@ -83,8 +83,7 @@ single predicate)."
:query-prefix query-prefix :query-prefix query-prefix
:query-filter query-filter :query-filter query-filter
:prompt prompt))) :prompt prompt)))
(with-current-buffer (marker-buffer marker) (org-with-point-at marker
(goto-char marker)
(display-buffer (current-buffer) org-ql-find-display-buffer-action) (display-buffer (current-buffer) org-ql-find-display-buffer-action)
(select-window (get-buffer-window (current-buffer))) (select-window (get-buffer-window (current-buffer)))
(run-hook-with-args 'org-ql-find-goto-hook)))) (run-hook-with-args 'org-ql-find-goto-hook))))

View file

@ -4,7 +4,7 @@
;; Author: Adam Porter <adam@alphapapa.net> ;; Author: Adam Porter <adam@alphapapa.net>
;; Url: https://github.com/alphapapa/org-ql ;; Url: https://github.com/alphapapa/org-ql
;; Version: 0.7.1-pre ;; Version: 0.7.2
;; Package-Requires: ((emacs "26.1") (dash "2.18.1") (f "0.17.2") (map "2.1") (org "9.0") (org-super-agenda "1.2") (ov "1.0.6") (peg "1.0.1") (s "1.12.0") (transient "0.1") (ts "0.2-pre")) ;; Package-Requires: ((emacs "26.1") (dash "2.18.1") (f "0.17.2") (map "2.1") (org "9.0") (org-super-agenda "1.2") (ov "1.0.6") (peg "1.0.1") (s "1.12.0") (transient "0.1") (ts "0.2-pre"))
;; Keywords: hypermedia, outlines, Org, agenda ;; Keywords: hypermedia, outlines, Org, agenda
@ -76,6 +76,7 @@ Tags are stored in match group 1. Match group 2 stores the tags
without the enclosing colons.") without the enclosing colons.")
(defvaralias 'org-ql-link-regexp (defvaralias 'org-ql-link-regexp
;; FIXME: `org-link-bracket-re' is void until `org-link-make-regexps' is called.
(if (bound-and-true-p org-link-bracket-re) (if (bound-and-true-p org-link-bracket-re)
'org-link-bracket-re 'org-link-bracket-re
'org-bracket-link-regexp) 'org-bracket-link-regexp)
@ -944,7 +945,7 @@ value of `org-ql-predicates')."
;; obscure bug in `peg': when one keyword is a substring of another, ;; obscure bug in `peg': when one keyword is a substring of another,
;; and the shorter one is listed first, the shorter one fails to match. ;; and the shorter one is listed first, the shorter one fails to match.
(-sort (-on #'> #'length)))) (-sort (-on #'> #'length))))
(pexs `((query (+ (and term (* [blank])))) (pexs `((query (and (* [blank]) (+ (and term (* [blank])))))
(term (or (and negation (list positive-term) (term (or (and negation (list positive-term)
;; This is a bit confusing, but it seems to work. There's probably a better way. ;; This is a bit confusing, but it seems to work. There's probably a better way.
`(pred -- (list 'not (car pred)))) `(pred -- (list 'not (car pred))))
@ -1285,6 +1286,9 @@ result form."
to on)) to on))
(when from (when from
(setq from (pcase from (setq from (pcase from
("-"
;; Ignore, because it means the user is typing a negative number.
nil)
((or 'today "today") (->> (ts-now) ((or 'today "today") (->> (ts-now)
(ts-apply :hour 0 :minute 0 :second 0))) (ts-apply :hour 0 :minute 0 :second 0)))
((pred numberp) (->> (ts-now) ((pred numberp) (->> (ts-now)
@ -1301,6 +1305,9 @@ result form."
((pred ts-p) from)))) ((pred ts-p) from))))
(when to (when to
(setq to (pcase to (setq to (pcase to
("-"
;; Ignore, because it means the user is typing a negative number.
nil)
((or 'today "today") (->> (ts-now) ((or 'today "today") (->> (ts-now)
(ts-apply :hour 23 :minute 59 :second 59))) (ts-apply :hour 23 :minute 59 :second 59)))
((pred numberp) (->> (ts-now) ((pred numberp) (->> (ts-now)

View file

@ -1,4 +1,4 @@
This is README.info, produced by makeinfo version 5.2 from README.texi. This is README.info, produced by makeinfo version 6.7 from README.texi.
INFO-DIR-SECTION Emacs INFO-DIR-SECTION Emacs
START-INFO-DIR-ENTRY START-INFO-DIR-ENTRY
@ -71,7 +71,8 @@ Functions / Macros
Changelog Changelog
* 0.7.1-pre: 071-pre. * 0.7.2: 072.
* 0.7.1: 071.
* 0.7: 07. * 0.7: 07.
* 0.6.3: 063. * 0.6.3: 063.
* 0.6.2: 062. * 0.6.2: 062.
@ -991,7 +992,8 @@ releases.
* Menu: * Menu:
* 0.7.1-pre: 071-pre. * 0.7.2: 072.
* 0.7.1: 071.
* 0.7: 07. * 0.7: 07.
* 0.6.3: 063. * 0.6.3: 063.
* 0.6.2: 062. * 0.6.2: 062.
@ -1020,21 +1022,49 @@ releases.
* 0.1: 01. * 0.1: 01.
 
File: README.info, Node: 071-pre, Next: 07, Up: Changelog File: README.info, Node: 072, Next: 071, Up: Changelog
5.1 0.7.1-pre 5.1 0.7.2
============= =========
*Fixes*
• Timestamp predicates are more tolerant of partial input (e.g.
preventing errors while the user is typing a query into
org-ql-find).
• Query parser ignores leading whitespace (e.g. preventing errors
while the user is typing a query into org-ql-find).
• Use of org-ql-find with :query-prefix argument prevented
selection of results. (#351
(https://github.com/alphapapa/org-ql/issues/351). Thanks to Daniel
Fleischer (https://github.com/danielfleischer) for reporting.)
• Handle narrowed buffers correctly in org-ql-find.
• Warn about empty headings in org-ql-completing-read (the Org
format allows a heading line to have no text, but its useless for
this purpose, and usually indicates unnoticed corruption).

File: README.info, Node: 071, Next: 07, Prev: 072, Up: Changelog
5.2 0.7.1
=========
*Fixes* *Fixes*
• Function org-ql-completing-read is more compatible with default • Function org-ql-completing-read is more compatible with default
Emacs completion. (See #338 Emacs completion. (See #338
(https://github.com/alphapapa/org-ql/issues/338). Thanks to (https://github.com/alphapapa/org-ql/issues/338). Thanks to
arozbiz (https://github.com/arozbiz) for reporting.) arozbiz (https://github.com/arozbiz) for reporting.)
• Function org-ql-completing-read would sometimes stop updating
with changes in input. (See #350
(https://github.com/alphapapa/org-ql/issues/350). Thanks to Ankit
Raj Pandey (https://github.com/anpandey) for reporting and fixing,
and to Daniel Mendler (https://github.com/minad) for advising.)
• In org-ql-completing-read, format links for display, and use
org-entry-get internally rather than org-get-heading.
 
File: README.info, Node: 07, Next: 063, Prev: 071-pre, Up: Changelog File: README.info, Node: 07, Next: 063, Prev: 071, Up: Changelog
5.2 0.7 5.3 0.7
======= =======
*Added* *Added*
@ -1094,7 +1124,7 @@ File: README.info, Node: 07, Next: 063, Prev: 071-pre, Up: Changelog
 
File: README.info, Node: 063, Next: 062, Prev: 07, Up: Changelog File: README.info, Node: 063, Next: 062, Prev: 07, Up: Changelog
5.3 0.6.3 5.4 0.6.3
========= =========
*Fixed* *Fixed*
@ -1110,7 +1140,7 @@ File: README.info, Node: 063, Next: 062, Prev: 07, Up: Changelog
 
File: README.info, Node: 062, Next: 061, Prev: 063, Up: Changelog File: README.info, Node: 062, Next: 061, Prev: 063, Up: Changelog
5.4 0.6.2 5.5 0.6.2
========= =========
*Fixed* *Fixed*
@ -1121,7 +1151,7 @@ File: README.info, Node: 062, Next: 061, Prev: 063, Up: Changelog
 
File: README.info, Node: 061, Next: 06, Prev: 062, Up: Changelog File: README.info, Node: 061, Next: 06, Prev: 062, Up: Changelog
5.5 0.6.1 5.6 0.6.1
========= =========
*Fixed* *Fixed*
@ -1139,7 +1169,7 @@ File: README.info, Node: 061, Next: 06, Prev: 062, Up: Changelog
 
File: README.info, Node: 06, Next: 052, Prev: 061, Up: Changelog File: README.info, Node: 06, Next: 052, Prev: 061, Up: Changelog
5.6 0.6 5.7 0.6
======= =======
*Added* *Added*
@ -1206,7 +1236,7 @@ File: README.info, Node: 06, Next: 052, Prev: 061, Up: Changelog
 
File: README.info, Node: 052, Next: 051, Prev: 06, Up: Changelog File: README.info, Node: 052, Next: 051, Prev: 06, Up: Changelog
5.7 0.5.2 5.8 0.5.2
========= =========
*Fixed* *Fixed*
@ -1217,7 +1247,7 @@ File: README.info, Node: 052, Next: 051, Prev: 06, Up: Changelog
 
File: README.info, Node: 051, Next: 05, Prev: 052, Up: Changelog File: README.info, Node: 051, Next: 05, Prev: 052, Up: Changelog
5.8 0.5.1 5.9 0.5.1
========= =========
*Fixed* *Fixed*
@ -1230,8 +1260,8 @@ File: README.info, Node: 051, Next: 05, Prev: 052, Up: Changelog
 
File: README.info, Node: 05, Next: 049, Prev: 051, Up: Changelog File: README.info, Node: 05, Next: 049, Prev: 051, Up: Changelog
5.9 0.5 5.10 0.5
======= ========
*Added* *Added*
• View dispatcher using transient.el (like Magit), bound to v in • View dispatcher using transient.el (like Magit), bound to v in
@ -1271,7 +1301,7 @@ File: README.info, Node: 05, Next: 049, Prev: 051, Up: Changelog
 
File: README.info, Node: 049, Next: 048, Prev: 05, Up: Changelog File: README.info, Node: 049, Next: 048, Prev: 05, Up: Changelog
5.10 0.4.9 5.11 0.4.9
========== ==========
*Fixed* *Fixed*
@ -1282,7 +1312,7 @@ File: README.info, Node: 049, Next: 048, Prev: 05, Up: Changelog
 
File: README.info, Node: 048, Next: 047, Prev: 049, Up: Changelog File: README.info, Node: 048, Next: 047, Prev: 049, Up: Changelog
5.11 0.4.8 5.12 0.4.8
========== ==========
*Fixed* *Fixed*
@ -1294,7 +1324,7 @@ File: README.info, Node: 048, Next: 047, Prev: 049, Up: Changelog
 
File: README.info, Node: 047, Next: 046, Prev: 048, Up: Changelog File: README.info, Node: 047, Next: 046, Prev: 048, Up: Changelog
5.12 0.4.7 5.13 0.4.7
========== ==========
*Fixed* *Fixed*
@ -1307,7 +1337,7 @@ File: README.info, Node: 047, Next: 046, Prev: 048, Up: Changelog
 
File: README.info, Node: 046, Next: 045, Prev: 047, Up: Changelog File: README.info, Node: 046, Next: 045, Prev: 047, Up: Changelog
5.13 0.4.6 5.14 0.4.6
========== ==========
*Fixed* *Fixed*
@ -1320,7 +1350,7 @@ File: README.info, Node: 046, Next: 045, Prev: 047, Up: Changelog
 
File: README.info, Node: 045, Next: 044, Prev: 046, Up: Changelog File: README.info, Node: 045, Next: 044, Prev: 046, Up: Changelog
5.14 0.4.5 5.15 0.4.5
========== ==========
*Fixed* *Fixed*
@ -1332,7 +1362,7 @@ File: README.info, Node: 045, Next: 044, Prev: 046, Up: Changelog
 
File: README.info, Node: 044, Next: 043, Prev: 045, Up: Changelog File: README.info, Node: 044, Next: 043, Prev: 045, Up: Changelog
5.15 0.4.4 5.16 0.4.4
========== ==========
*Fixed* *Fixed*
@ -1344,7 +1374,7 @@ File: README.info, Node: 044, Next: 043, Prev: 045, Up: Changelog
 
File: README.info, Node: 043, Next: 042, Prev: 044, Up: Changelog File: README.info, Node: 043, Next: 042, Prev: 044, Up: Changelog
5.16 0.4.3 5.17 0.4.3
========== ==========
*Fixed* *Fixed*
@ -1354,7 +1384,7 @@ File: README.info, Node: 043, Next: 042, Prev: 044, Up: Changelog
 
File: README.info, Node: 042, Next: 041, Prev: 043, Up: Changelog File: README.info, Node: 042, Next: 041, Prev: 043, Up: Changelog
5.17 0.4.2 5.18 0.4.2
========== ==========
*Fixed* *Fixed*
@ -1363,7 +1393,7 @@ File: README.info, Node: 042, Next: 041, Prev: 043, Up: Changelog
 
File: README.info, Node: 041, Next: 04, Prev: 042, Up: Changelog File: README.info, Node: 041, Next: 04, Prev: 042, Up: Changelog
5.18 0.4.1 5.19 0.4.1
========== ==========
*Fixed* *Fixed*
@ -1373,7 +1403,7 @@ File: README.info, Node: 041, Next: 04, Prev: 042, Up: Changelog
 
File: README.info, Node: 04, Next: 032, Prev: 041, Up: Changelog File: README.info, Node: 04, Next: 032, Prev: 041, Up: Changelog
5.19 0.4 5.20 0.4
======== ========
_Note:_ The next release, 0.5, may include changes which will require _Note:_ The next release, 0.5, may include changes which will require
@ -1454,7 +1484,7 @@ automatically, as they will be pushed to the master branch when ready.
 
File: README.info, Node: 032, Next: 031, Prev: 04, Up: Changelog File: README.info, Node: 032, Next: 031, Prev: 04, Up: Changelog
5.20 0.3.2 5.21 0.3.2
========== ==========
*Fixed* *Fixed*
@ -1467,7 +1497,7 @@ File: README.info, Node: 032, Next: 031, Prev: 04, Up: Changelog
 
File: README.info, Node: 031, Next: 03, Prev: 032, Up: Changelog File: README.info, Node: 031, Next: 03, Prev: 032, Up: Changelog
5.21 0.3.1 5.22 0.3.1
========== ==========
*Fixed* *Fixed*
@ -1477,7 +1507,7 @@ File: README.info, Node: 031, Next: 03, Prev: 032, Up: Changelog
 
File: README.info, Node: 03, Next: 023, Prev: 031, Up: Changelog File: README.info, Node: 03, Next: 023, Prev: 031, Up: Changelog
5.22 0.3 5.23 0.3
======== ========
*Added* *Added*
@ -1545,7 +1575,7 @@ File: README.info, Node: 03, Next: 023, Prev: 031, Up: Changelog
 
File: README.info, Node: 023, Next: 022, Prev: 03, Up: Changelog File: README.info, Node: 023, Next: 022, Prev: 03, Up: Changelog
5.23 0.2.3 5.24 0.2.3
========== ==========
*Fixed* *Fixed*
@ -1555,7 +1585,7 @@ File: README.info, Node: 023, Next: 022, Prev: 03, Up: Changelog
 
File: README.info, Node: 022, Next: 021, Prev: 023, Up: Changelog File: README.info, Node: 022, Next: 021, Prev: 023, Up: Changelog
5.24 0.2.2 5.25 0.2.2
========== ==========
*Fixed* *Fixed*
@ -1566,7 +1596,7 @@ File: README.info, Node: 022, Next: 021, Prev: 023, Up: Changelog
 
File: README.info, Node: 021, Next: 02, Prev: 022, Up: Changelog File: README.info, Node: 021, Next: 02, Prev: 022, Up: Changelog
5.25 0.2.1 5.26 0.2.1
========== ==========
*Fixed* *Fixed*
@ -1576,7 +1606,7 @@ File: README.info, Node: 021, Next: 02, Prev: 022, Up: Changelog
 
File: README.info, Node: 02, Next: 01, Prev: 021, Up: Changelog File: README.info, Node: 02, Next: 01, Prev: 021, Up: Changelog
5.26 0.2 5.27 0.2
======== ========
*Added* *Added*
@ -1659,7 +1689,7 @@ File: README.info, Node: 02, Next: 01, Prev: 021, Up: Changelog
 
File: README.info, Node: 01, Prev: 02, Up: Changelog File: README.info, Node: 01, Prev: 02, Up: Changelog
5.27 0.1 5.28 0.1
======== ========
First tagged release. First tagged release.
@ -1717,71 +1747,72 @@ GPLv3
 
Tag Table: Tag Table:
Node: Top225 Node: Top225
Node: Contents1812 Node: Contents1791
Node: Screenshots1935 Node: Screenshots1914
Node: Installation2053 Node: Installation2032
Node: Quelpa2567 Node: Quelpa2546
Node: Helm support3095 Node: Helm support3074
Node: Usage3498 Node: Usage3477
Node: Commands3896 Node: Commands3875
Node: org-ql-find4340 Node: org-ql-find4319
Node: org-ql-refile4806 Node: org-ql-refile4785
Node: org-ql-search5129 Node: org-ql-search5108
Node: helm-org-ql6825 Node: helm-org-ql6804
Node: org-ql-view7203 Node: org-ql-view7182
Node: org-ql-view-sidebar7733 Node: org-ql-view-sidebar7712
Node: org-ql-view-recent-items8113 Node: org-ql-view-recent-items8092
Node: org-ql-sparse-tree8609 Node: org-ql-sparse-tree8588
Node: Queries9409 Node: Queries9388
Node: Non-sexp query syntax10526 Node: Non-sexp query syntax10505
Node: General predicates12285 Node: General predicates12264
Node: Ancestor/descendant predicates19272 Node: Ancestor/descendant predicates19251
Node: Date/time predicates20400 Node: Date/time predicates20379
Node: Functions / Macros23524 Node: Functions / Macros23503
Node: Agenda-like views23822 Node: Agenda-like views23801
Ref: Function org-ql-block23984 Ref: Function org-ql-block23963
Node: Listing / acting-on results25245 Node: Listing / acting-on results25224
Ref: Caching25453 Ref: Caching25432
Ref: Function org-ql-select26366 Ref: Function org-ql-select26345
Ref: Function org-ql-query28792 Ref: Function org-ql-query28771
Ref: Macro org-ql (deprecated)30566 Ref: Macro org-ql (deprecated)30545
Node: Custom predicates30881 Node: Custom predicates30860
Ref: Macro org-ql-defpred31105 Ref: Macro org-ql-defpred31084
Node: Dynamic block34546 Node: Dynamic block34525
Node: Links37270 Node: Links37249
Node: Tips37957 Node: Tips37936
Node: Changelog38281 Node: Changelog38260
Node: 071-pre39079 Node: 07239037
Node: 0739416 Node: 07139944
Node: 06342344 Node: 0740753
Node: 06242875 Node: 06343677
Node: 06143180 Node: 06244208
Node: 0643748 Node: 06144513
Node: 05246802 Node: 0645081
Node: 05147102 Node: 05248135
Node: 0547525 Node: 05148435
Node: 04949054 Node: 0548858
Node: 04849336 Node: 04950389
Node: 04749685 Node: 04850671
Node: 04650094 Node: 04751020
Node: 04550502 Node: 04651429
Node: 04450863 Node: 04551837
Node: 04351222 Node: 04452198
Node: 04251425 Node: 04352557
Node: 04151586 Node: 04252760
Node: 0451833 Node: 04152921
Node: 03255934 Node: 0453168
Node: 03156337 Node: 03257269
Node: 0356534 Node: 03157672
Node: 02359834 Node: 0357869
Node: 02260068 Node: 02361169
Node: 02160348 Node: 02261403
Node: 0260553 Node: 02161683
Node: 0164631 Node: 0261888
Node: Notes64732 Node: 0165966
Node: Comparison with Org Agenda searches64894 Node: Notes66067
Node: org-sidebar65783 Node: Comparison with Org Agenda searches66229
Node: License66062 Node: org-sidebar67118
Node: License67397
 
End Tag Table End Tag Table

View file

@ -33,6 +33,8 @@
(require 'org-ql-search) (require 'org-ql-search)
(require 'org-ql-view) (require 'org-ql-view)
(require 'xr)
;;;; Variables ;;;; Variables
(defvar org-ql-test-buffer nil (defvar org-ql-test-buffer nil