From 789910346836599a9f9a25acc643aa9e9524f647 Mon Sep 17 00:00:00 2001 From: Bart Trojanowski Date: Wed, 25 Nov 2009 21:03:29 +1900 Subject: [PATCH] [notmuch] [PATCH] notmuch-show: add option to limit display to only matching messages --- b9/fb91f2fe9a4c7b7624e0007c5862c562c147c4 | 159 ++++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 b9/fb91f2fe9a4c7b7624e0007c5862c562c147c4 diff --git a/b9/fb91f2fe9a4c7b7624e0007c5862c562c147c4 b/b9/fb91f2fe9a4c7b7624e0007c5862c562c147c4 new file mode 100644 index 000000000..27b3d05fe --- /dev/null +++ b/b9/fb91f2fe9a4c7b7624e0007c5862c562c147c4 @@ -0,0 +1,159 @@ +Return-Path: +X-Original-To: notmuch@notmuchmail.org +Delivered-To: notmuch@notmuchmail.org +Received: from localhost (localhost [127.0.0.1]) + by olra.theworths.org (Postfix) with ESMTP id C9087431FC2 + for ; Tue, 24 Nov 2009 18:04:27 -0800 (PST) +X-Virus-Scanned: Debian amavisd-new at olra.theworths.org +Received: from olra.theworths.org ([127.0.0.1]) + by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP id vAaZmgqEaqpA for ; + Tue, 24 Nov 2009 18:04:27 -0800 (PST) +Received: from tau.jukie.net (tau.jukie.net [216.239.93.128]) + by olra.theworths.org (Postfix) with ESMTP id AE219431FC0 + for ; Tue, 24 Nov 2009 18:04:26 -0800 (PST) +Received: from localhost.localdomain (oxygen.jukie.net [10.10.10.8]) + by tau.jukie.net (Postfix) with ESMTP id 3A63AC00F84; + Tue, 24 Nov 2009 21:04:26 -0500 (EST) +From: Bart Trojanowski +To: notmuch@notmuchmail.org +Date: Tue, 24 Nov 2009 21:03:29 -0500 +Message-Id: <1259114609-15959-2-git-send-email-bart@jukie.net> +X-Mailer: git-send-email 1.6.4.4.2.gc2f148 +In-Reply-To: <1259114609-15959-1-git-send-email-bart@jukie.net> +References: <1259114609-15959-1-git-send-email-bart@jukie.net> +Cc: Bart Trojanowski +Subject: [notmuch] [PATCH] notmuch-show: add option to limit display to only + matching messages +X-BeenThere: notmuch@notmuchmail.org +X-Mailman-Version: 2.1.12 +Precedence: list +List-Id: "Use and development of the notmuch mail system." + +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +X-List-Received-Date: Wed, 25 Nov 2009 02:04:28 -0000 + +This patch adds support for notmuch show --only-matching-messages +which limits the output to only the top level messages matching +the search terms provides. + +Example: + +$ notmuch search subject:git AND thread:23d99d0f364f93e90e15df8b42eddb5b +thread:23d99d0f364f93e90e15df8b42eddb5b July 31 [4/12] Johan Herland; [RFCv2 00/12] Foreign VCS helper program for CVS repositories (inbox unread) + +Note that in this thread 4 out of 12 messages matched. The default show +behaviour is to show all messages in the thread: + +$ notmuch show subject:git AND thread:23d99d0f364f93e90e15df8b42eddb5b | grep 'message{' | wc -l +12 + +With the --only-matching-messages option the output is limited to the +matching messages only: + +$ notmuch show --only-matching-messages subject:git AND thread:23d99d0f364f93e90e15df8b42eddb5b | grep 'message{' | wc -l +4 + +Signed-off-by: Bart Trojanowski +--- + notmuch-show.c | 48 +++++++++++++++++++++++++++++++++++++----------- + notmuch.c | 7 +++++++ + 2 files changed, 44 insertions(+), 11 deletions(-) + +diff --git a/notmuch-show.c b/notmuch-show.c +index edebaca..8599c6c 100644 +--- a/notmuch-show.c ++++ b/notmuch-show.c +@@ -211,6 +211,24 @@ notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[])) + notmuch_thread_t *thread; + notmuch_messages_t *messages; + char *query_string; ++ int only_matching = 0; ++ int i; ++ ++ for (i = 0; i < argc && argv[i][0] == '-'; i++) { ++ if (strcmp (argv[i], "--") == 0) { ++ i++; ++ break; ++ } ++ if (strcmp(argv[i], "--only-matching-messages") == 0) { ++ only_matching = 1; ++ } else { ++ fprintf (stderr, "Unrecognized option: %s\n", argv[i]); ++ return 1; ++ } ++ } ++ ++ argc -= i; ++ argv += i; + + config = notmuch_config_open (ctx, NULL, NULL); + if (config == NULL) +@@ -238,21 +256,29 @@ notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[])) + return 1; + } + +- for (threads = notmuch_query_search_threads (query); +- notmuch_threads_has_more (threads); +- notmuch_threads_advance (threads)) +- { +- thread = notmuch_threads_get (threads); ++ if (only_matching) { ++ messages = notmuch_query_search_messages (query); ++ if (messages == NULL) ++ INTERNAL_ERROR ("No messages.\n"); ++ show_messages (ctx, messages, 0); + +- messages = notmuch_thread_get_toplevel_messages (thread); ++ } else { ++ for (threads = notmuch_query_search_threads (query); ++ notmuch_threads_has_more (threads); ++ notmuch_threads_advance (threads)) ++ { ++ thread = notmuch_threads_get (threads); + +- if (messages == NULL) +- INTERNAL_ERROR ("Thread %s has no toplevel messages.\n", +- notmuch_thread_get_thread_id (thread)); ++ messages = notmuch_thread_get_toplevel_messages (thread); + +- show_messages (ctx, messages, 0); ++ if (messages == NULL) ++ INTERNAL_ERROR ("Thread %s has no toplevel messages.\n", ++ notmuch_thread_get_thread_id (thread)); ++ ++ show_messages (ctx, messages, 0); + +- notmuch_thread_destroy (thread); ++ notmuch_thread_destroy (thread); ++ } + } + + notmuch_query_destroy (query); +diff --git a/notmuch.c b/notmuch.c +index f45b692..a817ae3 100644 +--- a/notmuch.c ++++ b/notmuch.c +@@ -177,6 +177,13 @@ command_t commands[] = { + "\t\t(all replies to a particular message appear immediately\n" + "\t\tafter that message in date order).\n" + "\n" ++ "\t\tSupported options for show include:\n" ++ "\n" ++ "\t\t--only-matching-messages\n" ++ "\n" ++ "\t\t\tUsing this option will prevent output of any messages\n" ++ "\t\t\tthat do not match the search terms.\n" ++ "\n" + "\t\tThe output format is plain-text, with all text-content\n" + "\t\tMIME parts decoded. Various components in the output,\n" + "\t\t('message', 'header', 'body', 'attachment', and MIME 'part')\n" +-- +1.6.4.4.2.gc2f148 + -- 2.26.2