X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=notmuch.el;h=25096513f57e092ae4e1d47f7bdb1693541bd758;hp=a8e523d5914443bf3fdbef027e72e9bfcf238433;hb=8a3352e619de6d347e1eb42011e65a85f0f4c7ca;hpb=62993c76227376aca1b1958a7b82bc99ed76ea98 diff --git a/notmuch.el b/notmuch.el index a8e523d5..25096513 100644 --- a/notmuch.el +++ b/notmuch.el @@ -55,7 +55,6 @@ (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) @@ -70,6 +69,8 @@ (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) @@ -158,7 +159,7 @@ Unlike builtin `next-line' this version accepts no arguments." 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) @@ -273,6 +274,18 @@ buffer." (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) @@ -545,7 +558,7 @@ which this thread was originally shown." (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) @@ -826,9 +839,13 @@ For a mouse binding, return nil." (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 () @@ -1003,12 +1020,12 @@ thread from that buffer can be show when done with this one)." (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." @@ -1049,15 +1066,15 @@ number of matched messages and total messages in the thread, 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: @@ -1077,12 +1094,11 @@ 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))) @@ -1333,16 +1349,17 @@ current search results AND that are tagged with the given tag." (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.") @@ -1356,12 +1373,26 @@ current search results AND that are tagged with the given tag." (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) @@ -1373,6 +1404,29 @@ results for the search terms in that line. 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)))