* [notmuch-emacs] Paginate user's saved search results - proposed patch
@ 2018-11-02 14:00 Antoine R. Dumont
0 siblings, 0 replies; only message in thread
From: Antoine R. Dumont @ 2018-11-02 14:00 UTC (permalink / raw)
To: notmuch
[-- Attachment #1.1: Type: text/plain, Size: 7 bytes --]
Hello,
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: optional pagination for user's saved search --]
[-- Type: text/x-diff, Size: 5566 bytes --]
diff --git a/emacs/notmuch-jump.el b/emacs/notmuch-jump.el
index 3e20b8c7..5cc6e42e 100644
--- a/emacs/notmuch-jump.el
+++ b/emacs/notmuch-jump.el
@@ -54,11 +54,12 @@ fast way to jump to a saved search from anywhere in Notmuch."
(case (plist-get saved-search :sort-order)
(newest-first nil)
(oldest-first t)
- (otherwise (default-value 'notmuch-search-oldest-first)))))
+ (otherwise (default-value 'notmuch-search-oldest-first))))
+ (limit (plist-get saved-search :limit)))
(push (list key name
(if (eq (plist-get saved-search :search-type) 'tree)
`(lambda () (notmuch-tree ',query))
- `(lambda () (notmuch-search ',query ',oldest-first))))
+ `(lambda () (notmuch-search ',query ',oldest-first nil nil nil ',limit))))
action-map)))))
(setq action-map (nreverse action-map))
diff --git a/emacs/notmuch.el b/emacs/notmuch.el
index 1f453357..078eae45 100644
--- a/emacs/notmuch.el
+++ b/emacs/notmuch.el
@@ -189,6 +189,8 @@ there will be called at other points of notmuch execution."
(define-key map "+" 'notmuch-search-add-tag)
(define-key map (kbd "RET") 'notmuch-search-show-thread)
(define-key map "Z" 'notmuch-tree-from-search-current-query)
+ (define-key map (kbd "M-n") 'notmuch-search-query-result-next)
+ (define-key map (kbd "M-p") 'notmuch-search-query-result-previous)
map)
"Keymap for \"notmuch search\" buffers.")
(fset 'notmuch-search-mode-map notmuch-search-mode-map)
@@ -383,6 +385,8 @@ Complete list of currently available key bindings:
(make-local-variable 'notmuch-search-oldest-first)
(make-local-variable 'notmuch-search-target-thread)
(make-local-variable 'notmuch-search-target-line)
+ (make-local-variable 'notmuch-search-query-limit)
+ (make-local-variable 'notmuch-search-query-offset)
(setq notmuch-buffer-refresh-function #'notmuch-search-refresh-view)
(set (make-local-variable 'scroll-preserve-screen-position) t)
(add-to-invisibility-spec (cons 'ellipsis t))
@@ -959,7 +963,7 @@ PROMPT is the string to prompt with."
(put 'notmuch-search 'notmuch-doc "Search for messages.")
;;;###autoload
-(defun notmuch-search (&optional query oldest-first target-thread target-line no-display)
+(defun notmuch-search (&optional query oldest-first target-thread target-line no-display limit offset)
"Display threads matching QUERY in a notmuch-search buffer.
If QUERY is nil, it is read interactively from the minibuffer.
@@ -973,6 +977,8 @@ Other optional parameters are used as follows:
NO-DISPLAY: Do not try to foreground the search results buffer. If it is
already foregrounded i.e. displayed in a window, this has no
effect, meaning the buffer will remain visible.
+ LIMIT: Try to limit the search to a given size. Defaults to no limit.
+ OFFSET: Start from offset. Defaults to nil
When called interactively, this will prompt for a query and use
the configured default sort order."
@@ -994,6 +1000,8 @@ the configured default sort order."
(set 'buffer-undo-list t)
(set 'notmuch-search-query-string query)
(set 'notmuch-search-oldest-first oldest-first)
+ (set 'notmuch-search-query-limit limit)
+ (set 'notmuch-search-query-offset (if offset offset 0))
(set 'notmuch-search-target-thread target-thread)
(set 'notmuch-search-target-line target-line)
(notmuch-tag-clear-cache)
@@ -1011,6 +1019,12 @@ the configured default sort order."
(if oldest-first
"--sort=oldest-first"
"--sort=newest-first")
+ (if limit
+ (format "--limit=%s" limit)
+ "")
+ (if offset
+ (format "--offset=%s" offset)
+ "")
query))
;; Use a scratch buffer to accumulate partial output.
;; This buffer will be killed by the sentinel, which
@@ -1021,6 +1035,22 @@ the configured default sort order."
(set-process-query-on-exit-flag proc nil))))
(run-hooks 'notmuch-search-hook)))
+(defun notmuch-search-query-result-next ()
+ "Trigger the next results page for the current query."
+ (interactive)
+ (when notmuch-search-query-offset
+ (setq notmuch-search-query-offset
+ (+ notmuch-search-query-offset notmuch-search-query-limit)))
+ (notmuch-search-refresh-view))
+
+(defun notmuch-search-query-result-previous ()
+ "Trigger the previous results page for the current query."
+ (interactive)
+ (when (and notmuch-search-query-offset (> notmuch-search-query-offset 0))
+ (setq notmuch-search-query-offset
+ (max 0 (- notmuch-search-query-offset notmuch-search-query-limit))))
+ (notmuch-search-refresh-view))
+
(defun notmuch-search-refresh-view ()
"Refresh the current view.
@@ -1033,9 +1063,11 @@ same relative position within the new buffer."
(let ((target-line (line-number-at-pos))
(oldest-first notmuch-search-oldest-first)
(target-thread (notmuch-search-find-thread-id 'bare))
- (query notmuch-search-query-string))
+ (query notmuch-search-query-string)
+ (limit notmuch-search-query-limit)
+ (offset notmuch-search-query-offset))
;; notmuch-search erases the current buffer.
- (notmuch-search query oldest-first target-thread target-line t)
+ (notmuch-search query oldest-first target-thread target-line t limit offset)
(goto-char (point-min))))
(defun notmuch-search-toggle-order ()
[-- Attachment #1.3: Type: text/plain, Size: 1759 bytes --]
Here is a patch (against current master - 7f726c6e) to allow user
saved-search query pagination. This is an opt-in option to be defined
on per saved-search basis.
To opt-in, define a :limit option on a saved-search.
If not defined, the current behavior (no limit) is kept.
# example
```
(custom-set-variables'(notmuch-saved-searches
'((:name "inbox"
:query "tag:inbox"
:count-query "tag:inbox"
:sort-order 'newest-first
:limit 30
:key "i")
(:name "unread"
:query "tag:inbox and tag:unread"
:count-query "tag:inbox and tag:unread"
:sort-order 'newest-first
:key "u"))))
```
Here the 'unread' saved-search will work as usual.
The 'inbox' one will paginate results by page of 30.
The user can then use M-n to move forward or M-p to move backward in
results.
What this patch does not do:
- no new buttons in the search page view.
- no documentation patch about this option on saved-search
Note:
- Relevant threads:
- id:1327692900-22926-1-git-send-email-jani@nikula.org (from 7 years
ago)
- The state part was unclear, j4ni's old diff on that matter unstuck
me http://paste.debian.net/1050094/
- https://notmuchmail.org/pipermail/notmuch/2017/024495.html
- https://notmuchmail.org/pipermail/notmuch/2017/024496.html
- https://notmuchmail.org/pipermail/notmuch/2017/024497.html
- notmuchmail.org is down (some part at least, so i cannot download the
archive, convert and reply to the right thread, sorry)
Thanks to bremner and j4ni for their help on irc
(pointers/answers/help).
Cheers,
--
tony / @ardumont
-----------------------------------------------------------------
gpg fingerprint BF00 203D 741A C9D5 46A8 BE07 52E2 E984 0D10 C3B8
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2018-11-02 14:00 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-11-02 14:00 [notmuch-emacs] Paginate user's saved search results - proposed patch Antoine R. Dumont
Code repositories for project(s) associated with this public inbox
https://yhetil.org/notmuch.git/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).