X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=notmuch.el;h=f3adfcf5cb1ed2a7c67e5dd6a9b02e8c493e1272;hp=28ef5c6b4e8af4729db502a83a2fa0ddb717737e;hb=6945e7e103fdc10cb676571b313eac5abd62d0c6;hpb=9ec9662ec74e1ed2f569d77008324d2a272749ae diff --git a/notmuch.el b/notmuch.el index 28ef5c6b..f3adfcf5 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) @@ -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) @@ -378,7 +391,7 @@ point either forward or backward to the next visible character when a command ends with point on an invisible character). Emits an error if point is not within a valid message, (that is -not pattern of `notmuch-show-message-begin-regexp' could be found +no pattern of `notmuch-show-message-begin-regexp' could be found by searching backward)." (beginning-of-line) (if (not (looking-at notmuch-show-message-begin-regexp)) @@ -395,22 +408,35 @@ by searching backward)." (not (re-search-forward notmuch-show-message-begin-regexp nil t))))) (defun notmuch-show-message-unread-p () - "Preficate testing whether current message is unread." + "Predicate testing whether current message is unread." (member "unread" (notmuch-show-get-tags))) +(defun notmuch-show-message-open-p () + "Predicate testing whether current message is open (body is visible)." + (let ((btn (previous-button (point) t))) + (while (not (button-has-type-p btn 'notmuch-button-body-toggle-type)) + (setq btn (previous-button (button-start btn)))) + (not (invisible-p (button-get btn 'invisibility-spec))))) + (defun notmuch-show-next-message () "Advance to the beginning of the next message in the buffer. Moves to the last visible character of the current message if -already on the last message in the buffer." +already on the last message in the buffer. + +Returns nil if already on the last message in the buffer." (interactive) (notmuch-show-move-to-current-message-summary-line) (if (re-search-forward notmuch-show-message-begin-regexp nil t) - (notmuch-show-move-to-current-message-summary-line) + (progn + (notmuch-show-move-to-current-message-summary-line) + (recenter 0) + t) (goto-char (- (point-max) 1)) (while (point-invisible-p) - (backward-char))) - (recenter 0)) + (backward-char)) + (recenter 0) + nil)) (defun notmuch-show-find-next-message () "Returns the position of the next message in the buffer. @@ -438,14 +464,9 @@ there are no more unread messages past the current point." (notmuch-show-next-message))) (defun notmuch-show-next-open-message () - "Advance to the next message which is not hidden. - -If read messages are currently hidden, advance to the next unread -message. Otherwise, advance to the next message." - (if (or (memq 'notmuch-show-body-read buffer-invisibility-spec) - (assq 'notmuch-show-body-read buffer-invisibility-spec)) - (notmuch-show-next-unread-message) - (notmuch-show-next-message))) + "Advance to the next open message (that is, body is not invisible)." + (while (and (notmuch-show-next-message) + (not (notmuch-show-message-open-p))))) (defun notmuch-show-previous-message () "Backup to the beginning of the previous message in the buffer. @@ -545,7 +566,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) @@ -705,11 +726,10 @@ which this thread was originally shown." (re-search-forward notmuch-show-header-begin-regexp) (forward-line) (let ((beg (point-marker)) + (summary-end (copy-marker (line-beginning-position 2))) (btn nil)) - (end-of-line) - ; Inverse video for subject - (overlay-put (make-overlay beg (point)) 'face '(:inverse-video t)) - (setq btn (make-button beg (point) :type 'notmuch-button-body-toggle-type)) + (overlay-put (make-overlay beg summary-end) 'face 'notmuch-message-summary-face) + (setq btn (make-button beg summary-end :type 'notmuch-button-body-toggle-type)) (forward-line 1) (end-of-line) (let ((beg-hidden (point-marker))) @@ -920,7 +940,7 @@ thread from that buffer can be show when done with this one)." (erase-buffer) (goto-char (point-min)) (save-excursion - (call-process notmuch-command nil t nil "show" thread-id) + (call-process notmuch-command nil t nil "show" "--entire-thread" thread-id) (notmuch-show-markup-messages) ) (run-hooks 'notmuch-show-hook) @@ -1025,6 +1045,12 @@ thread from that buffer can be show when done with this one)." (interactive) (goto-char (point-min))) +(defface notmuch-message-summary-face + '((((class color) (background light)) (:background "#f0f0f0")) + (((class color) (background dark)) (:background "#303030"))) + "Face for the single-line message summary in notmuch-show-mode." + :group 'notmuch) + (defface notmuch-tag-face '((((class color) (background dark)) @@ -1081,12 +1107,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)))