unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
From: Mark Walters <markwalters1009@gmail.com>
To: notmuch@notmuchmail.org
Subject: [PATCH 4/5] cli: move show to the new --with-excluded naming scheme.
Date: Sat,  3 Mar 2012 13:05:17 +0000	[thread overview]
Message-ID: <1330779918-28024-5-git-send-email-markwalters1009@gmail.com> (raw)
In-Reply-To: <1330779918-28024-1-git-send-email-markwalters1009@gmail.com>

This moves show to the --with-excluded naming scheme. When this is set
show returns all threads that match including those that only match in
an excluded message.

When this flag is not set the behaviour depends on whether
--entire-threads is set. If it is not set then show only returns the
messages which match and are not excluded. If it is set then show
returns all messages in these threads.
---
 man/man1/notmuch-show.1 |    5 +++--
 notmuch-client.h        |    1 +
 notmuch-show.c          |   38 +++++++++++++++++++++-----------------
 3 files changed, 25 insertions(+), 19 deletions(-)

diff --git a/man/man1/notmuch-show.1 b/man/man1/notmuch-show.1
index d75d971..0047298 100644
--- a/man/man1/notmuch-show.1
+++ b/man/man1/notmuch-show.1
@@ -130,9 +130,10 @@ content.
 
 .RS 4
 .TP 4
-.B \-\-no-exclude
+.B \-\-with-excluded
 
-Do not exclude the messages matching search.exclude_tags in the config file.
+Include threads that only match in excluded messages (from
+search.exclude_tags in the config file) in the output.
 .RE
 
 A common use of
diff --git a/notmuch-client.h b/notmuch-client.h
index f4a62cc..4d9464c 100644
--- a/notmuch-client.h
+++ b/notmuch-client.h
@@ -99,6 +99,7 @@ typedef struct notmuch_show_format {
 
 typedef struct notmuch_show_params {
     notmuch_bool_t entire_thread;
+    notmuch_bool_t with_excluded;
     notmuch_bool_t raw;
     int part;
 #ifdef GMIME_ATLEAST_26
diff --git a/notmuch-show.c b/notmuch-show.c
index 05d51b2..f3440ae 100644
--- a/notmuch-show.c
+++ b/notmuch-show.c
@@ -812,6 +812,7 @@ show_messages (void *ctx,
 {
     notmuch_message_t *message;
     notmuch_bool_t match;
+    notmuch_bool_t excluded;
     int first_set = 1;
     int next_indent;
 
@@ -830,10 +831,11 @@ show_messages (void *ctx,
 	message = notmuch_messages_get (messages);
 
 	match = notmuch_message_get_flag (message, NOTMUCH_MESSAGE_FLAG_MATCH);
+	excluded = notmuch_message_get_flag (message, NOTMUCH_MESSAGE_FLAG_EXCLUDED);
 
 	next_indent = indent;
 
-	if (match || params->entire_thread) {
+	if ((match && (!excluded || params->with_excluded)) || params->entire_thread) {
 	    show_message (ctx, format, message, indent, params);
 	    next_indent = indent + 1;
 
@@ -986,7 +988,7 @@ notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[]))
     notmuch_show_params_t params = { .part = -1 };
     int format_sel = NOTMUCH_FORMAT_NOT_SPECIFIED;
     notmuch_bool_t verify = FALSE;
-    notmuch_bool_t no_exclude = FALSE;
+    notmuch_bool_t with_excluded = FALSE;
 
     notmuch_opt_desc_t options[] = {
 	{ NOTMUCH_OPT_KEYWORD, &format_sel, "format", 'f',
@@ -999,7 +1001,7 @@ notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[]))
 	{ NOTMUCH_OPT_BOOLEAN, &params.entire_thread, "entire-thread", 't', 0 },
 	{ NOTMUCH_OPT_BOOLEAN, &params.decrypt, "decrypt", 'd', 0 },
 	{ NOTMUCH_OPT_BOOLEAN, &verify, "verify", 'v', 0 },
-	{ NOTMUCH_OPT_BOOLEAN, &no_exclude, "no-exclude", 'n', 0 },
+	{ NOTMUCH_OPT_BOOLEAN, &with_excluded, "with-excluded", 'n', 0 },
 	{ 0, 0, 0, 0, 0 }
     };
 
@@ -1088,25 +1090,27 @@ notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[]))
 	return 1;
     }
 
-    /* if format=mbox then we can not output excluded messages as
-     * there is no way to make the exclude flag available */
-    if (format_sel == NOTMUCH_FORMAT_MBOX)
-	notmuch_query_set_omit_excluded_messages (query, TRUE);
-
     /* If a single message is requested we do not use search_excludes. */
     if (params.part >= 0)
 	ret = do_show_single (ctx, query, format, &params);
     else {
-	if (!no_exclude) {
-	    const char **search_exclude_tags;
-	    size_t search_exclude_tags_length;
-	    unsigned int i;
-
-	    search_exclude_tags = notmuch_config_get_search_exclude_tags
-		(config, &search_exclude_tags_length);
-	    for (i = 0; i < search_exclude_tags_length; i++)
-		notmuch_query_add_tag_exclude (query, search_exclude_tags[i]);
+	/* We always set the exclude tags: in the case --with-excluded
+	 * we apply notmuch_query_set_with_excluded to the query to
+	 * get all the results (but they will still be marked
+	 * excluded */
+	const char **search_exclude_tags;
+	size_t search_exclude_tags_length;
+	unsigned int i;
+
+	search_exclude_tags = notmuch_config_get_search_exclude_tags
+	    (config, &search_exclude_tags_length);
+	for (i = 0; i < search_exclude_tags_length; i++)
+	    notmuch_query_add_tag_exclude (query, search_exclude_tags[i]);
+	if (with_excluded) {
+	    notmuch_query_set_with_excluded_messages(query, TRUE);
+	    params.with_excluded = TRUE;
 	}
+
 	ret = do_show (ctx, query, format, &params);
     }
 
-- 
1.7.2.3

  parent reply	other threads:[~2012-03-03 13:04 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-03-03 13:05 [PATCH 0/5] Move to --with-excluded approach to excludes Mark Walters
2012-03-03 13:05 ` [PATCH 1/5] lib: rename (and negate) set_omit_excluded set_with_excluded Mark Walters
2012-03-03 13:05 ` [PATCH 2/5] cli: move count to the new --with-excluded naming scheme Mark Walters
2012-03-03 13:05 ` [PATCH 3/5] cli: move search " Mark Walters
2012-03-03 13:05 ` Mark Walters [this message]
2012-03-03 13:05 ` [PATCH 5/5] emacs: make show set --with-excluded Mark Walters
2012-03-11  1:19 ` [PATCH 0/5] Move to --with-excluded approach to excludes Jameson Graef Rollins

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://notmuchmail.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1330779918-28024-5-git-send-email-markwalters1009@gmail.com \
    --to=markwalters1009@gmail.com \
    --cc=notmuch@notmuchmail.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).