mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-22 19:08:09 +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-search "notmuch" (&optional query oldest-first target-thread target-line continuation))
|
||||||
(declare-function notmuch-poll "notmuch" ())
|
(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
|
(defcustom notmuch-hello-recent-searches-max 10
|
||||||
"The number of recent searches to display."
|
"The number of recent searches to display."
|
||||||
:type 'integer
|
:type 'integer
|
||||||
|
@ -274,44 +364,6 @@ afterwards.")
|
||||||
(add-to-history 'notmuch-search-history search)))
|
(add-to-history 'notmuch-search-history search)))
|
||||||
(notmuch-search search notmuch-search-oldest-first))
|
(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)
|
(defun notmuch-hello-add-saved-search (widget)
|
||||||
(interactive)
|
(interactive)
|
||||||
(let ((search (widget-value
|
(let ((search (widget-value
|
||||||
|
|
|
@ -107,58 +107,6 @@ Note that the recommended way of achieving the same is using
|
||||||
(defvar notmuch-search-history nil
|
(defvar notmuch-search-history nil
|
||||||
"Variable to store notmuch searches history.")
|
"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")
|
(defcustom notmuch-archive-tags '("-inbox")
|
||||||
"List of tag changes to apply to a message or a thread when it is archived.
|
"List of tag changes to apply to a message or a thread when it is archived.
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue