From: David Edmondson Date: Fri, 24 Oct 2014 08:48:07 +0000 (+0100) Subject: [PATCH v1 2/3] emacs: Improved display of matching/non-matching authors. X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=3922d236921ba8e389c43519990e46cb3f629161;p=notmuch-archives.git [PATCH v1 2/3] emacs: Improved display of matching/non-matching authors. --- diff --git a/d2/34409fde5049f030373f2f026851c658505b48 b/d2/34409fde5049f030373f2f026851c658505b48 new file mode 100644 index 000000000..fe44ad6d9 --- /dev/null +++ b/d2/34409fde5049f030373f2f026851c658505b48 @@ -0,0 +1,186 @@ +Return-Path: +X-Original-To: notmuch@notmuchmail.org +Delivered-To: notmuch@notmuchmail.org +Received: from localhost (localhost [127.0.0.1]) + by olra.theworths.org (Postfix) with ESMTP id B5477429E30 + for ; Fri, 24 Oct 2014 01:48:25 -0700 (PDT) +X-Virus-Scanned: Debian amavisd-new at olra.theworths.org +X-Spam-Flag: NO +X-Spam-Score: -0.699 +X-Spam-Level: +X-Spam-Status: No, score=-0.699 tagged_above=-999 required=5 + tests=[RCVD_IN_DNSWL_LOW=-0.7, UNPARSEABLE_RELAY=0.001] + autolearn=disabled +Received: from olra.theworths.org ([127.0.0.1]) + by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP id QHrjmLQreUys for ; + Fri, 24 Oct 2014 01:48:21 -0700 (PDT) +Received: from mail-wi0-f174.google.com (mail-wi0-f174.google.com + [209.85.212.174]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) + (No client certificate requested) + by olra.theworths.org (Postfix) with ESMTPS id 7BF68429E25 + for ; Fri, 24 Oct 2014 01:48:14 -0700 (PDT) +Received: by mail-wi0-f174.google.com with SMTP id q5so680150wiv.7 + for ; Fri, 24 Oct 2014 01:48:13 -0700 (PDT) +X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=1e100.net; s=20130820; + h=x-gm-message-state:user-agent:from:to:subject:date:message-id + :in-reply-to:references; + bh=GlCgVuD8Rad5QeXkFhIKJQTsvMSQb7Gzj3WkwGCX/4w=; + b=d5hRQ/WUahdgrGcyhzENyyIsPCNL7zyyUh50k7fPckos26nIaSE198dWFqgmv5rE7r + QSpiLBPCrOXdtaApKQYPa7d5vekiQ81/nV4b9xJxs8KYQbtYFeMtre9R9ZktF17IH/mO + 3RzfKzSU8qVJYymU8ACJWvlb+ffzXB3aiF3Wn7yI8ktPZzoNYLBjbBoGOmYFMDLX+t4d + dYDnxCo9R+za3zVmYZpkn0xnawcXuvfa4ttps4pdhcmikFBWS+jcG8itk0zNTTVnAjsU + FDsRzj1KtTAIXprk/40bPhzHqm0wisKHSjXYA8WRNTM/V9zIzZMGy0+uhoesL6I1mD+K + d+hw== +X-Gm-Message-State: + ALoCoQkaRX9/MT0Iif7YuFkzNa3jW+yN1phY1iifATlykyGUWeyYGhNAwOpNlc5j/gGHYIy9t4/D +X-Received: by 10.194.24.197 with SMTP id w5mr3163005wjf.71.1414140493293; + Fri, 24 Oct 2014 01:48:13 -0700 (PDT) +Received: from disaster-area.hh.sledj.net + ([2a01:348:1a2:1:ea39:35ff:fe2c:a227]) + by mx.google.com with ESMTPSA id ee3sm1250679wic.4.2014.10.24.01.48.12 + for + (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); + Fri, 24 Oct 2014 01:48:12 -0700 (PDT) +Received: from localhost (30000@localhost [local]); + by localhost (OpenSMTPD) with ESMTPA id 1170bf63; + for ; Fri, 24 Oct 2014 08:48:08 +0000 (UTC) +User-Agent: OpenSMTPD enqueuer (Demoostik) +From: David Edmondson +To: notmuch@notmuchmail.org +Subject: [PATCH v1 2/3] emacs: Improved display of matching/non-matching + authors. +Date: Fri, 24 Oct 2014 09:48:07 +0100 +Message-Id: <1414140488-29978-3-git-send-email-dme@dme.org> +X-Mailer: git-send-email 2.1.1 +In-Reply-To: <1414140488-29978-1-git-send-email-dme@dme.org> +References: <1414140488-29978-1-git-send-email-dme@dme.org> +X-BeenThere: notmuch@notmuchmail.org +X-Mailman-Version: 2.1.13 +Precedence: list +List-Id: "Use and development of the notmuch mail system." + +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +X-List-Received-Date: Fri, 24 Oct 2014 08:48:26 -0000 + +Rather than splitting the :authors attribute, which is error prone, +use the separate :authors_matched and :authors_non_matched attributes. + +This improves the display of authors should one of them include a pipe +symbol (|) in their 'from' address. +--- + emacs/notmuch.el | 64 +++++++++++++++++++++++++++++++------------------------- + 1 file changed, 35 insertions(+), 29 deletions(-) + +diff --git a/emacs/notmuch.el b/emacs/notmuch.el +index b44a907..29b6cdc 100644 +--- a/emacs/notmuch.el ++++ b/emacs/notmuch.el +@@ -672,22 +672,24 @@ foreground and blue background." + ;; Reverse the list so earlier entries take precedence + (reverse notmuch-search-line-faces))) + +-(defun notmuch-search-author-propertize (authors) ++(defun notmuch-search-author-propertize (authors matching-length) + "Split `authors' into matching and non-matching authors and + propertize appropriately. If no boundary between authors and + non-authors is found, assume that all of the authors match." +- (if (string-match "\\(.*\\)|\\(.*\\)" authors) +- (concat (propertize (concat (match-string 1 authors) ",") +- 'face 'notmuch-search-matching-authors) +- (propertize (match-string 2 authors) +- 'face 'notmuch-search-non-matching-authors)) +- (propertize authors 'face 'notmuch-search-matching-authors))) +- +-(defun notmuch-search-insert-authors (format-string authors) ++ (let ((match-part (substring authors 0 matching-length)) ++ (non-match-part (substring authors matching-length))) ++ ++ (concat (propertize match-part 'face 'notmuch-search-matching-authors) ++ (propertize non-match-part 'face 'notmuch-search-non-matching-authors)))) ++ ++(defun notmuch-search-insert-authors (format-string matching-authors non-matching-authors) + ;; Save the match data to avoid interfering with + ;; `notmuch-search-process-filter'. + (save-match-data +- (let* ((formatted-authors (format format-string authors)) ++ (let* ((authors (if (string= "" non-matching-authors) ++ matching-authors ++ (concat matching-authors ", " non-matching-authors))) ++ (formatted-authors (format format-string authors)) + (formatted-sample (format format-string "")) + (visible-string formatted-authors) + (invisible-string "") +@@ -703,9 +705,9 @@ non-authors is found, assume that all of the authors match." + (setq visible-string (substring formatted-authors 0 visible-length) + invisible-string (substring formatted-authors visible-length)) + ;; If possible, truncate the visible string at a natural +- ;; break (comma or pipe), as incremental search doesn't +- ;; match across the visible/invisible border. +- (when (string-match "\\(.*\\)\\([,|] \\)\\([^,|]*\\)" visible-string) ++ ;; break (comma), as incremental search doesn't match ++ ;; across the visible/invisible border. ++ (when (string-match "\\(.*\\)\\(, \\)\\([^,]*\\)" visible-string) + ;; Second clause is destructive on `visible-string', so + ;; order is important. + (setq invisible-string (concat (match-string 3 visible-string) +@@ -721,20 +723,23 @@ non-authors is found, assume that all of the authors match." + ? )))) + + ;; Use different faces to show matching and non-matching authors. +- (if (string-match "\\(.*\\)|\\(.*\\)" visible-string) +- ;; The visible string contains both matching and +- ;; non-matching authors. +- (setq visible-string (notmuch-search-author-propertize visible-string) +- ;; The invisible string must contain only non-matching +- ;; authors, as the visible-string contains both. +- invisible-string (propertize invisible-string +- 'face 'notmuch-search-non-matching-authors)) +- ;; The visible string contains only matching authors. +- (setq visible-string (propertize visible-string +- 'face 'notmuch-search-matching-authors) +- ;; The invisible string may contain both matching and +- ;; non-matching authors. +- invisible-string (notmuch-search-author-propertize invisible-string))) ++ (let ((visible-length (length visible-string)) ++ (matching-length (length matching-authors))) ++ ++ (if (> visible-length matching-length) ++ ;; The visible string contains both matching and ++ ;; non-matching authors. ++ (setq visible-string (notmuch-search-author-propertize visible-string matching-length) ++ ;; The invisible string must contain only non-matching ++ ;; authors, as the visible-string contains both. ++ invisible-string (propertize invisible-string ++ 'face 'notmuch-search-non-matching-authors)) ++ ;; The visible string contains only matching authors. ++ (setq visible-string (propertize visible-string ++ 'face 'notmuch-search-matching-authors) ++ ;; The invisible string may contain both matching and ++ ;; non-matching authors. ++ invisible-string (notmuch-search-author-propertize invisible-string (- visible-length matching-length))))) + + ;; If there is any invisible text, add it as a tooltip to the + ;; visible text. +@@ -768,8 +773,9 @@ non-authors is found, assume that all of the authors match." + 'face 'notmuch-search-subject))) + + ((string-equal field "authors") +- (notmuch-search-insert-authors +- format-string (notmuch-sanitize (plist-get result :authors)))) ++ (notmuch-search-insert-authors format-string ++ (notmuch-sanitize (plist-get result :authors_matched)) ++ (notmuch-sanitize (plist-get result :authors_non_matched)))) + + ((string-equal field "tags") + (let ((tags (plist-get result :tags)) +-- +2.1.1 +