unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
blob fdd91c0bd96ef6f8dfeb507b76d6f6d3674e9f7d 5393 bytes (raw)
name: emacs/notmuch-message.el 	 # note: path name is non-authoritative(*)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
 
;;; notmuch-message.el --- message-mode functions specific to notmuch
;;
;; Copyright © Jesse Rosenthal
;;
;; This file is part of Notmuch.
;;
;; Notmuch is free software: you can redistribute it and/or modify it
;; under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;;
;; Notmuch is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
;; General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with Notmuch.  If not, see <http://www.gnu.org/licenses/>.
;;
;; Authors: Jesse Rosenthal <jrosenthal@jhu.edu>

;;; Code:

(require 'message)
(require 'notmuch-tag)
(require 'notmuch-mua)

(declare-function notmuch-show-get-message-id "notmuch-show" (&optional bare))

(defcustom notmuch-message-replied-tags '("+replied")
  "List of tag changes to apply to a message when it has been replied to.

Tags starting with \"+\" (or not starting with either \"+\" or
\"-\") in the list will be added, and tags starting with \"-\"
will be removed from the message being replied to.

For example, if you wanted to add a \"replied\" tag and remove
the \"inbox\" and \"todo\" tags, you would set:
    (\"+replied\" \"-inbox\" \"-todo\"\)"
  :type '(repeat string)
  :group 'notmuch-send)

(defcustom notmuch-message-draft-tags '("+draft")
  "List of tags changes to apply to a draft message when it is saved in the database.

Tags starting with \"+\" (or not starting with either \"+\" or
\"-\") in the list will be added, and tags starting with \"-\"
will be removed from the message being stored.

For example, if you wanted to give the message a \"draft\" tag
but not the (normally added by default) \"inbox\" tag, you would
set:
    (\"+draft\" \"-inbox\")"
  :type '(repeat string)
  :group 'notmuch-send)

(defcustom notmuch-message-draft-folder "drafts"
  "Folder to save draft messages in.

This should be specified relative to the root of the notmuch
database. It will be created if necessary."
  :type 'string
  :group 'notmuch-send)

(defun notmuch-message-mark-replied ()
  ;; get the in-reply-to header and parse it for the message id.
  (let ((rep (mail-header-parse-addresses (message-field-value "In-Reply-To"))))
    (when (and notmuch-message-replied-tags rep)
      (notmuch-tag (notmuch-id-to-query (car (car rep)))
	       (notmuch-tag-change-list notmuch-message-replied-tags)))))

(defun notmuch-message-postpone ()
  "Save the current draft message in the notmuch database.

This saves the current message in the database with tags
`notmuch-message-draft-tags` (in addition to any default tags
applied to newly inserted messages)."
  ;; This is taken from message-do-fcc but modified for our needs.  In
  ;; particular we don't want to process other fcc lines, nor remove
  ;; them. Note some of the following may not be needed -- I tried to
  ;; stay close to the original function.
  (interactive)
  (let ((case-fold-search t)
	(buf (current-buffer))
	(mml-externalize-attachments nil))
    (with-current-buffer (get-buffer-create " *message temp*")
      (erase-buffer)
      (insert-buffer-substring buf)
      (message-encode-message-body)
      (save-restriction
	(message-narrow-to-headers)
	(let ((mail-parse-charset message-default-charset)
	      (rfc2047-header-encoding-alist
	       (cons '("Newsgroups" . default)
		     rfc2047-header-encoding-alist)))
	  (mail-encode-encoded-word-buffer)))
      (goto-char (point-min))
      (when (re-search-forward
	     (concat "^" (regexp-quote mail-header-separator) "$")
	     nil t)
	(replace-match "" t t ))

      ;; Unless the user has entered a message-id manually the message
      ;; does not have one -- thus notmuch will use the sha1 of the
      ;; message. Hence we should only get a collision if the message
      ;; is identical to a previous draft. In this case we should
      ;; remove the deleted tag, but it is not clear howto.
      (apply 'notmuch-call-notmuch-process :stdin-string (buffer-string)
	     "insert" "--create-folder"
	     (concat "--folder=" notmuch-message-draft-folder)
	     notmuch-message-draft-tags)))
  ;; The function notmuch-call-notmuch-process signals an error on failure, so
  ;; to get to this point it must have succeeded.
  (set-buffer-modified-p nil)
  (kill-buffer))

(defun notmuch-message-resume (&optional id)
  "View the original source of the current message."
  (interactive)
  (let* ((id (or id (notmuch-show-get-message-id)))
	 (buf (get-buffer-create (concat "*notmuch-draft-" id "*")))
	 (inhibit-read-only t))
    (switch-to-buffer buf)
    (setq buffer-read-only nil)
    (erase-buffer)
    (let ((coding-system-for-read 'no-conversion))
      (call-process notmuch-command nil t nil "show" "--format=raw" id))
    (mime-to-mml)
    (goto-char (point-min))
    (when (re-search-forward "^$" nil t)
      (replace-match mail-header-separator t t))
    (notmuch-message-mode)
    (set-buffer-modified-p t)
    ;; Delete the message (since we can't do this yet just tag it deleted).
    (notmuch-tag id '("+deleted"))))


(add-hook 'message-send-hook 'notmuch-message-mark-replied)

(provide 'notmuch-message)

;;; notmuch-message.el ends here

debug log:

solving fdd91c0 ...
found fdd91c0 in https://yhetil.org/notmuch/1464915472-5669-1-git-send-email-markwalters1009@gmail.com/
found d437b85 in https://yhetil.org/notmuch.git/
preparing index
index prepared:
100644 d437b8574b925945169cb0b0f393690dcbff4c8e	emacs/notmuch-message.el

applying [1/1] https://yhetil.org/notmuch/1464915472-5669-1-git-send-email-markwalters1009@gmail.com/
diff --git a/emacs/notmuch-message.el b/emacs/notmuch-message.el
index d437b85..fdd91c0 100644

Checking patch emacs/notmuch-message.el...
Applied patch emacs/notmuch-message.el cleanly.

index at:
100644 fdd91c0bd96ef6f8dfeb507b76d6f6d3674e9f7d	emacs/notmuch-message.el

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).