:type 'boolean
:group 'notmuch)
+(defun notmuch-sort-saved-searches (alist)
+ "Generate an alphabetically sorted saved searches alist."
+ (sort alist (lambda (a b) (string< (car a) (car b)))))
+
+(defcustom notmuch-saved-search-sort-function nil
+ "Function used to sort the saved searches for the notmuch-hello view.
+
+This variable controls how saved searches should be sorted. No
+sorting (nil) displays the saved searches in the order they are
+stored in `notmuch-saved-searches'. Sort alphabetically sorts the
+saved searches in alphabetical order. Custom sort function should
+be a function or a lambda expression that takes the saved
+searches alist as a parameter, and returns a new saved searches
+alist to be used."
+ :type '(choice (const :tag "No sorting" nil)
+ (const :tag "Sort alphabetically" notmuch-sort-saved-searches)
+ (function :tag "Custom sort function"
+ :value notmuch-sort-saved-searches))
+ :group 'notmuch)
+
(defvar notmuch-hello-indent 4
"How much to indent non-headers.")
collect elem))
;; Add the new one.
(customize-save-variable 'notmuch-saved-searches
- (push (cons name search)
- notmuch-saved-searches))
+ (add-to-list 'notmuch-saved-searches
+ (cons name search) t))
(message "Saved '%s' as '%s'." search name)
(notmuch-hello-update)))
(widest (max saved-widest alltags-widest)))
(when saved-alist
+ ;; Sort saved searches if required.
+ (when notmuch-saved-search-sort-function
+ (setq saved-alist
+ (funcall notmuch-saved-search-sort-function saved-alist)))
(widget-insert "\nSaved searches: ")
(widget-create 'push-button
:notify (lambda (&rest ignore)
(length "Search: ")))
:action (lambda (widget &rest ignore)
(notmuch-hello-search (widget-value widget))))
+ ;; add an invisible space to make `widget-end-of-line' ignore
+ ;; trailine spaces in the search widget field
+ (widget-insert " ")
+ (put-text-property (1- (point)) (point) 'invisible t)
(widget-insert "\n")
(when notmuch-hello-recent-searches