mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +01:00
notmuch-show.c: add an option for messages to be returned unthreaded
This adds a --unthreaded option to notmuch show to tell it to return the matching messages in an unthreaded order (so just by date). To make it easier for users, in particular for notmuch-tree.el, we output each message with the same "nesting" as if it were an entire thread in its own right. amended by db: s/status= /status = /
This commit is contained in:
parent
f2a85904f1
commit
f140bbcb40
1 changed files with 55 additions and 6 deletions
|
@ -1066,7 +1066,7 @@ do_show_single (void *ctx,
|
|||
|
||||
/* Formatted output of threads */
|
||||
static int
|
||||
do_show (void *ctx,
|
||||
do_show_threaded (void *ctx,
|
||||
notmuch_query_t *query,
|
||||
const notmuch_show_format_t *format,
|
||||
sprinter_t *sp,
|
||||
|
@ -1107,6 +1107,50 @@ do_show (void *ctx,
|
|||
return res != NOTMUCH_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static int
|
||||
do_show_unthreaded (void *ctx,
|
||||
notmuch_query_t *query,
|
||||
const notmuch_show_format_t *format,
|
||||
sprinter_t *sp,
|
||||
notmuch_show_params_t *params)
|
||||
{
|
||||
notmuch_messages_t *messages;
|
||||
notmuch_message_t *message;
|
||||
notmuch_status_t status, res = NOTMUCH_STATUS_SUCCESS;
|
||||
notmuch_bool_t excluded;
|
||||
|
||||
status = notmuch_query_search_messages (query, &messages);
|
||||
if (print_status_query ("notmuch show", query, status))
|
||||
return 1;
|
||||
|
||||
sp->begin_list (sp);
|
||||
|
||||
for (;
|
||||
notmuch_messages_valid (messages);
|
||||
notmuch_messages_move_to_next (messages)) {
|
||||
sp->begin_list (sp);
|
||||
sp->begin_list (sp);
|
||||
|
||||
message = notmuch_messages_get (messages);
|
||||
|
||||
notmuch_message_set_flag (message, NOTMUCH_MESSAGE_FLAG_MATCH, TRUE);
|
||||
excluded = notmuch_message_get_flag (message, NOTMUCH_MESSAGE_FLAG_EXCLUDED);
|
||||
|
||||
if (!excluded || !params->omit_excluded) {
|
||||
status = show_message (ctx, format, sp, message, 0, params);
|
||||
if (status && !res)
|
||||
res = status;
|
||||
} else {
|
||||
sp->null (sp);
|
||||
}
|
||||
notmuch_message_destroy (message);
|
||||
sp->end (sp);
|
||||
sp->end (sp);
|
||||
}
|
||||
sp->end (sp);
|
||||
return res;
|
||||
}
|
||||
|
||||
enum {
|
||||
NOTMUCH_FORMAT_NOT_SPECIFIED,
|
||||
NOTMUCH_FORMAT_JSON,
|
||||
|
@ -1168,6 +1212,7 @@ notmuch_show_command (notmuch_config_t *config, int argc, char *argv[])
|
|||
bool exclude = true;
|
||||
bool entire_thread_set = false;
|
||||
bool single_message;
|
||||
bool unthreaded = FALSE;
|
||||
|
||||
notmuch_opt_desc_t options[] = {
|
||||
{ .opt_keyword = &format, .name = "format", .keywords =
|
||||
|
@ -1181,6 +1226,7 @@ notmuch_show_command (notmuch_config_t *config, int argc, char *argv[])
|
|||
{ .opt_bool = &exclude, .name = "exclude" },
|
||||
{ .opt_bool = ¶ms.entire_thread, .name = "entire-thread",
|
||||
.present = &entire_thread_set },
|
||||
{ .opt_bool = &unthreaded, .name = "unthreaded" },
|
||||
{ .opt_int = ¶ms.part, .name = "part" },
|
||||
{ .opt_keyword = (int *) (¶ms.crypto.decrypt), .name = "decrypt",
|
||||
.keyword_no_arg_value = "true", .keywords =
|
||||
|
@ -1317,7 +1363,10 @@ notmuch_show_command (notmuch_config_t *config, int argc, char *argv[])
|
|||
params.omit_excluded = false;
|
||||
}
|
||||
|
||||
ret = do_show (config, query, formatter, sprinter, ¶ms);
|
||||
if (unthreaded)
|
||||
ret = do_show_unthreaded (config, query, formatter, sprinter, ¶ms);
|
||||
else
|
||||
ret = do_show_threaded (config, query, formatter, sprinter, ¶ms);
|
||||
}
|
||||
|
||||
DONE:
|
||||
|
|
Loading…
Reference in a new issue