diff --git a/README.org b/README.org index 3d2f75e..bd34ecf 100644 --- a/README.org +++ b/README.org @@ -115,7 +115,7 @@ These commands jump to a heading selected using Emacs's built-in completion faci - ~org-ql-find-in-agenda~ searches in ~(org-agenda-files)~. - ~org-ql-find-in-org-directory~ searches in ~org-directory~. -Note that these commands are compatible with [[https://github.com/oantolin/embark][Embark]]: the ~embark-act~ command can be called on a completion candidate (i.e. a search result) to act on it immediately, without having to visit the entry in its source Org buffer. +Note that these commands are compatible with [[https://github.com/oantolin/embark][Embark]]: the ~embark-act~ command can be called on a completion candidate (i.e. a search result) to act on it immediately, without having to visit the entry in its source Org buffer, and ~embark-export~ may be called to show the results in an ~org-ql-view~ buffer. [[images/org-ql-find.png]] @@ -558,6 +558,7 @@ Simple links may also be written manually in either sexp or non-sexp form, like: *Additions* + Function ~org-ql-completing-read~, used by command ~org-ql-find~, now specifies the completion category as ~org-heading~, providing compatibility with [[https://github.com/oantolin/embark][Embark]]. (This is a powerful feature, as it means any ~org-ql-find~ result can be acted on from inside the search results with Embark, which provides common actions from Org Agenda and Org speed keys bindings.) ([[https://github.com/alphapapa/org-ql/issues/299][#299]]. Thanks to [[https://github.com/oantolin][Omar Antolín Camarena]], [[https://github.com/minad][Daniel Mendler]], and [[https://github.com/akirak][Akira Komamura]].) + - Command ~org-ql-completing-read-export~, bound to ~C-c C-e~ or ~embark-export~ while in an ~org-ql-completing-read~ session, exits and shows an ~org-ql-view~ buffer for the current search. + Command ~org-ql-find~ may be called in an ~org-agenda~ or ~org-ql-view~ buffer to search the buffers which contributed to the agenda/view buffer. + Command ~org-ql-find-path~, which searches outline paths in the current buffer. + Command ~org-ql-open-link~, which finds links in entries matching the given query, and opens the selected one with ~org-open-at-point~. (This is helpful when a collection of links are kept in Org files: rather than having to first visit the entry containing the desired link, then locate it within the entry, and then open it, the user can simply select the link and open it directly.) diff --git a/org-ql-completing-read.el b/org-ql-completing-read.el index 9c4c044..a8053af 100644 --- a/org-ql-completing-read.el +++ b/org-ql-completing-read.el @@ -26,6 +26,16 @@ (require 'org-ql) +;;;; Variables + +(defvar-keymap org-ql-completing-read-map + :doc "Active during `org-ql-completing-read' sessions." + "C-c C-e" #'org-ql-completing-read-export) + +;; `embark-collect' doesn't work for `org-ql-completing-read', so remap +;; it to `embark-export' (which `keymap-set', et al doesn't allow). +(define-key org-ql-completing-read-map [remap embark-collect] 'embark-export) + ;;;; Customization (defgroup org-ql-completing-read nil @@ -114,6 +124,11 @@ value, or nil." ;;;;; Completing read +(defun org-ql-completing-read-export () + "Show `org-ql-view' buffer for current `org-ql-completing-read'-based search." + (interactive) + (user-error "Not in an `org-ql-completing-read' session")) + ;;;###autoload (cl-defun org-ql-completing-read (buffers-files &key query-prefix query-filter @@ -322,7 +337,23 @@ single predicate)." (mapc #'org-ql--ensure-buffer buffers-files) (let* ((completion-styles '(org-ql-completing-read)) (completion-styles-alist (list (list 'org-ql-completing-read #'try #'all "Org QL Find"))) - (selected (completing-read prompt #'collection nil t))) + (selected + (minibuffer-with-setup-hook + (lambda () + (use-local-map (make-composed-keymap org-ql-completing-read-map (current-local-map)))) + (cl-letf* (((symbol-function 'org-ql-completing-read-export) + (lambda () + (interactive) + (run-at-time 0 nil + #'org-ql-search + buffers-files + (minibuffer-contents-no-properties)) + (if (fboundp 'minibuffer-quit-recursive-edit) + (minibuffer-quit-recursive-edit) + (abort-recursive-edit)))) + ((symbol-function 'embark-export) + (symbol-function 'org-ql-completing-read-export))) + (completing-read prompt #'collection nil t))))) ;; (debug-message "SELECTED:%S KEYS:%S" selected (hash-table-keys table)) (or (gethash selected table) ;; If there are completions in the table, but none of them exactly match the user input diff --git a/org-ql.info b/org-ql.info index ecc4d75..430d5a9 100644 --- a/org-ql.info +++ b/org-ql.info @@ -237,7 +237,9 @@ completion facilities with an Org QL query: Note that these commands are compatible with Embark (https://github.com/oantolin/embark): the ‘embark-act’ command can be called on a completion candidate (i.e. a search result) to act on it -immediately, without having to visit the entry in its source Org buffer. +immediately, without having to visit the entry in its source Org buffer, +and ‘embark-export’ may be called to show the results in an +‘org-ql-view’ buffer.  File: README.info, Node: org-ql-open-link, Next: org-ql-refile, Prev: org-ql-find, Up: Commands @@ -1076,6 +1078,10 @@ File: README.info, Node: 08-pre, Next: 074, Up: Changelog Thanks to Omar Antolín Camarena (https://github.com/oantolin), Daniel Mendler (https://github.com/minad), and Akira Komamura (https://github.com/akirak).) + • Command ‘org-ql-completing-read-export’, bound to ‘C-c C-e’ or + ‘embark-export’ while in an ‘org-ql-completing-read’ session, + exits and shows an ‘org-ql-view’ buffer for the current + search. • Command ‘org-ql-find’ may be called in an ‘org-agenda’ or ‘org-ql-view’ buffer to search the buffers which contributed to the agenda/view buffer. @@ -1872,68 +1878,68 @@ Node: Helm support3142 Node: Usage3545 Node: Commands3943 Node: org-ql-find4408 -Node: org-ql-open-link5226 -Node: org-ql-refile6081 -Node: org-ql-search6409 -Node: helm-org-ql8340 -Node: org-ql-view8718 -Node: org-ql-view-sidebar9248 -Node: org-ql-view-recent-items9628 -Node: org-ql-sparse-tree10124 -Node: Queries10924 -Node: Non-sexp query syntax12041 -Node: General predicates13800 -Node: Ancestor/descendant predicates20725 -Node: Date/time predicates21853 -Node: Functions / Macros24977 -Node: Agenda-like views25275 -Ref: Function org-ql-block25437 -Node: Listing / acting-on results26698 -Ref: Caching26906 -Ref: Function org-ql-select27819 -Ref: Function org-ql-query30245 -Ref: Macro org-ql (deprecated)32019 -Node: Custom predicates32334 -Ref: Macro org-ql-defpred32558 -Node: Dynamic block35999 -Node: Links38723 -Node: Tips39410 -Node: Changelog39734 -Node: 08-pre40558 -Node: 07443031 -Node: 07343258 -Node: 07243990 -Node: 07144909 -Node: 0745718 -Node: 06348642 -Node: 06249173 -Node: 06149478 -Node: 0650046 -Node: 05253102 -Node: 05153404 -Node: 0553829 -Node: 04955360 -Node: 04855642 -Node: 04755991 -Node: 04656400 -Node: 04556808 -Node: 04457169 -Node: 04357528 -Node: 04257731 -Node: 04157892 -Node: 0458139 -Node: 03262240 -Node: 03162643 -Node: 0362840 -Node: 02366140 -Node: 02266374 -Node: 02166654 -Node: 0266859 -Node: 0170937 -Node: Notes71038 -Node: Comparison with Org Agenda searches71200 -Node: org-sidebar72089 -Node: License72368 +Node: org-ql-open-link5316 +Node: org-ql-refile6171 +Node: org-ql-search6499 +Node: helm-org-ql8430 +Node: org-ql-view8808 +Node: org-ql-view-sidebar9338 +Node: org-ql-view-recent-items9718 +Node: org-ql-sparse-tree10214 +Node: Queries11014 +Node: Non-sexp query syntax12131 +Node: General predicates13890 +Node: Ancestor/descendant predicates20815 +Node: Date/time predicates21943 +Node: Functions / Macros25067 +Node: Agenda-like views25365 +Ref: Function org-ql-block25527 +Node: Listing / acting-on results26788 +Ref: Caching26996 +Ref: Function org-ql-select27909 +Ref: Function org-ql-query30335 +Ref: Macro org-ql (deprecated)32109 +Node: Custom predicates32424 +Ref: Macro org-ql-defpred32648 +Node: Dynamic block36089 +Node: Links38813 +Node: Tips39500 +Node: Changelog39824 +Node: 08-pre40648 +Node: 07443372 +Node: 07343599 +Node: 07244331 +Node: 07145250 +Node: 0746059 +Node: 06348983 +Node: 06249514 +Node: 06149819 +Node: 0650387 +Node: 05253443 +Node: 05153745 +Node: 0554170 +Node: 04955701 +Node: 04855983 +Node: 04756332 +Node: 04656741 +Node: 04557149 +Node: 04457510 +Node: 04357869 +Node: 04258072 +Node: 04158233 +Node: 0458480 +Node: 03262581 +Node: 03162984 +Node: 0363181 +Node: 02366481 +Node: 02266715 +Node: 02166995 +Node: 0267200 +Node: 0171278 +Node: Notes71379 +Node: Comparison with Org Agenda searches71541 +Node: org-sidebar72430 +Node: License72709  End Tag Table