summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/message/mu-fields.cc4
-rw-r--r--lib/tests/test-mu-store-query.cc16
-rw-r--r--man/mu-query.7.org2
-rw-r--r--mu4e/mu4e-search.el39
4 files changed, 47 insertions, 14 deletions
diff --git a/lib/message/mu-fields.cc b/lib/message/mu-fields.cc
index 57399b5..040e68c 100644
--- a/lib/message/mu-fields.cc
+++ b/lib/message/mu-fields.cc
@@ -38,6 +38,10 @@ Mu::combi_fields()
field_from_id(Field::Id::Cc),
field_from_id(Field::Id::Bcc),
field_from_id(Field::Id::From)}},
+ CombiField { "related",
+ { field_from_id(Field::Id::MessageId),
+ field_from_id(Field::Id::References)}
+ },
CombiField { "",
{ field_from_id(Field::Id::To),
field_from_id(Field::Id::Cc),
diff --git a/lib/tests/test-mu-store-query.cc b/lib/tests/test-mu-store-query.cc
index 92680b1..ca4273b 100644
--- a/lib/tests/test-mu-store-query.cc
+++ b/lib/tests/test-mu-store-query.cc
@@ -217,10 +217,6 @@ Boo!
}
}
-
-
-
-
static void
test_related()
{
@@ -262,7 +258,6 @@ Child
TempDir tdir;
auto store{make_test_store(tdir.path(), test_msgs, {})};
{
- // direct matches
auto qr = store.run_query("msgid:aap@foo.bar", Field::Id::Date,
QueryFlags::None);
g_assert_true(!!qr);
@@ -271,7 +266,6 @@ Child
}
{
- // skip duplicate messages; which one is skipped is arbitrary.
auto qr = store.run_query("msgid:aap@foo.bar", Field::Id::Date,
QueryFlags::IncludeRelated);
g_assert_true(!!qr);
@@ -280,7 +274,6 @@ Child
}
{
- // skip duplicate messages; which one is skipped is arbitrary.
auto qr = store.run_query("msgid:mies@foo.bar", Field::Id::Date,
QueryFlags::IncludeRelated);
g_assert_true(!!qr);
@@ -289,7 +282,6 @@ Child
}
{
- // skip duplicate messages; which one is skipped is arbitrary.
auto qr = store.run_query("ref:aap@foo.bar", Field::Id::Date,
QueryFlags::None);
g_assert_true(!!qr);
@@ -297,9 +289,15 @@ Child
g_assert_cmpuint(qr->size(), ==, 2);
}
+ {
+ auto qr = store.run_query("related:aap@foo.bar", Field::Id::Date,
+ QueryFlags::None);
+ g_assert_true(!!qr);
+ g_assert_false(qr->empty());
+ g_assert_cmpuint(qr->size(), ==, 3);
+ }
}
-
static void
test_dups_related()
{
diff --git a/man/mu-query.7.org b/man/mu-query.7.org
index 9736a4f..0cb1cd3 100644
--- a/man/mu-query.7.org
+++ b/man/mu-query.7.org
@@ -183,6 +183,8 @@ fields at once:
+-------------+-----------------------------------------+
| contact | to, cc, bcc, from |
+-------------+-----------------------------------------+
+| related | message-id, references |
++-------------+-----------------------------------------+
| <empty> | to, cc, bcc, from, subject, body, embed |
+-------------+-----------------------------------------+
#+end_example
diff --git a/mu4e/mu4e-search.el b/mu4e/mu4e-search.el
index e17021e..2fdb8ee 100644
--- a/mu4e/mu4e-search.el
+++ b/mu4e/mu4e-search.el
@@ -352,10 +352,38 @@ either `future' or `past'."
(read-string prompt initial-input 'mu4e--search-hist)))
(defconst mu4e--search-query-keywords
- '("and" "or" "not"
- "from:" "to:" "cc:" "bcc:" "contact:" "recip:" "date:" "subject:" "body:"
- "list:" "maildir:" "flag:" "mime:" "file:" "prio:" "tag:" "msgid:"
- "size:" "embed:"))
+ '(;; logical
+ "and"
+ "or"
+ "not"
+ ;; fields
+ "bcc:"
+ "body:"
+ "cc:"
+ "changed:"
+ "date:"
+ "embed:"
+ "file:"
+ "flag:"
+ "from:"
+ "lang:"
+ "maildir:"
+ "list:"
+ "msgid"
+ "mime:"
+ "path:"
+ "prio:"
+ "ref"
+ "size:"
+ "subject:"
+ "tags:"
+ "thread:"
+ "to:"
+ ;; combin fields
+ "recip:"
+ "contact:"
+ "related:")
+ "Mu4e query-keywords for completion.")
(defun mu4e--search-completion-contacts-action (match _status)
"Delete contact alias from contact autocompletion, leaving just email address.
@@ -378,7 +406,8 @@ status, STATUS."
(list (match-beginning 1)
(match-end 1)
'("attach" "draft" "flagged" "list" "new" "passed" "replied"
- "seen" "trashed" "unread" "encrypted" "signed" "personal")))
+ "seen" "trashed" "unread" "encrypted" "signed" "personal"
+ "calendar")))
((looking-back "maildir:\\([a-zA-Z0-9/.]*\\)" nil)
(list (match-beginning 1)
(match-end 1)