[PATCH] cli: add options --offset and --limit to notmuch show
notmuch search does not output header values. However, when browsing through a large email corpus, it can be time saving to be able to paginate without running notmuch show for each message/thread. Add --offset and --limit options to notmuch show. This is inspired from commit 796b629c3b82 ("cli: add options --offset and --limit to notmuch search"). Update man page, shell completion and add a test case to ensure it works as expected. Cc: Tim Culverhouse Signed-off-by: Robin Jarry --- completion/notmuch-completion.bash | 2 +- completion/zsh/_notmuch| 2 + doc/man1/notmuch-show.rst | 9 notmuch-client.h | 2 + notmuch-show.c | 49 +++--- test/T131-show-limiting.sh | 81 ++ 6 files changed, 138 insertions(+), 7 deletions(-) create mode 100755 test/T131-show-limiting.sh diff --git a/completion/notmuch-completion.bash b/completion/notmuch-completion.bash index 0022b54bff5d..3748846edf83 100644 --- a/completion/notmuch-completion.bash +++ b/completion/notmuch-completion.bash @@ -530,7 +530,7 @@ _notmuch_show() ! $split && case "${cur}" in -*) - local options="--entire-thread= --format= --exclude= --body= --format-version= --part= --verify --decrypt= --include-html ${_notmuch_shared_options}" + local options="--entire-thread= --format= --exclude= --body= --format-version= --part= --verify --decrypt= --include-html --limit= --offset= ${_notmuch_shared_options}" compopt -o nospace COMPREPLY=( $(compgen -W "$options" -- ${cur}) ) ;; diff --git a/completion/zsh/_notmuch b/completion/zsh/_notmuch index e207d90b7202..0bdd7f772a7a 100644 --- a/completion/zsh/_notmuch +++ b/completion/zsh/_notmuch @@ -245,6 +245,8 @@ _notmuch_show() { '--exclude=[respect excluded tags setting]:exclude tags:(true false)' \ '--body=[output body]:output body content:(true false)' \ '--include-html[include text/html parts in the output]' \ +'--limit=[limit the number of displayed results]:limit: ' \ +'--offset=[skip displaying the first N results]:offset: ' \ '*::search term:_notmuch_search_term' } diff --git a/doc/man1/notmuch-show.rst b/doc/man1/notmuch-show.rst index 2c0a0de6ad16..c13d94de0244 100644 --- a/doc/man1/notmuch-show.rst +++ b/doc/man1/notmuch-show.rst @@ -130,6 +130,15 @@ Supported options for **show** include By default, results will be displayed in reverse chronological order, (that is, the newest results will be displayed first). +.. option:: --offset=[-]N + + Skip displaying the first N results. With the leading '-', start + at the Nth result from the end. + +.. option:: --limit=N + + Limit the number of displayed results to N. + .. option:: --verify Compute and report the validity of any MIME cryptographic diff --git a/notmuch-client.h b/notmuch-client.h index 21b49908ae24..1a87240d3c21 100644 --- a/notmuch-client.h +++ b/notmuch-client.h @@ -77,6 +77,8 @@ typedef struct notmuch_show_params { bool output_body; int duplicate; int part; +int offset; +int limit; _notmuch_crypto_t crypto; bool include_html; GMimeStream *out_stream; diff --git a/notmuch-show.c b/notmuch-show.c index ee9efa7448d7..ad31e0123268 100644 --- a/notmuch-show.c +++ b/notmuch-show.c @@ -1159,6 +1159,18 @@ do_show_threaded (void *ctx, notmuch_thread_t *thread; notmuch_messages_t *messages; notmuch_status_t status, res = NOTMUCH_STATUS_SUCCESS; +int i; + +if (params->offset < 0) { + unsigned count; + notmuch_status_t s = notmuch_query_count_threads (query, &count); + if (print_status_query ("notmuch search", query, s)) + return 1; + + params->offset += count; + if (params->offset < 0) + params->offset = 0; +} status = notmuch_query_search_threads (query, &threads); if (print_status_query ("notmuch show", query, status)) @@ -1166,11 +1178,16 @@ do_show_threaded (void *ctx, sp->begin_list (sp); -for (; -notmuch_threads_valid (threads); -notmuch_threads_move_to_next (threads)) { +for (i = 0; +notmuch_threads_valid (threads) && (params->limit < 0 || i < params->offset + params->limit); +notmuch_threads_move_to_next (threads), i++) { thread = notmuch_threads_get (threads); + if (i < params->offset) { + notmuch_thread_destroy (thread); + continue; + } + messages = notmuch_thread_get_toplevel_messages (thread); if (messages == NULL) @@ -1201,6 +1218,18 @@ do_show_unthreaded (void *ctx, notmuch_message_t *message; notmuch_status_t status, res = NOTMUCH_STATUS_SUCCESS; notmuch_bool_t excluded; +int i; + +if (params->offset < 0) { + unsigned count; + notmuch_status_t s = notmuch_query_count_messages (query, &count); + if (print_status_quer
Re: [PATCH] cli: add options --offset and --limit to notmuch show
Robin Jarry, Oct 12, 2022 at 00:19: > + if (print_status_query ("notmuch search", query, s)) I just realized that I copy pasted code from notmuch-search.c and did not updated everything on the way... I'll hold before sending a v2 if there are other remarks or changes required. Cheers all. ___ notmuch mailing list -- notmuch@notmuchmail.org To unsubscribe send an email to notmuch-le...@notmuchmail.org
Re: [PATCH] nmweb: Fix spacing around punctuation in headers
* David Bremner , 2022-10-11 08:20: This is completely untested, but hey, what could possibly go wrong? I've yolo-ed this into production on nmbug.notmuchmail.org. Maybe you can poke at it and see if it looks like you expect. Looks good. Thanks! -- Jakub Wilk ___ notmuch mailing list -- notmuch@notmuchmail.org To unsubscribe send an email to notmuch-le...@notmuchmail.org
Re: Selection bug
Justus Winter writes: > there is a bug in notmuch emacs that is mildly annoying. Sometimes when > I refresh my search buffer, and there are new mails, the topmost > (i.e. newest) message seems to be selected (i.e. with green background), > but in fact if i hit enter (or do any other state changing action like > tagging), notmuch emacs acts on the previously selected message. There > is a visual clue to that, the block cursor is still on that previously > selected message. > > Still, I think it is a bug, and because the green background dominates > the block cursor, I run into this all the time. Hi Justus; That should be hl-line-mode, not sure why it's not tracking your cursor. Can you duplicate the issue in emacs -q? Also, what version of emacs is this? d ___ notmuch mailing list -- notmuch@notmuchmail.org To unsubscribe send an email to notmuch-le...@notmuchmail.org
Selection bug
Moin, there is a bug in notmuch emacs that is mildly annoying. Sometimes when I refresh my search buffer, and there are new mails, the topmost (i.e. newest) message seems to be selected (i.e. with green background), but in fact if i hit enter (or do any other state changing action like tagging), notmuch emacs acts on the previously selected message. There is a visual clue to that, the block cursor is still on that previously selected message. Still, I think it is a bug, and because the green background dominates the block cursor, I run into this all the time. I'll attach a screenshot that shows the bug. This is notmuch straight from Debian bookworm. ii elpa-notmuch 0.37-1 all thread-based email index, search and tagging (emacs interface) ii notmuch0.37-1 amd64thread-based email index, search and tagging Best, Justus signature.asc Description: PGP signature ___ notmuch mailing list -- notmuch@notmuchmail.org To unsubscribe send an email to notmuch-le...@notmuchmail.org
Bug#1021578: notmuch --config='' setup: "g_rename() failed: No such file or directory"
Package: notmuch Version: 0.37-1 Severity: minor I did this by accident[*]: $ notmuch --config='' setup Welcome to notmuch! [...] Your full name [Jakub Wilk]: Your primary email address [jwilk@localhost]: Additional email address [Press 'Enter' if none]: Top-level directory of your email archive [/tmp/tmp.GKlsDiiCm1]: Tags to apply to all new messages (separated by spaces) [ unread inbox]: Tags to exclude when searching messages (separated by spaces) []: Error saving configuration to : Failed to rename file “.IRITT1” to “”: g_rename() failed: No such file or directory Can we have a more helpful error message? Maybe: "notmuch --config='' setup" does not make sense, you fool. Or: --config='' is not supported for "notmuch setup". [*] I had no idea what I was doing. What I really wanted was probably "notmuch --config='' new". -- System Information: Architecture: i386 Versions of packages notmuch depends on: ii libnotmuch5 0.37-1 ii libc6 2.35-3 ii libglib2.0-02.74.0-2 ii libgmime-3.0-0 3.2.13+dfsg-2 ii libtalloc2 2.3.4-1 ii zlib1g 1:1.2.11.dfsg-4.1 -- Jakub Wilk ___ notmuch mailing list -- notmuch@notmuchmail.org To unsubscribe send an email to notmuch-le...@notmuchmail.org
Re: [PATCH] nmweb: Fix spacing around punctuation in headers
Jakub Wilk writes: > --- > devel/notmuch-web/nmweb.py| 2 +- > devel/notmuch-web/templates/show.html | 4 ++-- > 2 files changed, 3 insertions(+), 3 deletions(-) > > This is completely untested, but hey, what could possibly go wrong? > I've yolo-ed this into production on nmbug.notmuchmail.org. Maybe you can poke at it and see if it looks like you expect. d ___ notmuch mailing list -- notmuch@notmuchmail.org To unsubscribe send an email to notmuch-le...@notmuchmail.org
[PATCH] nmweb: Fix spacing around punctuation in headers
--- devel/notmuch-web/nmweb.py| 2 +- devel/notmuch-web/templates/show.html | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) This is completely untested, but hey, what could possibly go wrong? diff --git a/devel/notmuch-web/nmweb.py b/devel/notmuch-web/nmweb.py index 7b555c62..b0d4d5cd 100755 --- a/devel/notmuch-web/nmweb.py +++ b/devel/notmuch-web/nmweb.py @@ -125,7 +125,7 @@ def mailto_addrs(msg,header_name): return '' frm = email.utils.getaddresses([hdr]) - return ','.join(['mailto:%s";>%s ' % ((l, p) if p else (l, l)) for (p, l) in frm]) + return ', '.join(['mailto:%s";>%s' % ((l, p) if p else (l, l)) for (p, l) in frm]) env.globals['mailto_addrs'] = mailto_addrs def link_msg(msg): diff --git a/devel/notmuch-web/templates/show.html b/devel/notmuch-web/templates/show.html index 98d36acc..690f5464 100644 --- a/devel/notmuch-web/templates/show.html +++ b/devel/notmuch-web/templates/show.html @@ -3,10 +3,10 @@ {% set headers = ['Subject', 'Date'] %} {% set addr_headers = ['To', 'Cc', 'From'] %} {% for header in headers: %} -{{header}}:{{m.header(header)|e}} +{{header}}: {{m.header(header)|e}} {% endfor %} {% for header in addr_headers: %} -{{header}}:{{mailto_addrs(m,header)|safe}} +{{header}}: {{mailto_addrs(m,header)|safe}} {% endfor %} {% for part in format_message(m,mid): %}{{ part|safe }}{% endfor %} -- 2.37.2 ___ notmuch mailing list -- notmuch@notmuchmail.org To unsubscribe send an email to notmuch-le...@notmuchmail.org