(let ((map (make-sparse-keymap)))
(define-key map "?" 'notmuch-help)
(define-key map "q" 'kill-this-buffer)
- (define-key map "x" 'kill-this-buffer)
(define-key map (kbd "C-p") 'notmuch-show-previous-line)
(define-key map (kbd "C-n") 'notmuch-show-next-line)
(define-key map (kbd "M-TAB") 'notmuch-show-previous-button)
(define-key map "v" 'notmuch-show-view-all-mime-parts)
(define-key map "-" 'notmuch-show-remove-tag)
(define-key map "+" 'notmuch-show-add-tag)
+ (define-key map "X" 'notmuch-show-mark-read-then-archive-then-exit)
+ (define-key map "x" 'notmuch-show-archive-thread-then-exit)
(define-key map "A" 'notmuch-show-mark-read-then-archive-thread)
(define-key map "a" 'notmuch-show-archive-thread)
(define-key map "p" 'notmuch-show-previous-message)
By advancing forward until reaching a visible character.
-Unlike builtin `next-line' this version accepts no arguments."
+Unlike builtin `previous-line' this version accepts no arguments."
(interactive)
(set 'this-command 'previous-line)
(call-interactively 'previous-line)
(interactive)
(notmuch-show-archive-thread-maybe-mark-read nil))
+(defun notmuch-show-archive-thread-then-exit ()
+ "Archive each message in thread, then exit back to search results."
+ (interactive)
+ (notmuch-show-archive-thread)
+ (kill-this-buffer))
+
+(defun notmuch-show-mark-read-then-archive-then-exit ()
+ "Remove unread tags from thread, then archive and exit to search results."
+ (interactive)
+ (notmuch-show-mark-read-then-archive-thread)
+ (kill-this-buffer))
+
(defun notmuch-show-view-raw-message ()
"View the raw email of the current message."
(interactive)
(goto-char (button-start (previous-button (point)))))
(defun notmuch-toggle-invisible-action (cite-button)
- (let ((invis-spec (button-get button 'invisibility-spec)))
+ (let ((invis-spec (button-get cite-button 'invisibility-spec)))
(if (invisible-p invis-spec)
(remove-from-invisibility-spec invis-spec)
(add-to-invisibility-spec invis-spec)
(defun notmuch-help ()
"Display help for the current notmuch mode."
(interactive)
- (let ((mode major-mode))
- (with-help-window (help-buffer)
- (princ (substitute-command-keys (notmuch-substitute-command-keys (documentation mode t)))))))
+ (let* ((mode major-mode)
+ (doc (substitute-command-keys (notmuch-substitute-command-keys (documentation mode t)))))
+ (with-current-buffer (generate-new-buffer "*notmuch-help*")
+ (insert doc)
+ (goto-char (point-min))
+ (set-buffer-modified-p nil)
+ (view-buffer (current-buffer) 'kill-buffer-if-not-modified))))
;;;###autoload
(defun notmuch-show-mode ()
(defun notmuch-search-next-thread ()
"Select the next thread in the search results."
(interactive)
- (next-line))
+ (forward-line 1))
(defun notmuch-search-previous-thread ()
"Select the previous thread in the search results."
(interactive)
- (previous-line))
+ (forward-line -1))
(defun notmuch-search-last-thread ()
"Select the last thread in the search results."
participants in the thread, a representative subject line, and
any tags).
-By default, pressing RET on any line displays that thread. The
-'+' and '-' keys can be used to add or remove tags from a
-thread. The 'a' key is a convenience key for archiving a
-thread (removing the \"inbox\" tag). The '*' key can be used to
-add or remove a tag from all threads in the current buffer.
+Pressing \\[notmuch-search-show-thread] on any line displays that thread. The '\\[notmuch-search-add-tag]' and '\\[notmuch-search-remove-tag]'
+keys can be used to add or remove tags from a thread. The '\\[notmuch-search-archive-thread]' key
+is a convenience for archiving a thread (removing the \"inbox\"
+tag). The '\\[notmuch-search-operate-all]' key can be used to add or remove a tag from all
+threads in the current buffer.
-Other useful commands are 'f' for filtering the current search
-based on an additional query string, 't' for filtering to include
-only messages with a given tag, and 's' to execute a new, global
+Other useful commands are '\\[notmuch-search-filter]' for filtering the current search
+based on an additional query string, '\\[notmuch-search-filter-by-tag]' for filtering to include
+only messages with a given tag, and '\\[notmuch-search]' to execute a new, global
search.
Complete list of currently available key bindings:
(if (not notmuch-tag-face-alist)
(add-to-list 'notmuch-search-font-lock-keywords (list
"(\\([^)]*\\))$" '(1 'notmuch-tag-face)))
- (progn
- (setq notmuch-search-tags (mapcar 'car notmuch-tag-face-alist))
- (loop for notmuch-search-tag in notmuch-search-tags
- do (add-to-list 'notmuch-search-font-lock-keywords (list
- (concat "([^)]*\\(" notmuch-search-tag "\\)[^)]*)$")
- `(1 ,(cdr (assoc notmuch-search-tag notmuch-tag-face-alist))))))))
+ (let ((notmuch-search-tags (mapcar 'car notmuch-tag-face-alist)))
+ (loop for notmuch-search-tag in notmuch-search-tags
+ do (add-to-list 'notmuch-search-font-lock-keywords (list
+ (concat "([^)]*\\(" notmuch-search-tag "\\)[^)]*)$")
+ `(1 ,(cdr (assoc notmuch-search-tag notmuch-tag-face-alist))))))))
(set (make-local-variable 'font-lock-defaults)
'(notmuch-search-font-lock-keywords t)))
(defvar notmuch-folder-mode-map
(let ((map (make-sparse-keymap)))
- (define-key map "n" 'next-line)
- (define-key map "p" 'previous-line)
+ (define-key map "?" 'notmuch-help)
(define-key map "x" 'kill-this-buffer)
(define-key map "q" 'kill-this-buffer)
- (define-key map "s" 'notmuch-search)
- (define-key map (kbd "RET") 'notmuch-folder-show-search)
- (define-key map "<" 'beginning-of-buffer)
+ (define-key map ">" 'notmuch-folder-last)
+ (define-key map "<" 'notmuch-folder-first)
(define-key map "=" 'notmuch-folder)
- (define-key map "?" 'notmuch-help)
+ (define-key map "s" 'notmuch-search)
(define-key map [mouse-1] 'notmuch-folder-show-search)
+ (define-key map (kbd "RET") 'notmuch-folder-show-search)
+ (define-key map "p" 'notmuch-folder-previous)
+ (define-key map "n" 'notmuch-folder-next)
map)
"Keymap for \"notmuch folder\" buffers.")
(defun notmuch-folder-mode ()
"Major mode for showing notmuch 'folders'.
-This buffer contains a list of messages counts returned by a
-customizable set of searches of your email archives. Each line
-in the buffer shows the search terms and the resulting message count.
+This buffer contains a list of message counts returned by a
+customizable set of searches of your email archives. Each line in
+the buffer shows the name of a saved search and the resulting
+message count.
Pressing RET on any line opens a search window containing the
-results for the search terms in that line.
+results for the saved search on that line.
+
+Here is an example of how the search list could be
+customized, (the following text would be placed in your ~/.emacs
+file):
+
+(setq notmuch-folders '((\"inbox\" . \"tag:inbox\")
+ (\"unread\" . \"tag:inbox AND tag:unread\")
+ (\"notmuch\" . \"tag:inbox AND to:notmuchmail.org\")))
+
+Of course, you can have any number of folders, each configured
+with any supported search terms (see \"notmuch help search-terms\").
+
+Currently available key bindings:
\\{notmuch-folder-mode-map}"
(interactive)
mode-name "notmuch-folder")
(setq buffer-read-only t))
+(defun notmuch-folder-next ()
+ "Select the next folder in the list."
+ (interactive)
+ (forward-line 1)
+ (if (eobp)
+ (forward-line -1)))
+
+(defun notmuch-folder-previous ()
+ "Select the previous folder in the list."
+ (interactive)
+ (forward-line -1))
+
+(defun notmuch-folder-first ()
+ "Select the first folder in the list."
+ (interactive)
+ (goto-char (point-min)))
+
+(defun notmuch-folder-last ()
+ "Select the last folder in the list."
+ (interactive)
+ (goto-char (point-max))
+ (forward-line -1))
+
(defun notmuch-folder-add (folders)
(if folders
(let ((name (car (car folders)))