From: Lars Kotthoff <lists@larsko.org>
To: notmuch@notmuchmail.org
Subject: [PATCH] config: allow custom separators in author lists
Date: Mon, 01 Jul 2024 12:40:51 -0600 [thread overview]
Message-ID: <171985925199.1348.6214659455340451788.kukulkan@unkai> (raw)
[-- Attachment #1: Type: text/plain, Size: 676 bytes --]
Sorry, I dropped the ball on this -- here's the patch again with space/tab inconsistencies fixed. I wasn't entirely sure about this as it's inconsistent in the existing source, so I tried to make it as consistent as possible. Cover included again below.
The attached patch allows to customize the default ", " and "| " separators in author lists. The main rationale for supporting this is that the Python API uses the same functionality to get the list of authors -- if I want to separate them again afterwards, I have to split the returned string, which is error-prone with comma separators (e.g. name in email address is of form Lastname, Firstname).
Thanks,
Lars
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-config-allow-custom-separators-in-author-lists.patch --]
[-- Type: text/x-patch, Size: 7789 bytes --]
From 60aab0c8a9a8164abb32ea306b7fd894a18a2477 Mon Sep 17 00:00:00 2001
From: Lars Kotthoff <larsko@uwyo.edu>
Date: Fri, 22 Dec 2023 14:06:34 -0700
Subject: [PATCH] config: allow custom separators in author lists
---
NEWS | 11 +++++++++++
doc/man1/notmuch-config.rst | 13 +++++++++++++
lib/config.cc | 8 ++++++++
lib/notmuch.h | 2 ++
lib/thread.cc | 19 ++++++++++++++-----
test/T030-config.sh | 2 ++
test/T055-path-config.sh | 4 ++++
test/T590-libconfig.sh | 10 ++++++++++
8 files changed, 64 insertions(+), 5 deletions(-)
diff --git a/NEWS b/NEWS
index 315f4136..b306d095 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,14 @@
+Notmuch 0.39 (UNRELEASED)
+=========================
+
+General
+-------
+
+Allow to customize the separator between individual and matched and non-matched
+authors when showing threads. See `search.authors_separator` and
+`search.authors_matched_separator` in notmuch-config(1).
+
+
Notmuch 0.38.2 (2023-12-01)
===========================
diff --git a/doc/man1/notmuch-config.rst b/doc/man1/notmuch-config.rst
index bd34afa4..5106655f 100644
--- a/doc/man1/notmuch-config.rst
+++ b/doc/man1/notmuch-config.rst
@@ -273,6 +273,19 @@ paths are presumed relative to `$HOME` for items in section
Default: empty list. Note that :any:`notmuch-setup(1)` puts
``deleted;spam`` here when creating new configuration file.
+.. nmconfig:: search.authors_separator
+
+ The string to separate authors when showing a thread.
+
+ Default: ,
+
+.. nmconfig:: search.authors_matched_separator
+
+ The string to separate matched from non-matched authors when showing a
+ thread.
+
+ Default: |
+
.. nmconfig:: show.extra_headers
By default :any:`notmuch-show(1)` includes the following headers
diff --git a/lib/config.cc b/lib/config.cc
index 6cd15fab..a3102dce 100644
--- a/lib/config.cc
+++ b/lib/config.cc
@@ -608,6 +608,10 @@ _notmuch_config_key_to_string (notmuch_config_key_t key)
return "database.autocommit";
case NOTMUCH_CONFIG_EXTRA_HEADERS:
return "show.extra_headers";
+ case NOTMUCH_CONFIG_AUTHORS_SEPARATOR:
+ return "search.authors_separator";
+ case NOTMUCH_CONFIG_AUTHORS_MATCHED_SEPARATOR:
+ return "search.authors_matched_separator";
case NOTMUCH_CONFIG_INDEX_AS_TEXT:
return "index.as_text";
default:
@@ -658,6 +662,10 @@ _notmuch_config_default (notmuch_database_t *notmuch, notmuch_config_key_t key)
return "";
case NOTMUCH_CONFIG_AUTOCOMMIT:
return "8000";
+ case NOTMUCH_CONFIG_AUTHORS_SEPARATOR:
+ return ", ";
+ case NOTMUCH_CONFIG_AUTHORS_MATCHED_SEPARATOR:
+ return "| ";
case NOTMUCH_CONFIG_EXTRA_HEADERS:
case NOTMUCH_CONFIG_HOOK_DIR:
case NOTMUCH_CONFIG_BACKUP_DIR:
diff --git a/lib/notmuch.h b/lib/notmuch.h
index 4e2b0fa4..937fa24e 100644
--- a/lib/notmuch.h
+++ b/lib/notmuch.h
@@ -2565,6 +2565,8 @@ typedef enum {
NOTMUCH_CONFIG_AUTOCOMMIT,
NOTMUCH_CONFIG_EXTRA_HEADERS,
NOTMUCH_CONFIG_INDEX_AS_TEXT,
+ NOTMUCH_CONFIG_AUTHORS_SEPARATOR,
+ NOTMUCH_CONFIG_AUTHORS_MATCHED_SEPARATOR,
NOTMUCH_CONFIG_LAST
} notmuch_config_key_t;
diff --git a/lib/thread.cc b/lib/thread.cc
index 60e9a666..8d70b489 100644
--- a/lib/thread.cc
+++ b/lib/thread.cc
@@ -122,21 +122,28 @@ _thread_add_matched_author (notmuch_thread_t *thread,
/* Construct an authors string from matched_authors_array and
* authors_array. The string contains matched authors first, then
- * non-matched authors (with the two groups separated by '|'). Within
- * each group, authors are listed in date order. */
+ * non-matched authors (with the two groups separated by '|' or the custom
+ * separator defined in the configuration). Within each group, authors are
+ * listed in date order and separated by ',' or the custom separator defined in
+ * the configuration. */
static void
_resolve_thread_authors_string (notmuch_thread_t *thread)
{
unsigned int i;
char *author;
int first_non_matched_author = 1;
+ const char *authors_sep = notmuch_config_get (thread->notmuch,
+ NOTMUCH_CONFIG_AUTHORS_SEPARATOR);
+ const char *authors_matched_sep = notmuch_config_get (thread->notmuch,
+ NOTMUCH_CONFIG_AUTHORS_MATCHED_SEPARATOR);
/* First, list all matched authors in date order. */
for (i = 0; i < thread->matched_authors_array->len; i++) {
author = (char *) g_ptr_array_index (thread->matched_authors_array, i);
if (thread->authors)
- thread->authors = talloc_asprintf (thread, "%s, %s",
+ thread->authors = talloc_asprintf (thread, "%s%s%s",
thread->authors,
+ authors_sep,
author);
else
thread->authors = author;
@@ -149,12 +156,14 @@ _resolve_thread_authors_string (notmuch_thread_t *thread)
author, NULL, NULL))
continue;
if (first_non_matched_author) {
- thread->authors = talloc_asprintf (thread, "%s| %s",
+ thread->authors = talloc_asprintf (thread, "%s%s%s",
thread->authors,
+ authors_matched_sep,
author);
} else {
- thread->authors = talloc_asprintf (thread, "%s, %s",
+ thread->authors = talloc_asprintf (thread, "%s%s%s",
thread->authors,
+ authors_sep,
author);
}
diff --git a/test/T030-config.sh b/test/T030-config.sh
index 621e0b69..1d2b7df8 100755
--- a/test/T030-config.sh
+++ b/test/T030-config.sh
@@ -63,6 +63,8 @@ index.as_text=
maildir.synchronize_flags=true
new.ignore=
new.tags=unread;inbox
+search.authors_matched_separator=|
+search.authors_separator=,
search.exclude_tags=
user.name=Notmuch Test Suite
user.other_email=test_suite_other@notmuchmail.org;test_suite@otherdomain.org
diff --git a/test/T055-path-config.sh b/test/T055-path-config.sh
index 1feb5624..049b745e 100755
--- a/test/T055-path-config.sh
+++ b/test/T055-path-config.sh
@@ -303,6 +303,8 @@ index.as_text=
maildir.synchronize_flags=true
new.ignore=
new.tags=unread;inbox
+search.authors_matched_separator=|
+search.authors_separator=,
search.exclude_tags=
user.name=Notmuch Test Suite
user.other_email=test_suite_other@notmuchmail.org;test_suite@otherdomain.org
@@ -325,6 +327,8 @@ database.mail_root
database.path
maildir.synchronize_flags
new.tags
+search.authors_matched_separator
+search.authors_separator
user.name
user.other_email
user.primary_email
diff --git a/test/T590-libconfig.sh b/test/T590-libconfig.sh
index 9326ba3e..9b364895 100755
--- a/test/T590-libconfig.sh
+++ b/test/T590-libconfig.sh
@@ -441,6 +441,8 @@ cat <<'EOF' >EXPECTED
11: '8000'
12: 'NULL'
13: ''
+14: ', '
+15: '| '
== stderr ==
EOF
unset MAILDIR
@@ -725,6 +727,8 @@ test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "list by keys (ndlc)"
notmuch config set search.exclude_tags "foo;bar;fub"
+notmuch config set search.authors_matched_separator "| "
+notmuch config set search.authors_separator ", "
notmuch config set new.ignore "sekrit_junk"
notmuch config set index.as_text "text/"
cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR} %NULL% %NULL%
@@ -754,6 +758,8 @@ cat <<'EOF' >EXPECTED
11: '8000'
12: 'NULL'
13: 'text/'
+14: ', '
+15: '| '
== stderr ==
EOF
test_expect_equal_file EXPECTED OUTPUT
@@ -789,6 +795,8 @@ cat <<'EOF' >EXPECTED
11: '8000'
12: 'NULL'
13: ''
+14: ', '
+15: '| '
== stderr ==
EOF
test_expect_equal_file EXPECTED OUTPUT.clean
@@ -865,6 +873,8 @@ key with spaces value, with, spaces!
maildir.synchronize_flags true
new.ignore sekrit_junk
new.tags unread;inbox
+search.authors_matched_separator |
+search.authors_separator ,
search.exclude_tags foo;bar;fub
show.extra_headers (null)
test.key1 testvalue1
--
2.45.2
[-- Attachment #3: Type: text/plain, Size: 0 bytes --]
next reply other threads:[~2024-07-01 19:14 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-01 18:40 Lars Kotthoff [this message]
2024-07-25 8:33 ` [PATCH] config: allow custom separators in author lists David Bremner
2024-07-25 16:26 ` Lars Kotthoff
2024-07-26 7:06 ` David Bremner
-- strict thread matches above, loose matches on Subject: below --
2023-12-22 21:15 Lars Kotthoff
2023-12-22 22:20 ` Sandra Snan
2023-12-22 22:23 ` Sandra Snan
2023-12-22 22:24 ` Sandra Snan
2023-12-22 23:53 ` Lars Kotthoff
2024-02-15 21:41 ` Lars Kotthoff
2024-02-16 10:28 ` Tomi Ollila
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=171985925199.1348.6214659455340451788.kukulkan@unkai \
--to=lists@larsko.org \
--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).