From 8804a75ae561a7e504fdce8aea58d3ddc8670b71 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Sat, 31 Oct 2026 11:41:08 +0100 Subject: feat: build the query for what a tag change would move Co-Authored-By: Claude Opus 5.5 --- src/searchterm.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/searchterm.h') diff --git a/src/searchterm.h b/src/searchterm.h index 8ca67e4..dd43e99 100644 --- a/src/searchterm.h +++ b/src/searchterm.h @@ -111,6 +111,20 @@ QString extend(const QString &existing, const QString &addition); /// An empty `addition` leaves `existing` untouched. QString exclude(const QString &existing, const QString &addition); +/// The messages among `query` that `+add -remove` would actually change: +/// `(query) AND (not tag:a1 or ... or tag:r1 ...)`. +/// +/// Used to count and to write a rule applied to existing mail (item 212), so +/// the number in the confirmation is the number of messages touched, not the +/// number matched. Built on extend(), so a disjunction in the rule cannot +/// escape the scope. +/// +/// **Never empty.** An empty query or an empty change yields +/// Config::matchNothingQuery(), because notmuch reads an empty query as +/// "match everything" and this string is written to. +QString changes(const QString &query, const QStringList &add, + const QStringList &remove); + } // namespace SearchTerm /// One entry a context menu can offer: a finished query and the text naming it. -- cgit v1.2.3