emacs: Add `notmuch-show-forward-open-messages'.

Add a function to forward all open messages in the current view of a
thread. Bind this to "F".
This commit is contained in:
David Edmondson 2016-02-08 11:34:21 +00:00 committed by David Bremner
parent 3b63856568
commit a982773dfb
2 changed files with 59 additions and 0 deletions

View file

@ -427,6 +427,54 @@ the From: address first."
(message-hide-headers) (message-hide-headers)
(set-buffer-modified-p nil))) (set-buffer-modified-p nil)))
(defun notmuch-mua-new-forward-messages (messages &optional prompt-for-sender)
"Compose a new message forwarding MESSAGES.
If PROMPT-FOR-SENDER is non-nil, the user will be prompteed for
the From: address."
(let* ((other-headers
(when (or prompt-for-sender notmuch-always-prompt-for-sender)
(list (cons 'From (notmuch-mua-prompt-for-sender)))))
forward-subject) ;; Comes from the first message and is
;; applied later.
;; Generate the template for the outgoing message.
(notmuch-mua-mail nil "" other-headers nil (notmuch-mua-get-switch-function))
(save-excursion
;; Insert all of the forwarded messages.
(mapc (lambda (id)
(let ((temp-buffer (get-buffer-create
(concat "*notmuch-fwd-raw-" id "*"))))
;; Get the raw version of this message in the buffer.
(with-current-buffer temp-buffer
(erase-buffer)
(let ((coding-system-for-read 'no-conversion))
(call-process notmuch-command nil t nil "show" "--format=raw" id))
;; Because we process the messages in reverse order,
;; always generate a forwarded subject, then use the
;; last (i.e. first) one.
(setq forward-subject (message-make-forward-subject)))
;; Make a copy ready to be forwarded in the
;; composition buffer.
(message-forward-make-body temp-buffer)
;; Kill the temporary buffer.
(kill-buffer temp-buffer)))
;; `message-forward-make-body' always puts the message at
;; the top, so do them in reverse order.
(reverse messages))
;; Add in the appropriate subject.
(save-restriction
(message-narrow-to-headers)
(message-remove-header "Subject")
(message-add-header (concat "Subject: " forward-subject)))
;; `message-forward-make-body' shows the User-agent header. Hide
;; it again.
(message-hide-headers)
(set-buffer-modified-p nil))))
(defun notmuch-mua-new-reply (query-string &optional prompt-for-sender reply-all) (defun notmuch-mua-new-reply (query-string &optional prompt-for-sender reply-all)
"Compose a reply to the message identified by QUERY-STRING. "Compose a reply to the message identified by QUERY-STRING.

View file

@ -1431,6 +1431,7 @@ reset based on the original query."
(define-key map (kbd "<backtab>") 'notmuch-show-previous-button) (define-key map (kbd "<backtab>") 'notmuch-show-previous-button)
(define-key map (kbd "TAB") 'notmuch-show-next-button) (define-key map (kbd "TAB") 'notmuch-show-next-button)
(define-key map "f" 'notmuch-show-forward-message) (define-key map "f" 'notmuch-show-forward-message)
(define-key map "F" 'notmuch-show-forward-open-messages)
(define-key map "l" 'notmuch-show-filter-thread) (define-key map "l" 'notmuch-show-filter-thread)
(define-key map "r" 'notmuch-show-reply-sender) (define-key map "r" 'notmuch-show-reply-sender)
(define-key map "R" 'notmuch-show-reply) (define-key map "R" 'notmuch-show-reply)
@ -1858,6 +1859,16 @@ any effects from previous calls to
(with-current-notmuch-show-message (with-current-notmuch-show-message
(notmuch-mua-new-forward-message prompt-for-sender))) (notmuch-mua-new-forward-message prompt-for-sender)))
(put 'notmuch-show-forward-open-messages 'notmuch-prefix-doc
"... and prompt for sender")
(defun notmuch-show-forward-open-messages (&optional prompt-for-sender)
"Forward the currently open messages."
(interactive "P")
(let ((open-messages (notmuch-show-get-message-ids-for-open-messages)))
(unless open-messages
(error "No open messages to forward."))
(notmuch-mua-new-forward-messages open-messages prompt-for-sender)))
(defun notmuch-show-next-message (&optional pop-at-end) (defun notmuch-show-next-message (&optional pop-at-end)
"Show the next message. "Show the next message.