mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-22 09:24:54 +01:00
emacs: hello: bugfix for saved searches defcustom
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.
This commit is contained in:
parent
c3d54c4b54
commit
ae2888015e
2 changed files with 90 additions and 90 deletions
|
@ -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
|
||||
|
@ -274,44 +364,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
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
Loading…
Reference in a new issue