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 826D0431FC0 for ; Sun, 11 May 2014 01:35:02 -0700 (PDT) X-Virus-Scanned: Debian amavisd-new at olra.theworths.org X-Spam-Flag: NO X-Spam-Score: 0.201 X-Spam-Level: X-Spam-Status: No, score=0.201 tagged_above=-999 required=5 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_ENVFROM_END_DIGIT=1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7] 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 OwnegEcCY-IC for ; Sun, 11 May 2014 01:34:57 -0700 (PDT) Received: from mail-we0-f170.google.com (mail-we0-f170.google.com [74.125.82.170]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (No client certificate requested) by olra.theworths.org (Postfix) with ESMTPS id 51272431FC2 for ; Sun, 11 May 2014 01:34:52 -0700 (PDT) Received: by mail-we0-f170.google.com with SMTP id u57so5679413wes.1 for ; Sun, 11 May 2014 01:34:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=tFUNxtP9FiPlA6qcZwXcKL2GX0EwZefYH4nKn19Z9zo=; b=1FhhgPygeimQUyq85gVmORWmWAXs8Y7opvKy0nUIcA2sb6J15mFGrrICNayTkwQrrY GFgT/6/JgUbjubY2Wx6eGdsXe+TUIlVsDLWDkBekf9k6Cs98BfF/UnU7/wjESL6i1jW7 93hEm8+Akm/4AHzMLrsiwGa4bTX5nFZoa1xacdJsmLN4mjnLAeM2xnYhnu5T0b0MQBIK h6fJwReIm/CCSptZPyNIhzsN2oGFwmjQ6LW9Ri/GGRXLC4a8AygfIq+xLoOlg7ZB3E2Q IADRGydCl9Mz9R4fYokJcSdlQiHrLO3HWFXHY65Ng1W++7yoyfoeV/5osUMOWRTf+2bq SXpA== X-Received: by 10.180.107.5 with SMTP id gy5mr10704882wib.44.1399797291083; Sun, 11 May 2014 01:34:51 -0700 (PDT) Received: from localhost (5751dfa2.skybroadband.com. [87.81.223.162]) by mx.google.com with ESMTPSA id dz5sm3841145wib.22.2014.05.11.01.34.50 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Sun, 11 May 2014 01:34:50 -0700 (PDT) From: Mark Walters To: notmuch@notmuchmail.org Subject: [PATCH 2/7] emacs: hello: allow saved search display functions Date: Sun, 11 May 2014 09:34:37 +0100 Message-Id: <1399797282-20389-3-git-send-email-markwalters1009@gmail.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1399797282-20389-1-git-send-email-markwalters1009@gmail.com> References: <1399797282-20389-1-git-send-email-markwalters1009@gmail.com> 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: Sun, 11 May 2014 08:35:02 -0000 Extend the saved search plist to include a :display-function property that can customise the display of the saved search. It can change the count string displayed and the name string. Thus the user can customise so that a particular search: does not show a count (and is thus hello is faster), shows a thread count, show a combined message/thread count, changes colour of the search button based on new messages arriving etc. The display function should use (&rest args) to take a keyword list of arguments. The advantage of this is that it is easy to add extra arguments in a backwards compatible way (existing user scripts will still work). If a user uses this it will not take advantage of the batch counting currently done so will make things slower over remote links (except in cases where no query is done!). It also deletes the :count-query option from the customise for saved searches as this method is much more general. The code still supports the :count-query option though (just the defcustom does not). --- emacs/notmuch-hello.el | 47 +++++++++++++++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el index 0a7004c..7075860 100644 --- a/emacs/notmuch-hello.el +++ b/emacs/notmuch-hello.el @@ -85,12 +85,13 @@ (define-widget 'notmuch-saved-search-plist 'list (group :format "%v" :inline t (const :format " Query: " :query) (string :format "%v"))) (checklist :inline t :format "%v" - (group :format "%v" :inline t (const :format "Count-Query: " :count-query) (string :format "%v")) (group :format "%v" :inline t (const :format "" :sort-order) (choice :tag " Sort Order" (const :tag "Default" nil) (const :tag "Oldest-first" oldest-first) - (const :tag "Newest-first" newest-first)))))) + (const :tag "Newest-first" newest-first))) + (group :format "%v" :inline t (const :format "Display-function: " :display-function) (function :format "%v"))))) + (defcustom notmuch-saved-searches '((:name "inbox" :query "tag:inbox") (:name "unread" :query "tag:unread")) @@ -101,12 +102,19 @@ (defcustom notmuch-saved-searches '((:name "inbox" :query "tag:inbox") :name Name of the search (required). :query Search to run (required). - :count-query Optional extra query to generate the count - shown. If not present then the :query property - is used. :sort-order Specify the sort order to be used for the search. Possible values are 'oldest-first 'newest-first or nil. Nil means use the default sort order. + :display-function Optional function to generate the count and + name to be displayed. The function takes a + keyword list of arguments (it should use + &rest). Keywords include :current for the + current saved search plist and :options. If + this function is not set then the default + display of message count and name is used. The + function should return an updated saved search + plist including :name and :count as the name + and count-string to be displayed. Other accepted forms are a cons cell of the form (NAME . QUERY) or a list of the form (NAME QUERY COUNT-QUERY)." @@ -507,15 +515,16 @@ (defun notmuch-hello-query-counts (query-list &rest options) `notmuch-hello-insert-searches'." (with-temp-buffer (dolist (elem query-list nil) - (let ((count-query (or (notmuch-saved-search-get elem :count-query) - (notmuch-saved-search-get elem :query)))) - (insert - (replace-regexp-in-string - "\n" " " - (notmuch-hello-filtered-query count-query - (or (plist-get options :filter-count) - (plist-get options :filter)))) - "\n"))) + (unless (notmuch-saved-search-get elem :display-function) + (let ((count-query (or (notmuch-saved-search-get elem :count-query) + (notmuch-saved-search-get elem :query)))) + (insert + (replace-regexp-in-string + "\n" " " + (notmuch-hello-filtered-query count-query + (or (plist-get options :filter-count) + (plist-get options :filter)))) + "\n")))) (unless (= (call-process-region (point-min) (point-max) notmuch-command t t nil "count" "--batch") 0) @@ -530,8 +539,14 @@ (defun notmuch-hello-query-counts (query-list &rest options) #'identity (mapcar (lambda (elem) - (let* ((elem-plist (notmuch-hello-saved-search-to-plist elem))) - (notmuch-hello-batch-message-count elem-plist options))) + (let* ((elem-plist (notmuch-hello-saved-search-to-plist elem)) + (display-function (plist-get elem-plist :display-function)) + (result (if display-function + (funcall display-function + :current elem-plist + :option options) + (notmuch-hello-batch-message-count elem-plist options)))) + result)) query-list)))) (defun notmuch-hello-insert-buttons (searches) -- 1.7.10.4