From 4f5fbc49e6546939685aa7ff2c07ce609fc1d08e Mon Sep 17 00:00:00 2001 From: Adam Porter Date: Mon, 30 May 2022 09:23:46 -0500 Subject: [PATCH] Add: (org-ql-find) --- README.org | 20 +- images/org-ql-find.png | Bin 0 -> 87067 bytes org-ql-find.el | 178 +++++++++++++ org-ql.info | 563 ++++++++++++++++++++++------------------- 4 files changed, 496 insertions(+), 265 deletions(-) create mode 100644 images/org-ql-find.png create mode 100644 org-ql-find.el diff --git a/README.org b/README.org index 61fe3bdb..507c3289 100644 --- a/README.org +++ b/README.org @@ -94,6 +94,9 @@ Lisp code examples are in [[examples.org]]. :TOC: ignore-children :END: ++ *Jumping to an entry:* + - [[#org-ql-find][org-ql-find]] (command) + - [[#helm-org-ql][helm-org-ql]] (command) + *Showing an agenda-like view:* - [[#org-ql-search][org-ql-search]] (command) - [[#org-ql-view][org-ql-view]] (command) @@ -101,8 +104,18 @@ Lisp code examples are in [[examples.org]]. - [[#org-ql-view-recent-items][org-ql-view-recent-items]] (command) + *Showing a tree in a buffer:* - [[#org-ql-sparse-tree][org-ql-sparse-tree]] (command) -+ *Showing results with Helm*: - - [[#helm-org-ql][helm-org-ql]] (command) + +*** org-ql-find + +/Note: These commands use [[#non-sexp-query-syntax][non-sexp queries]]./ + +These commands jump to a heading selected using Emacs's built-in completion facilities with an Org QL query: + +- ~org-ql-find~ searches all entry content. +- ~org-ql-find-path~ searches only headings (using the ~outline-path:~ predicate). +- ~org-ql-find-heading~ searches only headings (using the ~heading:~ predicate). + +[[images/org-ql-find.png]] *** org-ql-search @@ -524,7 +537,8 @@ Simple links may also be written manually in either sexp or non-sexp form, like: ** 0.7-pre -Nothing new yet. +*Added* ++ Commands ~org-ql-find~, ~org-ql-find-heading~, and ~org-ql-find-path~, which jump to entries selected using Emacs's built-in completion facilities and Org QL queries (like ~helm-org-ql~, but doesn't require Helm.). ** 0.6.2 diff --git a/images/org-ql-find.png b/images/org-ql-find.png new file mode 100644 index 0000000000000000000000000000000000000000..524ca8aca16e20686f5e76051fa0afc1a6644338 GIT binary patch literal 87067 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

Nuu#w?oI*7s*aD*Q91SNbDr6ljdw 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 ?7-R+ksX=E}3P_{VEm<_rh+#x%NMCl3?ZNK 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 B>GA*o literal 0 HcmV?d00001 diff --git a/org-ql-find.el b/org-ql-find.el new file mode 100644 index 00000000..7585f755 --- /dev/null +++ b/org-ql-find.el @@ -0,0 +1,178 @@ +;;; org-ql-find.el --- Find headings with completion using org-ql -*- lexical-binding: t; -*- + +;; Copyright (C) 2022 Adam Porter + +;; Author: Adam Porter + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;; This library provides a way to quickly find and go to Org entries +;; selected with Emacs's built-in completions API (so it works with +;; packages that extend it, like Vertico, Marginalia, etc). It works +;; like `helm-org-ql' but does not require Helm. + +;;; Code: + +(require 'cl-lib) + +(require 'org) +(require 'org-ql) + +;;;; Customization + +(defgroup org-ql-find nil + "Options for `org-ql-find'." + :group 'org-ql) + +(defcustom org-ql-find-reverse-paths t + "Whether to reverse Org outline paths in `org-ql-find' results." + :type 'boolean) + +(defcustom org-ql-find-goto-hook '(org-show-entry) + "Functions called when selecting an entry." + :type 'hook) + +(defface org-ql-find-snippet '((t (:inherit font-lock-comment-face))) + "Snippets.") + +;;;; Functions + +;;;###autoload +(cl-defun org-ql-find (buffers-files &key query-prefix + (prompt "Find entry: ")) + "Go to an Org entry in BUFFERS-FILES selected by searching entries with `org-ql'. +Interactively, with universal prefix, select multiple buffers to +search with completion. + +If QUERY-PREFIX, prepend it to the query (e.g. use \"heading:\" +to only search headings, easily creating a custom command that +saves the user from having to type it)." + (interactive + (list (if current-prefix-arg + (mapcar #'get-buffer + (completing-read-multiple + "Buffers: " + (mapcar #'buffer-name + (cl-remove-if-not (lambda (buffer) + (eq 'org-mode (buffer-local-value 'major-mode buffer))) + (buffer-list))) nil t)) + (current-buffer)))) + ;; Emacs's completion API is not always easy to understand, + ;; especially when using "programmed completion." This code was + ;; made possible by the example Clemens Radermacher shared at + ;; . + (let ((table (make-hash-table :test #'equal)) + (window-width (window-width))) + (cl-labels ((action + () (font-lock-ensure (point-at-bol) (point-at-eol)) + (let* ((path (thread-first (org-get-outline-path t t) + (org-format-outline-path window-width nil "") + (org-split-string ""))) + (path (if org-ql-find-reverse-paths + (string-join (nreverse path) "\\") + (string-join path "/")))) + (puthash path (point-marker) table) + path)) + (affix (completions) + (cl-loop for completion in completions + for marker = (gethash completion table) + for todo-state = (if-let (it (org-entry-get marker "TODO")) + (concat (propertize it + 'face (org-get-todo-face it)) + " ") + "") + for snippet = (if-let (it (snippet marker)) + (propertize (concat " " it) + 'face 'org-ql-find-snippet) + "") + collect (list completion todo-state snippet))) + (annotate (candidate) + (or (snippet (gethash candidate table)) "")) + (snippet (marker) + (org-with-point-at marker + (org-end-of-meta-data t) + (unless (org-at-heading-p) + (let ((end (min (+ (point) 51) + (org-entry-end-position)))) + (truncate-string-to-width + (replace-regexp-in-string "\n" " " (buffer-substring (point) end) + t t) + 50 nil nil t))))) + (group (candidate transform) + (pcase transform + (`nil (buffer-name (marker-buffer (gethash candidate table)))) + (_ candidate))) + (try (string _table _pred point &optional _metadata) + (cons string point)) + (all (string table pred _point) + (all-completions string table pred)) + (collection (str _pred flag) + (pcase flag + ('metadata (list 'metadata + (cons 'group-function #'group) + (cons 'affixation-function #'affix) + (cons 'annotation-function #'annotate))) + (`t (unless (string-empty-p str) + (org-ql-select buffers-files (org-ql--query-string-to-sexp (concat query-prefix str)) + :action #'action)))))) + (let* ((completion-styles '(org-ql-find)) + (completion-styles-alist (list (list 'org-ql-find #'try #'all "Org QL Find"))) + (selected (completing-read prompt #'collection nil)) + (marker (gethash selected table))) + (with-current-buffer (marker-buffer marker) + (goto-char marker) + (display-buffer (current-buffer)) + (run-hook-with-args 'org-ql-find-goto-hook)))))) + +;;;###autoload +(defun org-ql-find-heading (buffers-files) + "Go to an Org entry in BUFFERS-FILES selected by searching with `org-ql'. +Only headings are searched (using the \"heading:\" predicate). +Interactively, with universal prefix, select multiple buffers to +search with completion." + (interactive + (list (if current-prefix-arg + (mapcar #'get-buffer + (completing-read-multiple + "Buffers: " + (mapcar #'buffer-name + (cl-remove-if-not (lambda (buffer) + (eq 'org-mode (buffer-local-value 'major-mode buffer))) + (buffer-list))) nil t)) + (current-buffer)))) + (org-ql-find buffers-files :prompt "Find heading: " :query-prefix "heading:")) + +;;;###autoload +(defun org-ql-find-path (buffers-files) + "Go to an Org entry in BUFFERS-FILES selected by searching with `org-ql'. +Only outline paths are searched (using the \"outline-path:\" +predicate). Interactively, with universal prefix, select +multiple buffers to search with completion." + (interactive + (list (if current-prefix-arg + (mapcar #'get-buffer + (completing-read-multiple + "Buffers: " + (mapcar #'buffer-name + (cl-remove-if-not (lambda (buffer) + (eq 'org-mode (buffer-local-value 'major-mode buffer))) + (buffer-list))) nil t)) + (current-buffer)))) + (org-ql-find buffers-files :prompt "Find outline path: " :query-prefix "outline-path:")) + +(provide 'org-ql-find) + +;;; org-ql-find.el ends here diff --git a/org-ql.info b/org-ql.info index 84895de5..0576cf5b 100644 --- a/org-ql.info +++ b/org-ql.info @@ -11,6 +11,14 @@ File: README.info, Node: Top, Next: Contents, Up: (dir) org-ql ****** +This package provides a query language for Org files. It offers two +syntax styles: Lisp-like sexps and search engine-like keywords. + + It includes three libraries: The ‘org-ql’ library is flexible and may +be used as a backend for other tools. The libraries ‘org-ql-search’ and +‘helm-org-ql’ (a separate package) provide interactive search commands +and saved views. + * Menu: * Contents:: @@ -23,15 +31,11 @@ org-ql — The Detailed Node Listing — - - Installation * Quelpa:: * Helm support:: - - Usage * Commands:: @@ -43,6 +47,7 @@ Usage Commands +* org-ql-find:: * org-ql-search:: * helm-org-ql:: * org-ql-view:: @@ -50,8 +55,6 @@ Commands * org-ql-view-recent-items:: * org-ql-sparse-tree:: - - Queries * Non-sexp query syntax:: @@ -59,8 +62,6 @@ Queries * Ancestor/descendant predicates:: * Date/time predicates:: - - Functions / Macros * Agenda-like views:: @@ -70,6 +71,7 @@ Functions / Macros Changelog * 0.7-pre: 07-pre. +* 0.6.2: 062. * 0.6.1: 061. * 0.6: 06. * 0.5.2: 052. @@ -94,20 +96,11 @@ Changelog * 0.2: 02. * 0.1: 01. - - Notes * Comparison with Org Agenda searches:: * org-sidebar:: -This package provides a query language for Org files. It offers two -syntax styles: Lisp-like sexps and search engine-like keywords. - - It includes three libraries: The org-ql library is flexible and may -be used as a backend for other tools. The libraries org-ql-search and -helm-org-ql (a separate package) provide interactive search commands and -saved views.  File: README.info, Node: Contents, Next: Screenshots, Prev: Top, Up: Top @@ -128,13 +121,13 @@ File: README.info, Node: Installation, Next: Usage, Prev: Screenshots, Up: T 3 Installation ************** -The package org-ql may be installed directly from MELPA +The package ‘org-ql’ may be installed directly from MELPA (https://melpa.org/#/org-ql) or with other tools like Quelpa (https://framagit.org/steckerhalter/quelpa). After installation, you can use the commands without additional configuration. To use the functions and macros in your own Elisp code, -use libraries org-ql and org-ql-view. +use libraries ‘org-ql’ and ‘org-ql-view’. * Menu: @@ -165,8 +158,8 @@ File: README.info, Node: Helm support, Prev: Quelpa, Up: Installation 3.2 Helm support ================ -The command helm-org-ql is available in the package helm-org-ql. It may -be installed from MELPA, or with Quelpa, like so: +The command ‘helm-org-ql’ is available in the package ‘helm-org-ql’. It +may be installed from MELPA, or with Quelpa, like so: (use-package helm-org-ql :quelpa (helm-org-ql :fetcher github :repo "alphapapa/org-ql" @@ -200,6 +193,9 @@ File: README.info, Node: Commands, Next: Queries, Up: Usage 4.1 Commands ============ + • *Jumping to an entry:* + • (command) + • (command) • *Showing an agenda-like view:* • (command) • (command) @@ -207,11 +203,10 @@ File: README.info, Node: Commands, Next: Queries, Up: Usage • (command) • *Showing a tree in a buffer:* • (command) - • *Showing results with Helm*: - • (command) * Menu: +* org-ql-find:: * org-ql-search:: * helm-org-ql:: * org-ql-view:: @@ -220,9 +215,26 @@ File: README.info, Node: Commands, Next: Queries, Up: Usage * org-ql-sparse-tree::  -File: README.info, Node: org-ql-search, Next: helm-org-ql, Up: Commands +File: README.info, Node: org-ql-find, Next: org-ql-search, Up: Commands + +4.1.1 org-ql-find +----------------- + +_Note: These commands use ._ + + These commands jump to a heading selected using Emacs’s built-in +completion facilities with an Org QL query: + + • ‘org-ql-find’ searches all entry content. + • ‘org-ql-find-path’ searches only headings (using the + ‘outline-path:’ predicate). + • ‘org-ql-find-heading’ searches only headings (using the ‘heading:’ + predicate). + + +File: README.info, Node: org-ql-search, Next: helm-org-ql, Prev: org-ql-find, Up: Commands -4.1.1 org-ql-search +4.1.2 org-ql-search ------------------- _Note: This command supports both sexp queries and ._ @@ -249,10 +261,10 @@ Interactively, with prefix, leave narrowed. ‘priority’. *Bindings:* Keys bound in results buffer. - • r: Refresh results. With prefix, prompt to adjust search + • ‘r’: Refresh results. With prefix, prompt to adjust search parameters. - • v: Show transient view dispatcher (like Magit’s popups). - • C-x C-s: Save query to variable ‘org-ql-views’ (accessible with + • ‘v’: Show ‘transient’ view dispatcher (like Magit’s popups). + • ‘C-x C-s’: Save query to variable ‘org-ql-views’ (accessible with command ‘org-ql-view’). *Note:* The view buffer is currently put in ‘org-agenda-mode’, which @@ -265,57 +277,57 @@ text properties are placed on each item, imitating an Agenda buffer.)  File: README.info, Node: helm-org-ql, Next: org-ql-view, Prev: org-ql-search, Up: Commands -4.1.2 helm-org-ql +4.1.3 helm-org-ql ----------------- _Note: This command uses . It is available separately in the package -helm-org-ql._ +‘helm-org-ql’._ This command displays matches with Helm. - • Press C-x C-s in the Helm session to save the results to an - org-ql-search buffer. + • Press ‘C-x C-s’ in the Helm session to save the results to an + ‘org-ql-search’ buffer.  File: README.info, Node: org-ql-view, Next: org-ql-view-sidebar, Prev: helm-org-ql, Up: Commands -4.1.3 org-ql-view +4.1.4 org-ql-view ----------------- Choose and display a view stored in ‘org-ql-views’. *Bindings:* Keys bound in view buffer. - • g, r: Refresh results. With prefix, prompt to adjust search + • ‘g’, ‘r’: Refresh results. With prefix, prompt to adjust search parameters. - • v: Show transient view dispatcher (like Magit’s popups). - • C-x C-s: Save query to variable ‘org-ql-views’ (accessible with + • ‘v’: Show ‘transient’ view dispatcher (like Magit’s popups). + • ‘C-x C-s’: Save query to variable ‘org-ql-views’ (accessible with command ‘org-ql-view’).  File: README.info, Node: org-ql-view-sidebar, Next: org-ql-view-recent-items, Prev: org-ql-view, Up: Commands -4.1.4 org-ql-view-sidebar +4.1.5 org-ql-view-sidebar ------------------------- -Show a sidebar window listing views stored in org-ql-views for easy -access. In the sidebar, press RET or mouse-1 to show the view at point, -and press c to customize the view at point. +Show a sidebar window listing views stored in ‘org-ql-views’ for easy +access. In the sidebar, press ‘RET’ or ‘mouse-1’ to show the view at +point, and press ‘c’ to customize the view at point.  File: README.info, Node: org-ql-view-recent-items, Next: org-ql-sparse-tree, Prev: org-ql-view-sidebar, Up: Commands -4.1.5 org-ql-view-recent-items +4.1.6 org-ql-view-recent-items ------------------------------ Show items in ‘FILES’ from last ‘DAYS’ days with timestamps of ‘TYPE’. ‘TYPE’ may be ‘ts’, ‘ts-active’, ‘ts-inactive’, ‘clocked’, ‘closed’, -‘deadline’, ‘planning’, or ‘scheduled’. FILES defaults to those -returned by the function org-agenda-files. +‘deadline’, ‘planning’, or ‘scheduled’. ‘FILES’ defaults to those +returned by the function ‘org-agenda-files’.  File: README.info, Node: org-ql-sparse-tree, Prev: org-ql-view-recent-items, Up: Commands -4.1.6 org-ql-sparse-tree +4.1.7 org-ql-sparse-tree ------------------------ Arguments: ‘(query &key keep-previous (buffer (current-buffer)))’ @@ -337,7 +349,7 @@ File: README.info, Node: Queries, Next: Functions / Macros, Prev: Commands, =========== • • • • - An org-ql query is a Lisp expression which may contain arbitrary + An ‘org-ql’ query is a Lisp expression which may contain arbitrary expressions, as well as calling certain built-in predicates. It is byte-compiled into a predicate function which is tested with point on each heading in an Org buffer; when it returns non-nil, the heading @@ -366,11 +378,11 @@ File: README.info, Node: Non-sexp query syntax, Next: General predicates, Up: 4.2.1 Non-sexp query syntax --------------------------- -The command org-ql-search also accepts, and the command helm-org-ql only -accepts, an alternative, non-sexp query syntax. The syntax is simple, -and a few examples of queries in both syntaxes should suffice. By -default, when multiple predicates are used, they are combined with -boolean and. +The command ‘org-ql-search’ also accepts, and the command ‘helm-org-ql’ +only accepts, an alternative, non-sexp query syntax. The syntax is +simple, and a few examples of queries in both syntaxes should suffice. +By default, when multiple predicates are used, they are combined with +boolean ‘and’. Sexp syntax Non-sexp syntax ------------------------------------------------------------------------------------------------------- @@ -386,9 +398,9 @@ Sexp syntax Non-sexp syntax ‘(and (tags "space") (not (regexp "moon")))’ ‘tags:space !moon’ ‘(priority >= B)’ ‘priority:A,B’ - Note that the effort, level, and priority predicates do not support -comparators in the non-sexp syntax, so multiple arguments should be -passed instead, as seen in the last example. + Note that the ‘effort’, ‘level’, and ‘priority’ predicates do not +support comparators in the non-sexp syntax, so multiple arguments should +be passed instead, as seen in the last example.  File: README.info, Node: General predicates, Next: Ancestor/descendant predicates, Prev: Non-sexp query syntax, Up: Queries @@ -410,14 +422,14 @@ Arguments are listed next to predicate names, where applicable. Matches if effort is between DURATIONs, inclusive. ‘(effort COMPARATOR DURATION)’: Matches if effort compares to ‘DURATION’ with ‘COMPARATOR’. ‘COMPARATOR’ may be ‘<’, ‘<=’, ‘>’, or ‘>=’. - ‘DURATION’ should be an Org effort string, like 5 or 0:05. + ‘DURATION’ should be an Org effort string, like ‘5’ or ‘0:05’. ‘habit’ Return non-nil if entry is a habit. ‘heading (&rest strings)’ Return non-nil if current entry’s heading matches all ‘STRINGS’. Matching is done case-insensitively. - • Aliases: h. -‘‘heading-regexp (&rest regexps)’’ + • Aliases: ‘h’. +‘heading-regexp (&rest regexps)’ Return non-nil if current entry’s heading matches all ‘REGEXPS’ (regexp strings). Matching is done case-insensitively. • Aliases: ‘h*’. @@ -437,8 +449,8 @@ Arguments are listed next to predicate names, where applicable. ‘outline-path (&rest strings)’ Return non-nil if current node’s outline path matches all of ‘STRINGS’. Each string may appear as a substring in any part of - the node’s outline path. For example, the path Food/Fruits/Grapes - would match ‘(olp "Fruit" "Grape")’. + the node’s outline path. For example, the path + ‘Food/Fruits/Grapes’ would match ‘(olp "Fruit" "Grape")’. • Aliases: ‘olp’. ‘outline-path-segment (&rest strings)’ Return non-nil if current node’s outline path matches ‘STRINGS’. @@ -470,8 +482,8 @@ Arguments are listed next to predicate names, where applicable. Return non-nil if current entry matches all of ‘REGEXPS’ (regexp strings). Matches against entire entry, from beginning of its heading to the next heading. - • Aliases: r. -‘‘src (&key lang regexps)’’ + • Aliases: ‘r’. +‘src (&key lang regexps)’ Return non-nil if current entry contains an Org Babel source block. If ‘LANG’ is non-nil, match blocks of that language. If ‘REGEXPS’ is non-nil, require that block’s contents match all regexps. @@ -553,10 +565,10 @@ to look forward, or negative to look backward), a string parseable by Return non-nil if current entry has a timestamp in given period. Without arguments, return non-nil if entry has a timestamp. - ‘ts-active, ts-a’ - Like ts, but only matches active timestamps. - ‘ts-inactive, ts-i’ - Like ts, but only matches inactive timestamps. + ‘ts-active’, ‘ts-a’ + Like ‘ts’, but only matches active timestamps. + ‘ts-inactive’, ‘ts-i’ + Like ‘ts’, but only matches inactive timestamps. The following predicates, in addition to the keyword arguments, can also take a single argument, a number, which looks backward or forward a @@ -584,8 +596,8 @@ searching for items planned in the next few days: • *Forward-looking* ‘deadline’ Return non-nil if current entry has deadline in given period. - If argument is auto, return non-nil if entry has deadline - within org-deadline-warning-days. Without arguments, return + If argument is ‘auto’, return non-nil if entry has deadline + within ‘org-deadline-warning-days’. Without arguments, return non-nil if entry has any deadline. ‘planning’ Return non-nil if current entry has planning timestamp (i.e. @@ -623,7 +635,7 @@ File: README.info, Node: Agenda-like views, Next: Listing / acting-on results, For use as a custom agenda block type in ‘org-agenda-custom-commands’. For example, you could define a custom series command like this, which would list all priority A - items tagged Emacs with to-do keyword SOMEDAY, followed by the + items tagged ‘Emacs’ with to-do keyword ‘SOMEDAY’, followed by the standard agenda view, in a single buffer: (setq org-agenda-custom-commands @@ -643,8 +655,8 @@ File: README.info, Node: Agenda-like views, Next: Listing / acting-on results, However, the ‘org-ql-block’ version runs in about 1/5th the time. - The variable org-ql-block-header may be bound to a string to use as - the block header, otherwise the header is formed automatically. + The variable ‘org-ql-block-header’ may be bound to a string to use + as the block header, otherwise the header is formed automatically.  File: README.info, Node: Listing / acting-on results, Next: Custom predicates, Prev: Agenda-like views, Up: Functions / Macros @@ -792,7 +804,7 @@ File: README.info, Node: Custom predicates, Prev: Listing / acting-on results, • See: Custom predicate tutorial (examples/defpred.org) - 1. Macro: org-ql-defpred + 1. Macro: ‘org-ql-defpred’ _Arguments:_ ‘(name args docstring &key body preambles normalizers)’ @@ -881,9 +893,9 @@ supported: • Each column may also be specified as a list with the second element being a header string. For example, to abbreviate the priority column: ‘(priority "P")’. - • For certain columns, like property, arguments may be passed by - specifying the column type itself as a list. For example, to - display a column showing the values of a ‘property’ named + • For certain columns, like ‘property’, arguments may be passed + by specifying the column type itself as a list. For example, + to display a column showing the values of a ‘property’ named ‘milestone’, with the header being abbreviated to ‘M’: ‘((property "milestone") "M")’. • ‘:sort’ One or a list of Org QL sorting methods (see @@ -898,7 +910,7 @@ in the following example). For example, this dynamic block shows the first seven headings that are to-do items with priority A or B, sorted by deadline then priority, -with certain columns (including the value of the agenda-group property +with certain columns (including the value of the ‘agenda-group’ property with a custom header) and timestamp format: #+BEGIN: org-ql :query "todo: priority:A,B" :columns (todo (priority "P") ((property "agenda-group") "Group") deadline heading) :sort (deadline priority) :take 7 :ts-format "%Y-%m-%d %H:%M" @@ -941,7 +953,7 @@ File: README.info, Node: Tips, Prev: Links, Up: Usage ======== • Org QL View buffers can be bookmarked with Emacs bookmark commands, - e.g. C-x r m. This also integrates with org-sidebar + e.g. ‘C-x r m’. This also integrates with org-sidebar (https://github.com/alphapapa/org-sidebar) and Burly (https://github.com/alphapapa/burly.el). @@ -960,6 +972,7 @@ releases. * Menu: * 0.7-pre: 07-pre. +* 0.6.2: 062. * 0.6.1: 061. * 0.6: 06. * 0.5.2: 052. @@ -985,17 +998,32 @@ releases. * 0.1: 01.  -File: README.info, Node: 07-pre, Next: 061, Up: Changelog +File: README.info, Node: 07-pre, Next: 062, Up: Changelog 5.1 0.7-pre =========== -Nothing new yet. +*Added* + • Commands ‘org-ql-find’, ‘org-ql-find-heading’, and + ‘org-ql-find-path’, which jump to entries selected using Emacs’s + built-in completion facilities and Org QL queries (like + ‘helm-org-ql’, but doesn’t require Helm.).  -File: README.info, Node: 061, Next: 06, Prev: 07-pre, Up: Changelog +File: README.info, Node: 062, Next: 061, Prev: 07-pre, Up: Changelog -5.2 0.6.1 +5.2 0.6.2 +========= + +*Fixed* + • ‘link’ predicate when used in an ‘or’’ed query. (#279 + (https://github.com/alphapapa/org-ql/issues/279). Thanks to Marc + Fargas (https://github.com/telenieko) for reporting.) + + +File: README.info, Node: 061, Next: 06, Prev: 062, Up: Changelog + +5.3 0.6.1 ========= *Fixed* @@ -1013,11 +1041,11 @@ File: README.info, Node: 061, Next: 06, Prev: 07-pre, Up: Changelog  File: README.info, Node: 06, Next: 052, Prev: 061, Up: Changelog -5.3 0.6 +5.4 0.6 ======= *Added* - • Macro org-ql-defpred, used to define search predicates. (See + • Macro ‘org-ql-defpred’, used to define search predicates. (See tutorial (examples/defpred.org).) • Predicate ‘effort’. • Predicate ‘heading-regexp’, which matches regular expressions @@ -1038,21 +1066,21 @@ File: README.info, Node: 06, Next: 052, Prev: 061, Up: Changelog For example, ‘:sort '(todo priority date)’ now does what ‘:sort '(date priority todo)’ did in earlier versions. (This change is made to enable the new ‘reverse’ sorting method.) Users who have - customized org-ql-views will need to update the stored views’ + customized ‘org-ql-views’ will need to update the stored views’ sorting methods to preserve the desired sort order. - • Helm support (including the command helm-org-ql) has been moved to - a separate package, helm-org-ql. + • Helm support (including the command ‘helm-org-ql’) has been moved + to a separate package, ‘helm-org-ql’. • Predicate ‘heading’ now matches plain strings instead of regular expressions. - • Update dash dependency, and remove dependency on obsolete - dash-functional. (Fixes #179 + • Update ‘dash’ dependency, and remove dependency on obsolete + ‘dash-functional’. (Fixes #179 (https://github.com/alphapapa/org-ql/issues/179), #209 (https://github.com/alphapapa/org-ql/issues/209). Thanks to Mark Hudnall (https://github.com/landakram), Akira Komamura (https://github.com/akirak), Nathanael kinfe (https://github.com/natask), Pablo Stafforini (https://github.com/benthamite), Jason May - (https://github.com/jmay), and Basil L. Contovounesios + (https://github.com/jmay), and Basil L. Contovounesios (https://github.com/basil-conto).) *Removed* @@ -1067,7 +1095,7 @@ File: README.info, Node: 06, Next: 052, Prev: 061, Up: Changelog *Internal* • Predicates are now defined more cleanly with a macro - (org-ql-defpred) that consolidates functionality related to each + (‘org-ql-defpred’) that consolidates functionality related to each predicate. This will also allow users to more easily define custom predicates. • Version 1.0 of library ‘peg’ is now required. @@ -1080,7 +1108,7 @@ File: README.info, Node: 06, Next: 052, Prev: 061, Up: Changelog  File: README.info, Node: 052, Next: 051, Prev: 06, Up: Changelog -5.4 0.5.2 +5.5 0.5.2 ========= *Fixed* @@ -1091,12 +1119,12 @@ File: README.info, Node: 052, Next: 051, Prev: 06, Up: Changelog  File: README.info, Node: 051, Next: 05, Prev: 052, Up: Changelog -5.5 0.5.1 +5.6 0.5.1 ========= *Fixed* • Custom sorting functions could corrupt the cache, causing items to - disappear after refreshing an org-ql-search buffer. (#186 + disappear after refreshing an ‘org-ql-search’ buffer. (#186 (https://github.com/alphapapa/org-ql/issues/186), #187 (https://github.com/alphapapa/org-ql/issues/187). Thanks to Nathanael kinfe (https://github.com/natask).) @@ -1104,19 +1132,19 @@ File: README.info, Node: 051, Next: 05, Prev: 052, Up: Changelog  File: README.info, Node: 05, Next: 049, Prev: 051, Up: Changelog -5.6 0.5 +5.7 0.5 ======= *Added* - • View dispatcher using transient.el (like Magit), bound to v in + • View dispatcher using ‘transient.el’ (like Magit), bound to ‘v’ in search/view buffers. - • Predicate link, which matches descriptions and targets in Org + • Predicate ‘link’, which matches descriptions and targets in Org links. • Predicate ‘tags-regexp’ (alias: ‘tags*’), which matches regexps against entry tags (e.g, helpful when a tag might end in "s"). • Emacs bookmark support: Org QL View buffers can be bookmarked with, - e.g. C-x r m and shown with, e.g. C-x r b. (This also enables - view restoration with Burly + e.g. ‘C-x r m’ and shown with, e.g. ‘C-x r b’. (This also + enables view restoration with Burly (https://github.com/alphapapa/burly.el).) • Dynamic block support. • Org link support (storing and opening links to Org QL View @@ -1124,7 +1152,7 @@ File: README.info, Node: 05, Next: 049, Prev: 051, Up: Changelog • Mascot. *Changed* - • Binding to refresh search/view buffers changed to r. + • Binding to refresh search/view buffers changed to ‘r’. *Internal* • When formatting entries for Org QL View buffers, use internal @@ -1133,9 +1161,9 @@ File: README.info, Node: 05, Next: 049, Prev: 051, Up: Changelog Org versions before 9.3. *Deprecated* - • Macro org-ql is marked obsolete. It will be removed in v0.7. - Functions org-ql-select and org-ql-query should be used instead. - (The macro serves only to confuse with regard to quoting + • Macro ‘org-ql’ is marked obsolete. It will be removed in v0.7. + Functions ‘org-ql-select’ and ‘org-ql-query’ should be used + instead. (The macro serves only to confuse with regard to quoting arguments.) *Acknowledgments* @@ -1145,18 +1173,18 @@ File: README.info, Node: 05, Next: 049, Prev: 051, Up: Changelog  File: README.info, Node: 049, Next: 048, Prev: 05, Up: Changelog -5.7 0.4.9 +5.8 0.4.9 ========= *Fixed* - • Agenda restriction in org-ql-block. (Fixes #84 + • Agenda restriction in ‘org-ql-block’. (Fixes #84 (https://github.com/alphapapa/org-ql/issues/84). Thanks to Ihor Radchenko (https://github.com/yantar92).)  File: README.info, Node: 048, Next: 047, Prev: 049, Up: Changelog -5.8 0.4.8 +5.9 0.4.8 ========= *Fixed* @@ -1168,12 +1196,12 @@ File: README.info, Node: 048, Next: 047, Prev: 049, Up: Changelog  File: README.info, Node: 047, Next: 046, Prev: 048, Up: Changelog -5.9 0.4.7 -========= +5.10 0.4.7 +========== *Fixed* - • Give a useful error if org-ql-search-directories-files is called - without a directories argument and org-directory doesn’t exist. + • Give a useful error if ‘org-ql-search-directories-files’ is called + without a directories argument and ‘org-directory’ doesn’t exist. (Fixes #139 (https://github.com/alphapapa/org-ql/issues/139). Thanks to Matt Huszagh (https://github.com/matthuszagh) for reporting.) @@ -1181,12 +1209,12 @@ File: README.info, Node: 047, Next: 046, Prev: 048, Up: Changelog  File: README.info, Node: 046, Next: 045, Prev: 047, Up: Changelog -5.10 0.4.6 +5.11 0.4.6 ========== *Fixed* - • Compatibility with newer versions of the peg library, which removed - a macro used by this package. (Fixes #75 + • Compatibility with newer versions of the ‘peg’ library, which + removed a macro used by this package. (Fixes #75 (https://github.com/alphapapa/org-ql/issues/75). Thanks to Karl Voit (https://github.com/novoid) and @karlicoss (https://github.com/karlicoss) for reporting.) @@ -1194,7 +1222,7 @@ File: README.info, Node: 046, Next: 045, Prev: 047, Up: Changelog  File: README.info, Node: 045, Next: 044, Prev: 046, Up: Changelog -5.11 0.4.5 +5.12 0.4.5 ========== *Fixed* @@ -1206,7 +1234,7 @@ File: README.info, Node: 045, Next: 044, Prev: 046, Up: Changelog  File: README.info, Node: 044, Next: 043, Prev: 045, Up: Changelog -5.12 0.4.4 +5.13 0.4.4 ========== *Fixed* @@ -1218,17 +1246,17 @@ File: README.info, Node: 044, Next: 043, Prev: 045, Up: Changelog  File: README.info, Node: 043, Next: 042, Prev: 044, Up: Changelog -5.13 0.4.3 +5.14 0.4.3 ========== *Fixed* - • When org-ql-view-refresh is called, ensure the buffer is an Org QL - View buffer. + • When ‘org-ql-view-refresh’ is called, ensure the buffer is an Org + QL View buffer.  File: README.info, Node: 042, Next: 041, Prev: 043, Up: Changelog -5.14 0.4.2 +5.15 0.4.2 ========== *Fixed* @@ -1237,24 +1265,24 @@ File: README.info, Node: 042, Next: 041, Prev: 043, Up: Changelog  File: README.info, Node: 041, Next: 04, Prev: 042, Up: Changelog -5.15 0.4.1 +5.16 0.4.1 ========== *Fixed* - • level predicate used with arguments in plain queries. (Thanks to + • ‘level’ predicate used with arguments in plain queries. (Thanks to Akira Komamura (https://github.com/akirak) for reporting.)  File: README.info, Node: 04, Next: 032, Prev: 041, Up: Changelog -5.16 0.4 +5.17 0.4 ======== _Note:_ The next release, 0.5, may include changes which will require minor updates to written queries (e.g. a few predicates may be renamed). Users who wish to avoid those changes happening unexpectedly -in their configs should avoid upgrading org-ql beyond 0.4 automatically, -as they will be pushed to the master branch when ready. +in their configs should avoid upgrading ‘org-ql’ beyond 0.4 +automatically, as they will be pushed to the ‘master’ branch when ready. *Added* • *Commands* @@ -1268,13 +1296,13 @@ as they will be pushed to the master branch when ready. • *Queries* • Negation of terms in plain queries using ‘!’. For example, ‘tags:space !moon’ to exclude entries which contain ‘moon’. - • Predicates outline-path (alias olp) and outline-path-segment - (alias olps). + • Predicates ‘outline-path’ (alias ‘olp’) and + ‘outline-path-segment’ (alias ‘olps’). • Predicate ‘src’, which matches Org Babel source blocks. - • Predicates parent and ancestors. (Thanks to Josh Moller-Mara - (https://github.com/mm--).) - • Alias h for heading predicate. - • Alias r for regexp predicate. (Thanks to Feng Shu + • Predicates ‘parent’ and ‘ancestors’. (Thanks to Josh + Moller-Mara (https://github.com/mm--).) + • Alias ‘h’ for ‘heading’ predicate. + • Alias ‘r’ for ‘regexp’ predicate. (Thanks to Feng Shu (https://github.com/tumashu).) • Info manual. • Function ‘helm-org-ql-source’, which returns a Helm source that @@ -1282,40 +1310,40 @@ as they will be pushed to the master branch when ready. for custom Helm commands that search certain files. • Display a message when views are refreshed. (Thanks to xeijin (https://github.com/xeijin).) - • Respect Org Agenda restriction in org-ql-block. (Thanks to Ihor + • Respect Org Agenda restriction in ‘org-ql-block’. (Thanks to Ihor Radchenko (https://github.com/yantar92) for reporting.) - • Option org-ql-view-sidebar-sort-views. - • Mouseover help-echo text for org-ql-views default view names. - • "Dangling tasks" default view in org-ql-views. (Users who have - modified org-ql-views from the default will not see the new view + • Option ‘org-ql-view-sidebar-sort-views’. + • Mouseover ‘help-echo’ text for ‘org-ql-views’ default view names. + • "Dangling tasks" default view in ‘org-ql-views’. (Users who have + modified ‘org-ql-views’ from the default will not see the new view unless they copy it into their config.) *Changed* - • Some default org-ql-view views (users who have modified - org-ql-views from the default will not see the new views unless + • Some default ‘org-ql-view’ views (users who have modified + ‘org-ql-views’ from the default will not see the new views unless they copy them into their config): • Rename some views. - • "Stuck projects" view (now uses descendants instead of - children, which is more useful. + • "Stuck projects" view (now uses ‘descendants’ instead of + ‘children’, which is more useful. *Fixed* - • Inherit file tags when org-tag-inheritance is enabled. (Fixes #55 - (https://github.com/alphapapa/org-ql/issues/55). Thanks to Mikhail - Skorzhinskiy (https://github.com/mskorzhinskiy).) - • Call helm-make-source directly instead of using - helm-build-sync-source macro. (Fixes #60 + • Inherit file tags when ‘org-tag-inheritance’ is enabled. (Fixes + #55 (https://github.com/alphapapa/org-ql/issues/55). Thanks to + Mikhail Skorzhinskiy (https://github.com/mskorzhinskiy).) + • Call ‘helm-make-source’ directly instead of using + ‘helm-build-sync-source’ macro. (Fixes #60 (https://github.com/alphapapa/org-ql/issues/60). Thanks to Matt Huszagh (https://github.com/matthuszagh) for reporting.) • Search/view buffers now always end with a newline, which prevents - side-scrolling of the window when calling end-of-buffer. - • Face for done to-do keywords in org-ql-view buffers. (Thanks to + side-scrolling of the window when calling ‘end-of-buffer’. + • Face for done to-do keywords in ‘org-ql-view’ buffers. (Thanks to Yiming Chen (https://github.com/dsdshcym).) • Make view buffers read-only. (Fixes #72 (https://github.com/alphapapa/org-ql/issues/72). Thanks to xeijin (https://github.com/xeijin).) • Sorting with single sorter specified as an atom. (Thanks to Jeff Filipovits (https://github.com/legalnonsense).) - • Autoload for org-ql-block agenda block. (Fixes #53 + • Autoload for ‘org-ql-block’ agenda block. (Fixes #53 (https://github.com/alphapapa/org-ql/issues/53). Thanks to reports from Gus Cantieni (https://github.com/gcantieni), Karl Voit (https://github.com/novoid), rieje (https://github.com/rieje), and @@ -1328,20 +1356,20 @@ as they will be pushed to the master branch when ready.  File: README.info, Node: 032, Next: 031, Prev: 04, Up: Changelog -5.17 0.3.2 +5.18 0.3.2 ========== *Fixed* - • In org-ql-search, accept symbol as ‘:super-groups’ argument. - • In the This week and Next week default org-ql-views views, set - timestamps for beginning-of-week to 00:00:00 and end-of-week to + • In ‘org-ql-search’, accept symbol as ‘:super-groups’ argument. + • In the ‘This week’ and ‘Next week’ default ‘org-ql-views’ views, + set timestamps for beginning-of-week to 00:00:00 and end-of-week to 23:59:59. • Plain quoted-phrases in non-sexp queries.  File: README.info, Node: 031, Next: 03, Prev: 032, Up: Changelog -5.18 0.3.1 +5.19 0.3.1 ========== *Fixed* @@ -1351,103 +1379,106 @@ File: README.info, Node: 031, Next: 03, Prev: 032, Up: Changelog  File: README.info, Node: 03, Next: 023, Prev: 031, Up: Changelog -5.19 0.3 +5.20 0.3 ======== *Added* - • Alternative, non-sexp query syntax for commands org-ql-search and - helm-org-ql. See . - • Command helm-org-ql. - • Command org-ql-sparse-tree, like org-sparse-tree for org-ql + • Alternative, non-sexp query syntax for commands ‘org-ql-search’ and + ‘helm-org-ql’. See . + • Command ‘helm-org-ql’. + • Command ‘org-ql-sparse-tree’, like ‘org-sparse-tree’ for ‘org-ql’ queries. (Thanks to Akira Komamura (https://github.com/akirak).) - • Command org-ql-view-sidebar. + • Command ‘org-ql-view-sidebar’. • Per-buffer, per-heading tag caching, which increases the speed of tags-related queries by 6-7x. • More tags-related predicates and aliases: - • For inherited tags: tags-inherited, inherited-tags, tags-i, - itags. - • For heading-local tags: tags-local, local-tags, tags-l, ltags. - • tags-all, tags&: Matches all given tags using boolean AND - (rather than boolean OR, which the tags predicate uses). - • Variable org-ql-block-header, which overrides the default header in - org-ql-block agenda blocks. - • Predicate (path). - • Option org-ql-views may now be customized in a guided, structured - way with the customization UI (e.g. - M-x customize-option RET org-ql-views RET, or press c in the - org-ql-view-sidebar buffer). - • Enable more Org Agenda commands in org-ql-view buffers (e.g. + • For inherited tags: ‘tags-inherited’, ‘inherited-tags’, + ‘tags-i’, ‘itags’. + • For heading-local tags: ‘tags-local’, ‘local-tags’, ‘tags-l’, + ‘ltags’. + • ‘tags-all’, ‘tags&’: Matches all given tags using boolean + ‘AND’ (rather than boolean ‘OR’, which the ‘tags’ predicate + uses). + • Variable ‘org-ql-block-header’, which overrides the default header + in ‘org-ql-block’ agenda blocks. + • Predicate ‘(path)’. + • Option ‘org-ql-views’ may now be customized in a guided, structured + way with the customization UI (e.g. ‘M-x customize-option RET + org-ql-views RET’, or press ‘c’ in the ‘org-ql-view-sidebar’ + buffer). + • Enable more Org Agenda commands in ‘org-ql-view’ buffers (e.g. setting deadlines and scheduling). (Fixes #35 (https://github.com/alphapapa/org-ql/issues/35). Thanks to Milan Zamazal (https://github.com/mz-pdm) and Mikhail Skorzhinskii (https://github.com/mskorzhinskiy).) - • Function org-ql-select’s buffers-files argument can be a function - which returns a list of buffers and/or files. + • Function ‘org-ql-select’’s ‘buffers-files’ argument can be a + function which returns a list of buffers and/or files. *Changed* - • Predicate heading now accepts multiple regexps, which are matched - with boolean AND. - • Predicate regexp now matches its regexp arguments with boolean AND. - • Package org-super-agenda is now a dependency. This removes the + • Predicate ‘heading’ now accepts multiple regexps, which are matched + with boolean ‘AND’. + • Predicate ‘regexp’ now matches its regexp arguments with boolean + ‘AND’. + • Package ‘org-super-agenda’ is now a dependency. This removes the need for awkward code to handle the case where it’s not installed, and makes grouping features always available. Of course, the - global minor mode org-super-agenda-mode is not activated by org-ql, - so no behavior is changed in Org Agenda or org-ql; it only means - that commands like org-ql-search will always provide grouping when - called with the appropriate arguments. + global minor mode ‘org-super-agenda-mode’ is not activated by + ‘org-ql’, so no behavior is changed in Org Agenda or ‘org-ql’; it + only means that commands like ‘org-ql-search’ will always provide + grouping when called with the appropriate arguments. *Removed* - • Macro org-ql-agenda. Instead, use function org-ql-search. See - also command org-ql-view, etc. + • Macro ‘org-ql-agenda’. Instead, use function ‘org-ql-search’. See + also command ‘org-ql-view’, etc. *Fixed* - • Predicate heading now matches only against heading text, i.e. not - including tags at the end of the line, to-do keyword, etc. - • Predicate todo now matches case-sensitively, avoiding - non-todo-keyword matches (e.g. a heading which begins Waiting on - will no longer match for a todo keyword WAITING). - • Interactive completion in org-ql-search. + • Predicate ‘heading’ now matches only against heading text, i.e. + not including tags at the end of the line, to-do keyword, etc. + • Predicate ‘todo’ now matches case-sensitively, avoiding + non-todo-keyword matches (e.g. a heading which begins ‘Waiting on’ + will no longer match for a todo keyword ‘WAITING’). + • Interactive completion in ‘org-ql-search’. *Internal* - • Refactored code from file org-ql-agenda.el into files - org-ql-search.el and org-ql-view.el. Function and variable names - have been changed accordingly. + • Refactored code from file ‘org-ql-agenda.el’ into files + ‘org-ql-search.el’ and ‘org-ql-view.el’. Function and variable + names have been changed accordingly.  File: README.info, Node: 023, Next: 022, Prev: 03, Up: Changelog -5.20 0.2.3 +5.21 0.2.3 ========== *Fixed* • Priority queries could fail to match headings whose to-do keywords - had non-alphabetic characters, like TO-READ. + had non-alphabetic characters, like ‘TO-READ’.  File: README.info, Node: 022, Next: 021, Prev: 023, Up: Changelog -5.21 0.2.2 +5.22 0.2.2 ========== *Fixed* - • (deadline auto) selector matched entries whose deadlines had a + • ‘(deadline auto)’ selector matched entries whose deadlines had a warning period that had not yet been entered - (org-deadline-warning-days too soon). + (‘org-deadline-warning-days’ too soon).  File: README.info, Node: 021, Next: 02, Prev: 022, Up: Changelog -5.22 0.2.1 +5.23 0.2.1 ========== *Fixed* - • (descendants) selector matched against parent heading instead of + • ‘(descendants)’ selector matched against parent heading instead of only descendants.  File: README.info, Node: 02, Next: 01, Prev: 021, Up: Changelog -5.23 0.2 +5.24 0.2 ======== *Added* @@ -1468,7 +1499,7 @@ File: README.info, Node: 02, Next: 01, Prev: 021, Up: Changelog • Selectors ‘ts-a’ and ‘ts-i’, aliases for ‘ts-active’ and ‘ts-inactive’. • Selector ‘ts’ now accepts a ‘:type’ argument. - • Face org-ql-agenda-due-date. + • Face ‘org-ql-agenda-due-date’. • Selectors ‘(children)’ and ‘(descendants)’. • Function ‘org-ql-search’ and macro ‘org-ql-agenda’ accept a ‘:title’ argument, which is displayed in the header. @@ -1477,11 +1508,11 @@ File: README.info, Node: 02, Next: 01, Prev: 021, Up: Changelog • Customization group ‘org-ql’. • Command ‘org-ql-view’, which displays views saved to variable ‘org-ql-views’, which can be saved from ‘org-ql-search’ buffers - with command ‘org-ql-search-save’, which is bound to C-x C-s in + with command ‘org-ql-search-save’, which is bound to ‘C-x C-s’ in view buffers. • Variable ‘org-ql-view-map’, active in view buffers displayed by ‘org-ql-search’, ‘org-ql-agenda’, and ‘org-ql-view’. - • random sort method. + • ‘random’ sort method. • Save position when refreshing search buffers. *Changed* @@ -1500,14 +1531,14 @@ File: README.info, Node: 02, Next: 01, Prev: 021, Up: Changelog *Fixed* • Handle date ranges in date-based selectors. (Thanks to Cody - Goodman (https://github.com/codygman), Samuel W. Flint + Goodman (https://github.com/codygman), Samuel W. Flint (https://github.com/swflint), and Vikas Rawal (https://github.com/vikasrawal).) - • Don’t overwrite bindings in org-agenda-mode-map. + • Don’t overwrite bindings in ‘org-agenda-mode-map’. • Don’t search buffers without headings, and show a message if the user attempts it. • Don’t search hidden/special buffers. - • Properly accept arbitrary sort functions in org-ql-select, etc. + • Properly accept arbitrary sort functions in ‘org-ql-select’, etc. (Fixes #37 (https://github.com/alphapapa/org-ql/issues/37). Thanks to Milan Zamazal (https://github.com/mz-pdm).) • Planning-line-related predicates searched too far into entries. @@ -1521,7 +1552,7 @@ File: README.info, Node: 02, Next: 01, Prev: 021, Up: Changelog (https://github.com/dakra).) *Internal* - • Optimizations for some query selectors, e.g. regexp and todo. + • Optimizations for some query selectors, e.g. ‘regexp’ and ‘todo’. These can provide a significant improvement for some queries. See benchmarks in notes.org (notes.org). • Library ts (https://github.com/alphapapa/ts.el) is now used for @@ -1530,7 +1561,7 @@ File: README.info, Node: 02, Next: 01, Prev: 021, Up: Changelog  File: README.info, Node: 01, Prev: 02, Up: Changelog -5.24 0.1 +5.25 0.1 ======== First tagged release. @@ -1561,10 +1592,10 @@ in the advanced searching tutorial it would require using ‘org-search-view’ with a query with specific regular expression syntax, like this: -+lisp +{^\*+\s-+TO-READ\s-} + +lisp +{^\*+\s-+TO-READ\s-} - But with org-ql-search, you would write a query like -lisp todo:TO-READ, or in Lisp syntax, ‘(and "lisp" (todo "TO-READ"))’. + But with ‘org-ql-search’, you would write a query like ‘lisp +todo:TO-READ’, or in Lisp syntax, ‘(and "lisp" (todo "TO-READ"))’.  File: README.info, Node: org-sidebar, Prev: Comparison with Org Agenda searches, Up: Notes @@ -1588,60 +1619,68 @@ GPLv3  Tag Table: Node: Top225 -Node: Contents1724 -Node: Screenshots1847 -Node: Installation1965 -Node: Quelpa2461 -Node: Helm support2989 -Node: Usage3380 -Node: Commands3778 -Node: org-ql-search4251 -Node: helm-org-ql5901 -Node: org-ql-view6261 -Node: org-ql-view-sidebar6761 -Node: org-ql-view-recent-items7117 -Node: org-ql-sparse-tree7601 -Node: Queries8401 -Node: Non-sexp query syntax9512 -Node: General predicates11236 -Node: Ancestor/descendant predicates17457 -Node: Date/time predicates18585 -Node: Functions / Macros21673 -Node: Agenda-like views21971 -Node: Listing / acting-on results23376 -Node: Custom predicates29012 -Node: Dynamic block32671 -Node: Links35383 -Node: Tips36070 -Node: Changelog36388 -Node: 07-pre37141 -Node: 06137248 -Node: 0637819 -Node: 05240830 -Node: 05141130 -Node: 0541547 -Node: 04943021 -Node: 04843295 -Node: 04743642 -Node: 04644037 -Node: 04544439 -Node: 04444800 -Node: 04345159 -Node: 04245356 -Node: 04145517 -Node: 0445758 -Node: 03249691 -Node: 03150070 -Node: 0350267 -Node: 02353242 -Node: 02253470 -Node: 02153738 -Node: 0253937 -Node: 0157972 -Node: Notes58073 -Node: Comparison with Org Agenda searches58235 -Node: org-sidebar59107 -Node: License59386 +Node: Contents1764 +Node: Screenshots1887 +Node: Installation2005 +Node: Quelpa2519 +Node: Helm support3047 +Node: Usage3450 +Node: Commands3848 +Node: org-ql-find4353 +Node: org-ql-search4867 +Node: helm-org-ql6561 +Node: org-ql-view6939 +Node: org-ql-view-sidebar7469 +Node: org-ql-view-recent-items7849 +Node: org-ql-sparse-tree8345 +Node: Queries9145 +Node: Non-sexp query syntax10262 +Node: General predicates12021 +Node: Ancestor/descendant predicates18260 +Node: Date/time predicates19388 +Node: Functions / Macros22512 +Node: Agenda-like views22810 +Ref: Function ‘org-ql-block’22972 +Node: Listing / acting-on results24233 +Ref: Caching24441 +Ref: Function ‘org-ql-select’25354 +Ref: Function ‘org-ql-query’27780 +Ref: Macro ‘org-ql’ (deprecated)29554 +Node: Custom predicates29869 +Ref: Macro ‘org-ql-defpred’30093 +Node: Dynamic block33534 +Node: Links36258 +Node: Tips36945 +Node: Changelog37269 +Node: 07-pre38037 +Node: 06238392 +Node: 06138700 +Node: 0639268 +Node: 05242322 +Node: 05142622 +Node: 0543045 +Node: 04944574 +Node: 04844854 +Node: 04745201 +Node: 04645610 +Node: 04546018 +Node: 04446379 +Node: 04346738 +Node: 04246941 +Node: 04147102 +Node: 0447349 +Node: 03251450 +Node: 03151853 +Node: 0352050 +Node: 02355350 +Node: 02255584 +Node: 02155864 +Node: 0256069 +Node: 0160147 +Node: Notes60248 +Node: Comparison with Org Agenda searches60410 +Node: org-sidebar61299 +Node: License61578  End Tag Table