From: Mark Walters Date: Wed, 16 Apr 2014 21:21:53 +0000 (+0100) Subject: [PATCH 1/1] emacs: hello: bugfix for saved searches defcustom X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=d6712e5bc5c553c699c6a8de0f1eb6bfcabd9986;p=notmuch-archives.git [PATCH 1/1] emacs: hello: bugfix for saved searches defcustom --- diff --git a/f7/6020d143d11bc29ddc3e4cbbd2a00e4bebbb14 b/f7/6020d143d11bc29ddc3e4cbbd2a00e4bebbb14 new file mode 100644 index 000000000..8ab2e7c0d --- /dev/null +++ b/f7/6020d143d11bc29ddc3e4cbbd2a00e4bebbb14 @@ -0,0 +1,297 @@ +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 4824D431FAE + for ; Wed, 16 Apr 2014 14:22:12 -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 3QEg4dbMyX7i for ; + Wed, 16 Apr 2014 14:22:06 -0700 (PDT) +Received: from mail-ee0-f51.google.com (mail-ee0-f51.google.com + [74.125.83.51]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (No client + certificate requested) by olra.theworths.org (Postfix) with ESMTPS id + 6FF00431FBD for ; Wed, 16 Apr 2014 14:22:06 -0700 + (PDT) +Received: by mail-ee0-f51.google.com with SMTP id c13so9305363eek.38 + for ; Wed, 16 Apr 2014 14:22:05 -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=ogfNeT/6I436Njxbadw6FF11sp30sY+nXYVTsfgFkyk=; + b=a1z+I3G9v1MQ56tptaZVv4V1g+OoWXmTXEWXtejmu0co+xuT3V0Rvs22S5iHxbYzOm + 5CsXteteEZcesEdI9Bl22wNS3SU0kjsvBtqOvtCHjjXbExpXLG0BDoi6yhNj/cWo4U8/ + QGvTum+pD9Nl39OY2v82Wxf6W8gXV2Oo3WNF2EiOcyEQmKyX8fB+5hM43SqhQeXLTZzS + m70gf0YLufJnFZsQz07IfxfPk4ukXZZRylx6fW1VztPgBjQZlDg/omG2vlM5qPWXml3r + 2sJ04QCHEpNvcc6m1AxA7g87EEP1VIQct/8reokUD3T9JBR+gHVVjcsFN6J6tGq09vL+ + zdwQ== +X-Received: by 10.14.194.133 with SMTP id m5mr8020242een.38.1397683324120; + Wed, 16 Apr 2014 14:22:04 -0700 (PDT) +Received: from localhost ([217.17.137.178]) + by mx.google.com with ESMTPSA id o4sm61326273eef.20.2014.04.16.14.22.03 + for + (version=TLSv1.2 cipher=RC4-SHA bits=128/128); + Wed, 16 Apr 2014 14:22:03 -0700 (PDT) +From: Mark Walters +To: notmuch@notmuchmail.org +Subject: [PATCH 1/1] emacs: hello: bugfix for saved searches defcustom +Date: Wed, 16 Apr 2014 22:21:53 +0100 +Message-Id: <1397683313-28268-2-git-send-email-markwalters1009@gmail.com> +X-Mailer: git-send-email 1.7.10.4 +In-Reply-To: <1397683313-28268-1-git-send-email-markwalters1009@gmail.com> +References: <1397683313-28268-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: Wed, 16 Apr 2014 21:22:12 -0000 + +The recent changes for saved searches introduced a bug when notmuch +was loaded after the saved search was defined. This was caused by a +utility function not being defined when the defcustom was loaded. + +Fix this by moving some code around: the defcustom is moved into +notmuch-hello (which is a more natural place anyway), and the utility +functions are moved before the defcustom in notmuch-hello. We are +rather constrained as the defcustom for saved searches is the first +variable in the notmuch-hello customize window; to avoid moving this +customize the defcustom needs to be the first defcustom in +notmuch-hello, and the utility functions come before that. + +This patch also renames one of the utility functions from +notmuch--saved-searches-to-plist to +notmuch-hello--saved-searches-to-plist (as it is purely local to +notmuch-hello) and corrects a couple of typo/spelling mistakes pointed +out by Tomi. +--- + emacs/notmuch-hello.el | 128 ++++++++++++++++++++++++++++++++++-------------- + emacs/notmuch-lib.el | 52 -------------------- + 2 files changed, 90 insertions(+), 90 deletions(-) + +diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el +index 4900a24..a7a8e20 100644 +--- a/emacs/notmuch-hello.el ++++ b/emacs/notmuch-hello.el +@@ -29,6 +29,96 @@ + (declare-function notmuch-search "notmuch" (&optional query oldest-first target-thread target-line continuation)) + (declare-function notmuch-poll "notmuch" ()) + ++(defun notmuch-saved-search-get (saved-search field) ++ "Get FIELD from SAVED-SEARCH. ++ ++If SAVED-SEARCH is a plist, this is just `plist-get', but for ++backwards compatibility, this also deals with the two other ++possible formats for SAVED-SEARCH: cons cells (NAME . QUERY) and ++lists (NAME QUERY COUNT-QUERY)." ++ (cond ++ ((keywordp (car saved-search)) ++ (plist-get saved-search field)) ++ ;; It is not a plist so it is an old-style entry. ++ ((consp (cdr saved-search)) ;; It is a list (NAME QUERY COUNT-QUERY) ++ (case field ++ (:name (first saved-search)) ++ (:query (second saved-search)) ++ (:count-query (third saved-search)) ++ (t nil))) ++ (t ;; It is a cons-cell (NAME . QUERY) ++ (case field ++ (:name (car saved-search)) ++ (:query (cdr saved-search)) ++ (t nil))))) ++ ++(defun notmuch-hello-saved-search-to-plist (saved-search) ++ "Return a copy of SAVED-SEARCH in plist form. ++ ++If saved search is a plist then just return a copy. In other ++cases, for backwards compatibility, convert to plist form and ++return that." ++ (if (keywordp (car saved-search)) ++ (copy-seq saved-search) ++ (let ((fields (list :name :query :count-query)) ++ plist-search) ++ (dolist (field fields plist-search) ++ (let ((string (notmuch-saved-search-get saved-search field))) ++ (when string ++ (setq plist-search (append plist-search (list field string))))))))) ++ ++(defun notmuch-hello--saved-searches-to-plist (symbol) ++ "Extract a saved-search variable into plist form. ++ ++The new style saved search is just a plist, but for backwards ++compatibility we use this function to extract old style saved ++searches so they still work in customize." ++ (let ((saved-searches (default-value symbol))) ++ (mapcar #'notmuch-hello-saved-search-to-plist saved-searches))) ++ ++(define-widget 'notmuch-saved-search-plist 'list ++ "A single saved search property list." ++ :tag "Saved Search" ++ :args '((list :inline t ++ :format "%v" ++ (group :format "%v" :inline t (const :format " Name: " :name) (string :format "%v")) ++ (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)))))) ++ ++(defcustom notmuch-saved-searches '((:name "inbox" :query "tag:inbox") ++ (:name "unread" :query "tag:unread")) ++ "A list of saved searches to display. ++ ++The saved search can be given in 3 forms. The preferred way is as ++a plist. Supported properties are ++ ++ :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. ++ ++Other accepted forms are a cons cell of the form (NAME . QUERY) ++or a list of the form (NAME QUERY COUNT-QUERY)." ++;; The saved-search format is also used by the all-tags notmuch-hello ++;; section. This section generates its own saved-search list in one of ++;; the latter two forms. ++ ++ :get 'notmuch-hello--saved-searches-to-plist ++ :type '(repeat notmuch-saved-search-plist) ++ :tag "List of Saved Searches" ++ :group 'notmuch-hello) ++ + (defcustom notmuch-hello-recent-searches-max 10 + "The number of recent searches to display." + :type 'integer +@@ -269,44 +359,6 @@ afterwards.") + (add-to-history 'notmuch-search-history search))) + (notmuch-search search notmuch-search-oldest-first)) + +-(defun notmuch-saved-search-get (saved-search field) +- "Get FIELD from SAVED-SEARCH. +- +-If SAVED-SEARCH is a plist, this is just `plist-get', but for +-backwards compatibility, this also deals with the two other +-possible formats for SAVED-SEARCH: cons cells (NAME . QUERY) and +-lists (NAME QUERY COUNT-QUERY)." +- (cond +- ((keywordp (car saved-search)) +- (plist-get saved-search field)) +- ;; It is not a plist so it is an old-style entry. +- ((consp (cdr saved-search)) ;; It is a list (NAME QUERY COUNT-QUERY) +- (case field +- (:name (first saved-search)) +- (:query (second saved-search)) +- (:count-query (third saved-search)) +- (t nil))) +- (t ;; It is a cons-cell (NAME . QUERY) +- (case field +- (:name (car saved-search)) +- (:query (cdr saved-search)) +- (t nil))))) +- +-(defun notmuch-hello-saved-search-to-plist (saved-search) +- "Return a copy of SAVED-SEARCH in plist form. +- +-If saved search is a plist then just return a copy. In other +-cases, for backwards compatability, convert to plist form and +-return that." +- (if (keywordp (car saved-search)) +- (copy-seq saved-search) +- (let ((fields (list :name :query :count-query)) +- plist-search) +- (dolist (field fields plist-search) +- (let ((string (notmuch-saved-search-get saved-search field))) +- (when string +- (setq plist-search (append plist-search (list field string))))))))) +- + (defun notmuch-hello-add-saved-search (widget) + (interactive) + (let ((search (widget-value +diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el +index 3a3c69d..2941da3 100644 +--- a/emacs/notmuch-lib.el ++++ b/emacs/notmuch-lib.el +@@ -107,58 +107,6 @@ Note that the recommended way of achieving the same is using + (defvar notmuch-search-history nil + "Variable to store notmuch searches history.") + +-(defun notmuch--saved-searches-to-plist (symbol) +- "Extract a saved-search variable into plist form. +- +-The new style saved search is just a plist, but for backwards +-compatatibility we use this function to extract old style saved +-searches so they still work in customize." +- (let ((saved-searches (default-value symbol))) +- (mapcar #'notmuch-hello-saved-search-to-plist saved-searches))) +- +-(define-widget 'notmuch-saved-search-plist 'list +- "A single saved search property list." +- :tag "Saved Search" +- :args '((list :inline t +- :format "%v" +- (group :format "%v" :inline t (const :format " Name: " :name) (string :format "%v")) +- (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)))))) +- +-(defcustom notmuch-saved-searches '((:name "inbox" :query "tag:inbox") +- (:name "unread" :query "tag:unread")) +- "A list of saved searches to display. +- +-The saved search can be given in 3 forms. The preferred way is as +-a plist. Supported properties are +- +- :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. +- +-Other accepted forms are a cons cell of the form (NAME . QUERY) +-or a list of the form (NAME QUERY COUNT-QUERY)." +-;; The saved-search format is also used by the all-tags notmuch-hello +-;; section. This section generates its own saved-search list in one of +-;; the latter two forms. +- +- :get 'notmuch--saved-searches-to-plist +- :type '(repeat notmuch-saved-search-plist) +- :tag "List of Saved Searches" +- :group 'notmuch-hello) +- + (defcustom notmuch-archive-tags '("-inbox") + "List of tag changes to apply to a message or a thread when it is archived. + +-- +1.7.10.4 +