(require 'notmuch-lib)
(require 'notmuch)
+(require 'notmuch-mua)
-(declare-function notmuch-search "notmuch" (query &optional oldest-first target-thread target-line))
+(declare-function notmuch-search "notmuch" (query &optional oldest-first target-thread target-line continuation))
(declare-function notmuch-folder-count "notmuch" (search))
(defcustom notmuch-hello-recent-searches-max 10
:type 'boolean
:group 'notmuch)
-(defcustom notmuch-hello-logo-background "#5f5f5f"
+(defface notmuch-hello-logo-background
+ '((((class color)
+ (background dark))
+ (:background "#5f5f5f"))
+ (((class color)
+ (background light))
+ (:background "white")))
"Background colour for the notmuch logo."
- :type 'color
:group 'notmuch)
-(defcustom notmuch-hello-jump-to-search nil
+(defcustom notmuch-hello-jump-to-search t
"Whether `notmuch-hello' should always jump to the search
field."
:type 'boolean
(defvar notmuch-hello-recent-searches nil)
(defun notmuch-hello-remember-search (search)
- (if (not (memq search notmuch-hello-recent-searches))
+ (if (not (member search notmuch-hello-recent-searches))
(push search notmuch-hello-recent-searches))
(if (> (length notmuch-hello-recent-searches)
notmuch-hello-recent-searches-max)
(when notmuch-hello-show-logo
(let ((image notmuch-hello-logo))
- ;; dme: Sorry, I don't know any other way to achieve this :-( The
- ;; notmuch logo uses transparency. That works out badly when
- ;; inserting the image into an emacs buffer, so force the
- ;; background colour of the image.
- (setq image (cons 'image (append (cdr image)
- `(:background ,notmuch-hello-logo-background))))
+ ;; The notmuch logo uses transparency. That can display poorly
+ ;; when inserting the image into an emacs buffer (black logo on
+ ;; a black background), so force the background colour of the
+ ;; image. We use a face to represent the colour so that
+ ;; `defface' can be used to declare the different possible
+ ;; colours, which depend on whether the frame has a light or
+ ;; dark background.
+ (setq image (cons 'image
+ (append (cdr image)
+ (list :background (face-background 'notmuch-hello-logo-background)))))
(insert-image image))
(widget-insert " "))
"clear")
(widget-insert "\n\n")
(let ((start (point))
- (key 0))
+ (nth 0))
(mapc '(lambda (search)
- (widget-insert (format "%2d: " key))
- (let ((widget-symbol (intern (format "notmuch-hello-search-%d" key))))
+ (let ((widget-symbol (intern (format "notmuch-hello-search-%d" nth))))
(set widget-symbol
(widget-create 'editable-field
- ;; Leave some space at the start
- ;; and end of the search boxes. 4
- ;; for the accelerator key. 1 for
- ;; the space before the `save'
- ;; button. 6 for the `save'
- ;; button.
- :size (max 8 (- (window-width) (* 2 notmuch-hello-indent)
- 4 1 6))
+ ;; Don't let the search boxes be
+ ;; less than 8 characters wide.
+ :size (max 8
+ (- (window-width)
+ ;; Leave some space
+ ;; at the start and
+ ;; end of the
+ ;; boxes.
+ (* 2 notmuch-hello-indent)
+ ;; 1 for the space
+ ;; before the
+ ;; `[save]' button. 6
+ ;; for the `[save]'
+ ;; button.
+ 1 6))
:action (lambda (widget &rest ignore)
(notmuch-hello-search (widget-value widget)))
search))
:notmuch-saved-search-widget widget-symbol
"save"))
(widget-insert "\n")
- (setq key (1+ key)))
+ (setq nth (1+ nth)))
notmuch-hello-recent-searches)
(indent-rigidly start (point) notmuch-hello-indent)))
(widget-insert "Type a search query and hit RET to view matching threads.\n")
(when notmuch-hello-recent-searches
(widget-insert "Hit RET to re-submit a previous search. Edit it first if you like.\n")
- (let ((searches (length notmuch-hello-recent-searches)))
- (widget-insert
- (if (eq 1 searches)
- "Key 0 acts as an accelerator for the previous query.\n"
- (format "Keys 0-%d act as accelerators for the previous queries.\n"
- (- searches 1)))))
(widget-insert "Save recent searches with the `save' button.\n"))
(when notmuch-hello-saved-searches
(widget-insert "Edit saved searches with the `edit' button.\n"))
(use-local-map widget-keymap)
(local-set-key "=" 'notmuch-hello-update)
+ (local-set-key "m" 'notmuch-mua-mail)
(local-set-key "q" '(lambda () (interactive) (kill-buffer (current-buffer))))
(local-set-key "s" 'notmuch-hello-goto-search)
(local-set-key "v" '(lambda () (interactive)
(message "notmuch version %s" (notmuch-version))))
- (loop for key from 0 to (- (length notmuch-hello-recent-searches) 1)
- do (let ((widget-symbol (intern (format "notmuch-hello-search-%d" key))))
- (local-set-key (number-to-string key)
- `(lambda ()
- (interactive)
- (notmuch-search (widget-value ,widget-symbol)
- notmuch-search-oldest-first
- nil nil #'notmuch-hello-search-continuation)))))
(widget-setup)
(if notmuch-hello-jump-to-search