aboutsummaryrefslogtreecommitdiffstats
path: root/_spacemacs.d/local/mu4e/mu4e-draft.el
diff options
context:
space:
mode:
Diffstat (limited to '_spacemacs.d/local/mu4e/mu4e-draft.el')
-rw-r--r--_spacemacs.d/local/mu4e/mu4e-draft.el61
1 files changed, 41 insertions, 20 deletions
diff --git a/_spacemacs.d/local/mu4e/mu4e-draft.el b/_spacemacs.d/local/mu4e/mu4e-draft.el
index c41e38d..d7df6e0 100644
--- a/_spacemacs.d/local/mu4e/mu4e-draft.el
+++ b/_spacemacs.d/local/mu4e/mu4e-draft.el
@@ -99,7 +99,6 @@ its settings apply."
(funcall mu4e-compose-cite-function))
(pop-mark)
(goto-char (point-min))
- (mu4e~fontify-cited)
(buffer-string))))
(defun mu4e~draft-header (hdr val)
@@ -109,7 +108,17 @@ If VAL is nil, return nil."
;; later.
(when val (format "%s: %s\n"
(propertize hdr 'face 'mu4e-header-key-face)
- (propertize val 'face 'mu4e-header-val-face))))
+ (propertize val 'face 'mu4e-header-value-face))))
+
+(defconst mu4e~max-reference-num 21
+ "Maximum number of References:, as suggested by
+`message-shorten-references'.")
+
+(defun mu4e~shorten-1 (list cut surplus)
+ "Cut SURPLUS elements out of LIST, beginning with CUTth
+one. Code borrowed from `message-shorten-1'."
+ (setcdr (nthcdr (- cut 2) list)
+ (nthcdr (+ (- cut 2) surplus 1) list)))
(defun mu4e~draft-references-construct (msg)
"Construct the value of the References: header based on MSG as a
@@ -125,10 +134,16 @@ References. If both are empty, return nil."
(refs (if (and msgid (not (string= msgid "")))
(append refs (list msgid)) refs))
;; no doubles
- (refs (delete-duplicates refs :test #'equal)))
+ (refs (delete-duplicates refs :test #'equal))
+ (refnum (length refs))
+ (cut 2))
+ ;; remove some refs when there are too many
+ (when (> refnum mu4e~max-reference-num)
+ (let ((surplus (- refnum mu4e~max-reference-num)))
+ (mu4e~shorten-1 refs cut surplus)))
(mapconcat (lambda (id) (format "<%s>" id)) refs " ")))
-
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; determine the recipient fields for new messages
@@ -311,7 +326,7 @@ You can append flags."
(format-time-string "%s" (current-time))
(random 65535) (random 65535) (random 65535) (random 65535)
hostname (or flagstr ""))))
-
+
(defun mu4e~draft-common-construct ()
"Construct the common headers for each message."
(concat
@@ -346,11 +361,12 @@ fields will be the same as in the original."
(mu4e~draft-header "To" (mu4e~draft-recipients-list-to-string
(mu4e-message-field origmsg :to)))
(mu4e~draft-header "Cc" (mu4e~draft-recipients-list-to-string
- (mu4e-message-field origmsg :cc))))
-
+ (mu4e-message-field origmsg :cc))))
+
;; if there's no-one in To, copy the CC-list
(if (zerop (length (mu4e~draft-create-to-lst origmsg)))
- (mu4e~draft-header "To" (mu4e~draft-recipients-construct :cc origmsg reply-all))
+ (mu4e~draft-header "To" (mu4e~draft-recipients-construct
+ :cc origmsg reply-all))
;; otherwise...
(concat
(mu4e~draft-header "To" (mu4e~draft-recipients-construct :to origmsg))
@@ -415,9 +431,10 @@ fields will be the same as in the original."
(defun mu4e-draft-open (compose-type &optional msg)
- "Open a draft file for a new message (when COMPOSE-TYPE is `reply', `forward' or `new'),
-open an existing draft (when COMPOSE-TYPE is `edit'), or re-send
-an existing message (when COMPOSE-TYPE is `resend').
+ "Open a draft file for a new message (when COMPOSE-TYPE is `reply',
+ `forward' or `new'), open an existing draft (when COMPOSE-TYPE
+is `edit'), or re-send an existing message (when COMPOSE-TYPE is
+`resend').
The name of the draft folder is constructed from the
concatenation of `mu4e-maildir' and `mu4e-drafts-folder' (the
@@ -428,10 +445,11 @@ will be created from either `mu4e~draft-reply-construct', or
(unless mu4e-maildir (mu4e-error "mu4e-maildir not set"))
(let ((draft-dir nil))
(case compose-type
-
+
(edit
- ;; case-1: re-editing a draft messages. in this case, we do know the full
- ;; path, but we cannot really know 'drafts folder'... we make a guess
+ ;; case-1: re-editing a draft messages. in this case, we do know the
+ ;; full path, but we cannot really know 'drafts folder'... we make a
+ ;; guess
(setq draft-dir (mu4e~guess-maildir (mu4e-message-field msg :path)))
(mu4e~draft-open-file (mu4e-message-field msg :path)))
@@ -442,9 +460,9 @@ will be created from either `mu4e~draft-reply-construct', or
(let ((draft-path (mu4e~draft-determine-path draft-dir)))
(copy-file (mu4e-message-field msg :path) draft-path)
(mu4e~draft-open-file draft-path)))
-
+
((reply forward new)
- ;; case-3: creating a new message; in this case, we can determing
+ ;; case-3: creating a new message; in this case, we can determine
;; mu4e-get-drafts-folder
(setq draft-dir (mu4e-get-drafts-folder msg))
(let ((draft-path (mu4e~draft-determine-path draft-dir))
@@ -454,7 +472,7 @@ will be created from either `mu4e~draft-reply-construct', or
(forward (mu4e~draft-forward-construct msg))
(new (mu4e~draft-newmsg-construct)))))
(mu4e~draft-open-file draft-path)
- (insert initial-contents)
+ (insert initial-contents)
(newline)
;; include the message signature (if it's set)
(if (and mu4e-compose-signature-auto-include mu4e-compose-signature)
@@ -463,12 +481,15 @@ will be created from either `mu4e~draft-reply-construct', or
(message-insert-signature)
(mu4e~fontify-signature))))))
(t (mu4e-error "unsupported compose-type %S" compose-type)))
- ;; evaluate mu4e~drafts-drafts-folder once, here, and use that value
- ;; throughout.
+ ;; if we didn't find a draft folder yet, try some default
+ (unless draft-dir
+ (setq draft-dir (mu4e-get-drafts-folder msg)))
+ ;; evaluate mu4e~drafts-drafts-folder once, here, and use that value
+ ;; throughout.
(set (make-local-variable 'mu4e~draft-drafts-folder) draft-dir)
(put 'mu4e~draft-drafts-folder 'permanent-local t)
(unless mu4e~draft-drafts-folder
(mu4e-error "failed to determine drafts folder"))))
-
+
(provide 'mu4e-draft)