[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/consult-recoll 8e45c4d3df 42/50: new feature: inline sn
From: |
ELPA Syncer |
Subject: |
[elpa] externals/consult-recoll 8e45c4d3df 42/50: new feature: inline snippets |
Date: |
Sat, 6 Aug 2022 18:57:43 -0400 (EDT) |
branch: externals/consult-recoll
commit 8e45c4d3df0b5bd291d91e045354437cc0b9a74e
Author: jao <jao@gnu.org>
Commit: jao <jao@gnu.org>
new feature: inline snippets
---
consult-recoll.el | 51 +++++++++++++++++++++++++++++----------
readme.org | 71 +++++++++++++++++++++++++++++++++++++++----------------
2 files changed, 88 insertions(+), 34 deletions(-)
diff --git a/consult-recoll.el b/consult-recoll.el
index d885ac83e4..50ba2e5a82 100644
--- a/consult-recoll.el
+++ b/consult-recoll.el
@@ -54,16 +54,25 @@
(const :tag "All terms" ("-a"))
(list string)))
-(defcustom consult-recoll-open-fn #'find-file
+(defcustom consult-recoll-open-fn nil
"Default function used to open candidate URLs.
-It receives a single argument, the full path to the file to open.
-See also `consult-recoll-open-fns'"
- :type 'function)
+It receives the full path to the file to open and (if
+`consult-recoll-inline-snippets' is set, a page number for the
+snippet at hand. If set to nil, find-file is used. See also
+`consult-recoll-open-fns'"
+ :type '(choice (const nil) function))
(defcustom consult-recoll-open-fns ()
- "Alist mapping mime types to functions to open a selected candidate."
+ "Alist mapping mime types to functions to open a selected candidate.
+If you are setting `consult-list-snippets' to t, these functions
+will be called with two arguments (a file path and a page
+number), otherwise just with one."
:type '(alist :key-type string :value-type function))
+(defcustom consult-recoll-inline-snippets nil
+ "Show snippets as completion candidates in the minibuffer."
+ :type 'boolean)
+
(defcustom consult-recoll-group-by-mime t
"When set, list search results grouped by mime type."
:type 'boolean)
@@ -109,21 +118,28 @@ Set to nil to use the default 'title (path)' format."
(defsubst consult-recoll--candidate-url (candidate)
(get-text-property 0 'url candidate))
+(defsubst consult-recoll--candidate-page (candidate)
+ (get-text-property 0 'page candidate))
+
(defsubst consult-recoll--candidate-index (candidate)
(get-text-property 0 'index candidate))
(defsubst consult-recoll--snippets (&optional candidate)
(get-text-property 0 'snippets (or candidate consult-recoll--current)))
+(defsubst consult-recoll--find-file (file &optional _page) (find-file file))
+
(defun consult-recoll--open (candidate)
"Open file of corresponding completion CANDIDATE."
(when candidate
(let ((url (consult-recoll--candidate-url candidate))
- (opener (alist-get (consult-recoll--candidate-mime candidate)
- consult-recoll-open-fns
- (or consult-recoll-open-fn #'find-file)
- nil 'string=)))
- (funcall opener url))))
+ (open (alist-get (consult-recoll--candidate-mime candidate)
+ consult-recoll-open-fns
+ (or consult-recoll-open-fn
'consult-recoll--find-file)
+ nil 'string=)))
+ (if consult-recoll-inline-snippets
+ (funcall open url (consult-recoll--candidate-page candidate))
+ (funcall open url)))))
(defun consult-recoll--transformer (str)
"Decode STR, as returned by recollq."
@@ -141,8 +157,16 @@ Set to nil to use the default 'title (path)' format."
'index idx)))
(setq consult-recoll--current cand)
nil))
- ((string= "/SNIPPETS" str) consult-recoll--current)
- ((string= "SNIPPETS" str) nil)
+ ((string= "/SNIPPETS" str)
+ (and (not consult-recoll-inline-snippets) consult-recoll--current))
+ ((string= "SNIPPETS" str)
+ (and consult-recoll-inline-snippets consult-recoll--current))
+ ((and consult-recoll-inline-snippets consult-recoll--current)
+ (when-let* ((page (and (string-match "^\\([0-9]+\\) :" str)
+ (match-string 1 str)))
+ (pageno (and page (string-to-number page)))
+ (props (text-properties-at 0 consult-recoll--current)))
+ (apply #'propertize (concat " " str) 'page pageno props)))
(consult-recoll--current
(let ((snippets (concat (consult-recoll--snippets) "\n" str)))
(setq consult-recoll--current
@@ -191,7 +215,8 @@ If given, use INITIAL as the starting point of the query."
:require-match t
:lookup #'consult--lookup-member
:sort nil
- :state #'consult-recoll--preview
+ :state (and (not consult-recoll-inline-snippets)
+ #'consult-recoll--preview)
:group (and consult-recoll-group-by-mime
#'consult-recoll--group)
:initial (consult--async-split-initial initial)
diff --git a/readme.org b/readme.org
index d5d83adc44..67c40ba561 100644
--- a/readme.org
+++ b/readme.org
@@ -21,8 +21,6 @@ text in the found document actually matching the query.
This package provides an emacs interface to perform recoll queries, and
display its results, via [[https://github.com/minad/consult][consult]].
-[[./consult-recoll.png]]
-
* Usage
** Searching
@@ -65,18 +63,21 @@ display its results, via
[[https://github.com/minad/consult][consult]].
** Displaying results
- For each matching result, ~consult-recoll~ retrieves its title, full file
- name and mime type, and shows, by default, a line with the first two in
- the minibuffer, using the customizable faces ~consult-recoll-title-face~
and
- ~consult-recoll-url-face~. You can provide your own formatting function
- (perhaps stripping common prefixes of the file name, or displaying also
- the MIME) as the value of the customizable variable
- ~consult-recoll-format-candidate~.
+ For each matching result, ~consult-recoll~ retrieves its title, full file
+ name and mime type, and shows, by default, a line with the first two in the
+ minibuffer, using the customizable faces ~consult-recoll-title-face~ and
+ ~consult-recoll-url-face~. You can provide your own formatting function
+ (perhaps stripping common prefixes of the file name, or displaying also the
+ MIME) as the value of the customizable variable
+ ~consult-recoll-format-candidate~.
+
+ By default, ~consult-recoll~ uses consult's
[[https://github.com/minad/consult#live-previews][live previews]] to show, for
each
+ selected candidate hit, a buffer with further information, including
+ snippets of the file (when provided by recoll). The title, path and mime
+ type of the document are also shown in previews.
- ~consult-recoll~ also uses consult's
[[https://github.com/minad/consult#live-previews][live previews]] to show, for
each
- selected candidate hit, a buffer with further information, including
- snippets of the file (when provided by recoll). The title, path and mime
- type of the document are also shown in previews.
+ See [[#opening-results][Opening search results]] below for ways of
customizing how Emacs will
+ open selected results.
*** Tip: formatting results list
As mentioned, one can use ~consult-recoll-format-candidate~ to customize
how
@@ -98,17 +99,45 @@ display its results, via
[[https://github.com/minad/consult][consult]].
(setq consult-recoll-format-candidate #'jao-recoll-format)
#+end_src
+*** Tip: displaying snippets in results list
+ Instead of relying on a separate preview buffer to display snippets, you
+ can set ~consult-recoll-inline-snippets~ to ~t~ to show them in the
minibuffer,
+ as individual candidates.
*** Tip: disabling mime type groups
By default, results are listed grouped by their mime type. You can
disable grouping by setting the customizable variable
~consult-recoll-group-by-mime~ to ~nil~.
+ [[./consult-recoll.png]]
+
** Opening search results
- :PROPERTIES:
- :CUSTOM_ID: opening-results
- :END:
-
- When a search result candidate is selected, its MIME type is used to
- look up a function to open its associated file in the customizable variable
- ~consult-recoll-open-fns~. If no entry is found, consult-recoll uses the
- value of ~consult-open-fn~ as a default.
+ :PROPERTIES:
+ :CUSTOM_ID: opening-results
+ :END:
+
+ When a search result candidate is selected, its MIME type is used to look
+ up a function to open its associated file in the customizable variable
+ ~consult-recoll-open-fns~. If no entry is found, consult-recoll uses the
+ value of ~consult-open-fn~ as a default.
+
+ If ~consult-recoll-inline-snippets~ is set, the functions above take two
+ arguments: the URL of the file to open and, if present, the snippet page
+ number (or ~nil~ if it is not available, e.g., because the selected
candidate
+ is the one showing the document data)
+
+*** Tip: PDF open with external viewer
+
+ For instance, if you want to use ~zathura~ to open PDF documents, you could
+ define an elisp helper like:
+
+ #+begin_src emacs-lisp
+ (defun open-pdf/zathura (file &optional page)
+ (shell-command (format "zathura %s -P %s" file (or page 1))))
+ #+end_src
+
+ and then add it to ~consult-recoll-open-fns~:
+
+ #+begin_src emacs-lisp
+ (add-to-list 'consult-recoll-open-fns
+ '("application/pdf" . open-pdf/zathura))
+ #+end_src
- [elpa] externals/consult-recoll 57f2a5552f 31/50: Version bump, (continued)
- [elpa] externals/consult-recoll 57f2a5552f 31/50: Version bump, ELPA Syncer, 2022/08/06
- [elpa] externals/consult-recoll 0105066d19 32/50: readme nits and screenshot, ELPA Syncer, 2022/08/06
- [elpa] externals/consult-recoll 370a31d1c4 09/50: MELPA review, ELPA Syncer, 2022/08/06
- [elpa] externals/consult-recoll 357654bedd 04/50: customisable formatter and candidate openers, ELPA Syncer, 2022/08/06
- [elpa] externals/consult-recoll 1b21fa157b 16/50: version bump, ELPA Syncer, 2022/08/06
- [elpa] externals/consult-recoll c824a2fea2 21/50: fix for C-u consult-recoll, ELPA Syncer, 2022/08/06
- [elpa] externals/consult-recoll 8ba4d4b9b8 39/50: hide cursor in non-selected preview windows, ELPA Syncer, 2022/08/06
- [elpa] externals/consult-recoll 3399c32322 23/50: readme, ELPA Syncer, 2022/08/06
- [elpa] externals/consult-recoll a2ee98e057 45/50: version bump, ELPA Syncer, 2022/08/06
- [elpa] externals/consult-recoll 91ff9793b5 25/50: readme improvements, ELPA Syncer, 2022/08/06
- [elpa] externals/consult-recoll 8e45c4d3df 42/50: new feature: inline snippets,
ELPA Syncer <=
- [elpa] externals/consult-recoll eab09d7fe6 44/50: documentation nits (section levels), ELPA Syncer, 2022/08/06
- [elpa] externals/consult-recoll d9bb5e191e 33/50: docstring nit, ELPA Syncer, 2022/08/06
- [elpa] externals/consult-recoll 42dea1d40f 18/50: consult-recoll: prefix argument to ask for initial input, ELPA Syncer, 2022/08/06
- [elpa] externals/consult-recoll 89457fe055 37/50: Revert "back to the previous regexp, it's more precise in the common case", ELPA Syncer, 2022/08/06
- [elpa] externals/consult-recoll c57d3e7913 50/50: FSF copyright transfer and .gitignore, ELPA Syncer, 2022/08/06