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 D62B1431FCB for ; Sat, 3 Mar 2012 05:04:21 -0800 (PST) X-Virus-Scanned: Debian amavisd-new at olra.theworths.org X-Spam-Flag: NO X-Spam-Score: 0.201 X-Spam-Level: X-Spam-Status: No, score=0.201 tagged_above=-999 required=5 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_ENVFROM_END_DIGIT=1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7] autolearn=disabled 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 t8ok-2zr01Md for ; Sat, 3 Mar 2012 05:04:21 -0800 (PST) Received: from mail-we0-f181.google.com (mail-we0-f181.google.com [74.125.82.181]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (No client certificate requested) by olra.theworths.org (Postfix) with ESMTPS id E6A0A431FAF for ; Sat, 3 Mar 2012 05:04:20 -0800 (PST) Received: by werm13 with SMTP id m13so1818868wer.26 for ; Sat, 03 Mar 2012 05:04:18 -0800 (PST) Received-SPF: pass (google.com: domain of markwalters1009@gmail.com designates 10.180.80.8 as permitted sender) client-ip=10.180.80.8; Authentication-Results: mr.google.com; spf=pass (google.com: domain of markwalters1009@gmail.com designates 10.180.80.8 as permitted sender) smtp.mail=markwalters1009@gmail.com; dkim=pass header.i=markwalters1009@gmail.com Received: from mr.google.com ([10.180.80.8]) by 10.180.80.8 with SMTP id n8mr3874977wix.14.1330779858467 (num_hops = 1); Sat, 03 Mar 2012 05:04:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; bh=pBanLPgoew9T56Rshbn7yisqEeJD6pl1qy4lY3OT1J8=; b=G2ES9SS9QrMauUekNr/afrQCSziKXCWyRg/WqW5pAG4JEzaUa7I//cEiRq3KGyZrpr D0L6TbxwptZ1C3YWnVQ6qUUNJYsL6Z56S3NrPiv6UMeZaCQO+JOsTQpWrkrpTZvH0iEM Cdb863g67lQkzPJJXUjx1irvWCLvue+SpkqonmCsfzaDlhBDbJBtPhUYywul0LNCW5Jo qBkpChAEADX7d9QUrmkyNo5r0ASWp86D8Bl8+2T0TNSN99LMX6Rqth1b+gqxH5yrwvEi BPju1U3vT71GgKgGgMaHHS60z4Sllb+nLYTLOF9u4IZGSerXrmX3Rk/iDGHPMsRwGBJJ 2Ucg== Received: by 10.180.80.8 with SMTP id n8mr3071358wix.14.1330779858430; Sat, 03 Mar 2012 05:04:18 -0800 (PST) Received: from localhost (94-192-233-223.zone6.bethere.co.uk. [94.192.233.223]) by mx.google.com with ESMTPS id er8sm27136271wib.1.2012.03.03.05.04.17 (version=TLSv1/SSLv3 cipher=OTHER); Sat, 03 Mar 2012 05:04:17 -0800 (PST) From: Mark Walters 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 Message-Id: <1330779918-28024-5-git-send-email-markwalters1009@gmail.com> X-Mailer: git-send-email 1.7.2.3 In-Reply-To: <1330779918-28024-1-git-send-email-markwalters1009@gmail.com> References: <1330779918-28024-1-git-send-email-markwalters1009@gmail.com> X-BeenThere: notmuch@notmuchmail.org X-Mailman-Version: 2.1.13 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: Sat, 03 Mar 2012 13:04:22 -0000 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, ¶ms.entire_thread, "entire-thread", 't', 0 }, { NOTMUCH_OPT_BOOLEAN, ¶ms.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, ¶ms); 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, ¶ms); } -- 1.7.2.3