[PATCH] implement search --format=sanitized_text + emacs UI to use it
Austin Clements
amdragon at mit.edu
Fri May 6 16:55:26 PDT 2011
Perhaps text summary output should *always* do this. The text summary
format is meant half for user consumption and half for emacs
consumption and allowing newlines that don't indicate the end of a
summary line seems bad for *both* use cases.
On Fri, May 6, 2011 at 7:17 PM, Florian Friesdorf <flo at chaoflow.net> wrote:
> Sanitize "Subject:" and "Author:" fields to not contain control
> characters for sanitized_text format.
>
> When a Subject field contains encoded CRLF sequences, these sequences
> would appear unfiltered in the output of notmuch search. This confused
> the notmuch emacs interface leading to "Unexpected Output"
> messages. This is now fixed by replacing all characters with ASCII
> code less than 32 with a question mark for the sanitized_text
> format. The emacs UI uses this format.
>
> Thank you to Andreas Amann <a.amann at ucc.ie>, who wrote the initial
> patch, I just turned it into a new format.
>
> missing:
> - man page update
> - test, (works for me)
> - investigate initialization warning:
> CC -O2 notmuch-search.o
> notmuch-search.c:98:1: warning: missing initializer
> notmuch-search.c:98:1: warning: (near initialization for
> 'format_sanitized_text.results_null')
> ---
> emacs/notmuch.el | 3 +-
> notmuch-search.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 60 insertions(+), 1 deletions(-)
>
> diff --git a/emacs/notmuch.el b/emacs/notmuch.el
> index 1d683f8..9d7c212 100644
> --- a/emacs/notmuch.el
> +++ b/emacs/notmuch.el
> @@ -879,7 +879,8 @@ The optional parameters are used as follows:
> (if oldest-first
> "--sort=oldest-first"
> "--sort=newest-first")
> - query)))
> + "--format=sanitized_text"
> + query)))
> (set-process-sentinel proc 'notmuch-search-process-sentinel)
> (set-process-filter proc 'notmuch-search-process-filter))))
> (run-hooks 'notmuch-search-hook)))
> diff --git a/notmuch-search.c b/notmuch-search.c
> index 5e39511..d59dc44 100644
> --- a/notmuch-search.c
> +++ b/notmuch-search.c
> @@ -78,6 +78,26 @@ static const search_format_t format_text = {
> };
>
> static void
> +format_thread_sanitized_text (const void *ctx,
> + const char *thread_id,
> + const time_t date,
> + const int matched,
> + const int total,
> + const char *authors,
> + const char *subject);
> +static const search_format_t format_sanitized_text = {
> + "",
> + "",
> + format_item_id_text,
> + format_thread_sanitized_text,
> + " (",
> + "%s", " ",
> + ")", "\n",
> + "",
> + "",
> +};
> +
> +static void
> format_item_id_json (const void *ctx,
> const char *item_type,
> const char *item_id);
> @@ -129,6 +149,42 @@ format_thread_text (const void *ctx,
> subject);
> }
>
> +static char *
> +sanitize_string(const void *ctx, const char *str)
> +{
> + char *out, *loop;
> +
> + loop = out = talloc_strdup (ctx, str);
> +
> + for(;*loop;loop++){
> + if ((unsigned char)(*loop) < 32)
> + *loop = '?';
> + }
> + return out;
> +}
> +
> +static void
> +format_thread_sanitized_text (const void *ctx,
> + const char *thread_id,
> + const time_t date,
> + const int matched,
> + const int total,
> + const char *authors,
> + const char *subject)
> +{
> + void *ctx_quote = talloc_new (ctx);
> +
> + printf ("thread:%s %12s [%d/%d] %s; %s",
> + thread_id,
> + notmuch_time_relative_date (ctx, date),
> + matched,
> + total,
> + sanitize_string(ctx_quote, authors),
> + sanitize_string(ctx_quote, subject));
> +
> + talloc_free (ctx_quote);
> +}
> +
> static void
> format_item_id_json (const void *ctx,
> unused (const char *item_type),
> @@ -378,6 +434,8 @@ notmuch_search_command (void *ctx, int argc, char *argv[])
> opt = argv[i] + sizeof ("--format=") - 1;
> if (strcmp (opt, "text") == 0) {
> format = &format_text;
> + } else if (strcmp (opt, "sanitized_text") == 0) {
> + format = &format_sanitized_text;
> } else if (strcmp (opt, "json") == 0) {
> format = &format_json;
> } else {
> --
> 1.7.5.1
>
> _______________________________________________
> notmuch mailing list
> notmuch at notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch
>
More information about the notmuch
mailing list