[PATCH] Display extra headers for emacs-mua - db config option

Tomi Ollila tomi.ollila at iki.fi
Sat Nov 16 08:35:19 PST 2019


On Sat, Nov 16 2019, Johan Parin wrote:

> Modify format_headers_sprinter so that it returns some additional headers
> in the 
> sexp, instead of a small fixed set of headers.
>
> The extra header list is configured by the database config option
> `show.extra_headers'.
>
> This is required in order for the elisp variable
> `notmuch-message-headers' to work.

I did not look the patch, but if there is going to be configuration option
(either in config file, or in database), this way is (IMO) the most 
sensible alternative (add to the default options) -- no "full list" or 
"suppress header" options.

Tomi

>
> See this bug report:
>
>   https://notmuchmail.org/pipermail/notmuch/2017/026069.html
> ---
>  doc/man1/notmuch-config.rst |  6 ++++++
>  notmuch-config.c            |  7 ++++---
>  notmuch-show.c              | 41 ++++++++++++++++++++++++++++++++++++-
>  3 files changed, 50 insertions(+), 4 deletions(-)
>
> diff --git a/doc/man1/notmuch-config.rst b/doc/man1/notmuch-config.rst
> index 28487079..0eb59883 100644
> --- a/doc/man1/notmuch-config.rst
> +++ b/doc/man1/notmuch-config.rst
> @@ -204,6 +204,12 @@ The available configuration items are described below.
>      supported. See **notmuch-search-terms(7)** for a list of existing
>      prefixes, and an explanation of probabilistic prefixes.
>  
> +**show.extra_headers**
> +    A list of extra headers that will be output by **notmuch show**
> +    with ``--format=sexp``, if present in the message.
> +
> +    Default: empty list.
> +
>  **built_with.<name>**
>      Compile time feature <name>. Current possibilities include
>      "compact" (see **notmuch-compact(1)**) and "field_processor" (see
> diff --git a/notmuch-config.c b/notmuch-config.c
> index 1b079e85..6554ad9b 100644
> --- a/notmuch-config.c
> +++ b/notmuch-config.c
> @@ -841,9 +841,10 @@ typedef struct config_key {
>  
>  static struct config_key
>      config_key_table[] = {
> -    { "index.decrypt",   true,   false,  NULL },
> -    { "index.header.",   true,   true,   validate_field_name },
> -    { "query.",          true,   true,   NULL },
> +    { "index.decrypt",      true,   false,  NULL },
> +    { "index.header.",      true,   true,   validate_field_name },
> +    { "query.",             true,   true,   NULL },
> +    { "show.extra_headers", true,   false,  NULL }
>  };
>  
>  static config_key_info_t *
> diff --git a/notmuch-show.c b/notmuch-show.c
> index 21792a57..4c77468f 100644
> --- a/notmuch-show.c
> +++ b/notmuch-show.c
> @@ -18,11 +18,16 @@
>   * Author: Carl Worth <cworth at cworth.org>
>   */
>  
> +#include <string.h>
> +
>  #include "notmuch-client.h"
>  #include "gmime-filter-reply.h"
>  #include "sprinter.h"
>  #include "zlib-extra.h"
>  
> +static notmuch_database_t *notmuch = NULL;
> +
> +
>  static const char *
>  _get_tags_as_string (const void *ctx, notmuch_message_t *message)
>  {
> @@ -195,6 +200,38 @@ _is_from_line (const char *line)
>  	return 0;
>  }
>  
> +/* Output extra headers if configured with the `show.extra_headers'
> + * database configuration option
> + */
> +void
> +format_extra_headers_sprinter (sprinter_t *sp, GMimeMessage *message)
> +{
> +    GMimeHeaderList *header_list;
> +    GMimeHeader *header;
> +    char *extra_headers, *tofree, *header_name;
> +
> +    if (notmuch == NULL)
> +	return;
> +
> +    if (notmuch_database_get_config (notmuch, "show.extra_headers",
> +				     &extra_headers) != NOTMUCH_STATUS_SUCCESS)
> +	return;
> +
> +    header_list  = g_mime_object_get_header_list (GMIME_OBJECT(message));
> +
> +    tofree = extra_headers;
> +    while ( (header_name = strsep(&extra_headers, ";")) != NULL) {
> +
> +	header = g_mime_header_list_get_header (header_list, header_name);
> +	if (header == NULL)
> +	    continue;
> +
> +	sp->map_key (sp, g_mime_header_get_name(header));
> +	sp->string (sp, g_mime_header_get_value(header));
> +    }
> +    free (tofree);
> +}
> +
>  void
>  format_headers_sprinter (sprinter_t *sp, GMimeMessage *message,
>  			 bool reply, const _notmuch_message_crypto_t *msg_crypto)
> @@ -253,6 +290,9 @@ format_headers_sprinter (sprinter_t *sp, GMimeMessage *message,
>      } else {
>  	sp->map_key (sp, "Date");
>  	sp->string (sp, g_mime_message_get_date_string (sp, message));
> +
> +	/* Output extra headers the user has configured in the database, if any */
> +	format_extra_headers_sprinter (sp, message);
>      }
>  
>      sp->end (sp);
> @@ -1152,7 +1192,6 @@ static const notmuch_show_format_t *formatters[] = {
>  int
>  notmuch_show_command (notmuch_config_t *config, int argc, char *argv[])
>  {
> -    notmuch_database_t *notmuch;
>      notmuch_query_t *query;
>      char *query_string;
>      int opt_index, ret;
> -- 
> 2.21.0 (Apple Git-122)
>
> _______________________________________________
> notmuch mailing list
> notmuch at notmuchmail.org
> https://notmuchmail.org/mailman/listinfo/notmuch


More information about the notmuch mailing list