aboutsummaryrefslogtreecommitdiffstats
path: root/_spacemacs.d/local/mu4e/mu4e-message.el
diff options
context:
space:
mode:
Diffstat (limited to '_spacemacs.d/local/mu4e/mu4e-message.el')
-rw-r--r--_spacemacs.d/local/mu4e/mu4e-message.el284
1 files changed, 0 insertions, 284 deletions
diff --git a/_spacemacs.d/local/mu4e/mu4e-message.el b/_spacemacs.d/local/mu4e/mu4e-message.el
deleted file mode 100644
index e339077..0000000
--- a/_spacemacs.d/local/mu4e/mu4e-message.el
+++ /dev/null
@@ -1,284 +0,0 @@
-;;; mu4e-message.el -- part of mu4e, the mu mail user agent
-;;
-;; Copyright (C) 2012-2016 Dirk-Jan C. Binnema
-
-;; Author: Dirk-Jan C. Binnema <djcb@djcbsoftware.nl>
-;; Maintainer: Dirk-Jan C. Binnema <djcb@djcbsoftware.nl>
-
-;; This file is not part of GNU Emacs.
-;;
-;; GNU Emacs 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.
-
-;; GNU Emacs 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 GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Functions to get data from mu4e-message plist structure
-
-;;; Code:
-(eval-when-compile (byte-compile-disable-warning 'cl-functions))
-
-(require 'mu4e-vars)
-(require 'mu4e-utils)
-
-(require 'cl)
-(require 'html2text)
-
-
-(defcustom mu4e-html2text-command
- (if (fboundp 'shr-insert-document) 'mu4e-shr2text 'html2text)
-
- "Either a shell command or a function that converts from html to plain text.
-
-If it is a shell-command, the command reads html from standard
-input and outputs plain text on standard output. If you use the
-htmltext program, it's recommended you use \"html2text -utf8
--width 72\". Alternatives are the python-based html2markdown, w3m
-and on MacOS you may want to use textutil.
-
-It can also be a function, which takes the current buffer in html
-as input, and transforms it into html (like the `html2text'
-function).
-
-In both cases, the output is expected to be in UTF-8 encoding.
-
-Newer emacs has the shr renderer, and when its available,
-conversion defaults `mu4e-shr2text'; otherwise, the default is
-emacs' built-in `html2text' function."
- :type '(choice string function)
- :group 'mu4e-view)
-
-(defcustom mu4e-view-prefer-html nil
- "Whether to base the body display on the html-version.
-If the e-mail message has no html-version the plain-text version
-is always used."
- :type 'boolean
- :group 'mu4e-view)
-
-(defcustom mu4e-view-html-plaintext-ratio-heuristic 5
- "Ratio between the length of the html and the plain text part
-below which mu4e will consider the plain text part to be 'This
-messages requires html' text bodies."
- :type 'integer
- :group 'mu4e-view)
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defsubst mu4e-message-field-raw (msg field)
- "Retrieve FIELD from message plist MSG.
-FIELD is one of :from, :to, :cc, :bcc, :subject, :data,
-:message-id, :path, :maildir, :priority, :attachments,
-:references, :in-reply-to, :body-txt, :body-html
-
-Returns `nil' if the field does not exist.
-
-A message plist looks something like:
-\(:docid 32461
- :from ((\"Nikola Tesla\" . \"niko@example.com\"))
- :to ((\"Thomas Edison\" . \"tom@example.com\"))
- :cc ((\"Rupert The Monkey\" . \"rupert@example.com\"))
- :subject \"RE: what about the 50K?\"
- :date (20369 17624 0)
- :size 4337
- :message-id \"6BDC23465F79238C8233AB82D81EE81AF0114E4E74@123213.mail.example.com\"
- :path \"/home/tom/Maildir/INBOX/cur/133443243973_1.10027.atlas:2,S\"
- :maildir \"/INBOX\"
- :priority normal
- :flags (seen)
- :attachments
- ((:index 2 :name \"photo.jpg\" :mime-type \"image/jpeg\" :size 147331)
- (:index 3 :name \"book.pdf\" :mime-type \"application/pdf\" :size 192220))
- :references (\"6BDC23465F79238C8384574032D81EE81AF0114E4E74@123213.mail.example.com\"
- \"6BDC23465F79238203498230942D81EE81AF0114E4E74@123213.mail.example.com\")
- :in-reply-to \"6BDC23465F79238203498230942D81EE81AF0114E4E74@123213.mail.example.com\"
- :body-txt \"Hi Tom, ...\"
-\)).
-Some notes on the format:
-- The address fields are lists of pairs (NAME . EMAIL), where NAME can be nil.
-- The date is in format emacs uses in `current-time'
-- Attachments are a list of elements with fields :index (the number of
- the MIME-part), :name (the file name, if any), :mime-type (the
- MIME-type, if any) and :size (the size in bytes, if any).
-- Messages in the Headers view come from the database and do not have
- :attachments, :body-txt or :body-html fields. Message in the
- Message view use the actual message file, and do include these fields."
- ;; after all this documentation, the spectacular implementation
- (if msg
- (plist-get msg field)
- (mu4e-error "message must be non-nil")))
-
-(defsubst mu4e-message-field (msg field)
- "Retrieve FIELD from message plist MSG.
-Like `mu4e-message-field-nil', but will sanitize `nil' values:
-- all string field except body-txt/body-html: nil -> \"\"
-- numeric fields + dates : nil -> 0
-- all others : return the value
-Thus, function will return nil for empty lists, non-existing body-txt or body-html."
- (let ((val (mu4e-message-field-raw msg field)))
- (cond
- (val
- val) ;; non-nil -> just return it
- ((member field '(:subject :message-id :path :maildir :in-reply-to))
- "") ;; string fields except body-txt, body-html: nil -> ""
- ((member field '(:body-html :body-txt))
- val)
- ((member field '(:docid :size))
- 0) ;; numeric type: nil -> 0
- (t
- val)))) ;; otherwise, just return nil
-
-(defsubst mu4e-message-has-field (msg field)
- "Return t if MSG contains FIELD, nil otherwise."
- (plist-member msg field))
-
-(defsubst mu4e-message-at-point (&optional noerror)
- "Get the message s-expression for the message at point in either
-the headers buffer or the view buffer, or nil if there is no such
-message. If optional NOERROR is non-nil, do not raise an error when
-there is no message at point."
- (let ((msg (or (get-text-property (point) 'msg) mu4e~view-msg)))
- (if msg
- msg
- (unless noerror (mu4e-warn "No message at point")))))
-
-(defsubst mu4e-message-field-at-point (field)
- "Get the field FIELD from the message at point.
-This is equivalent to:
- (mu4e-message-field (mu4e-message-at-point) FIELD)."
- (mu4e-message-field (mu4e-message-at-point) field))
-
-(defun mu4e-message-body-text (msg)
- "Get the body in text form for this message.
-This is either :body-txt, or if not available, :body-html converted
-to text, using `mu4e-html2text-command' is non-nil, it will use
-that. Normally, thiss function prefers the text part, but this can
-be changed by setting `mu4e-view-prefer-html'."
- (let* ((txt (mu4e-message-field msg :body-txt))
- (html (mu4e-message-field msg :body-html))
- (body
- (cond
- ;; does it look like some text? ie., if the text part is more than
- ;; mu4e-view-html-plaintext-ratio-heuristic times shorter than the
- ;; html part, it should't be used
- ;; This is an heuristic to guard against 'This messages requires
- ;; html' text bodies.
- ((and (> (* mu4e-view-html-plaintext-ratio-heuristic
- (length txt)) (length html))
- ;; use html if it's prefered, unless there is no html
- (or (not mu4e-view-prefer-html) (not html)))
- txt)
- ;; otherwise, it there some html?
- (html
- (with-temp-buffer
- (insert html)
- (cond
- ((stringp mu4e-html2text-command)
- (let* ((tmp-file (mu4e-make-temp-file "html")))
- (write-region (point-min) (point-max) tmp-file)
- (erase-buffer)
- (call-process-shell-command mu4e-html2text-command tmp-file t t)
- (delete-file tmp-file)))
- ((functionp mu4e-html2text-command)
- (funcall mu4e-html2text-command))
- (t (mu4e-error "Invalid `mu4e-html2text-command'")))
- (buffer-string))
- )
- (t ;; otherwise, an empty body
- ""))))
- ;; and finally, remove some crap from the remaining string; it seems
- ;; esp. outlook lies about its encoding (ie., it says 'iso-8859-1' but
- ;; really it's 'windows-1252'), thus giving us these funky chars. here, we
- ;; either remove them, or replace with 'what-was-meant' (heuristically)
- (with-temp-buffer
- (insert body)
- (goto-char (point-min))
- (while (re-search-forward "[  ’]" nil t)
- (replace-match
- (cond
- ((string= (match-string 0) "’") "'")
- (t ""))))
- (buffer-string))))
-
-(defun mu4e-message-contact-field-matches (msg cfield rx)
- "Checks whether any of the of the contacts in field
-CFIELD (either :to, :from, :cc or :bcc, or a list of those) of
-msg MSG matches (with their name or e-mail address) regular
-expressions RX. If there is a match, return non-nil; otherwise
-return nil. RX can also be a list of regular expressions, in
-which case any of those are tried for a match."
- (if (and cfield (listp cfield))
- (or (mu4e-message-contact-field-matches msg (car cfield) rx)
- (mu4e-message-contact-field-matches msg (cdr cfield) rx))
- (when cfield
- (if (listp rx)
- ;; if rx is a list, try each one of them for a match
- (find-if
- (lambda (a-rx) (mu4e-message-contact-field-matches msg cfield a-rx))
- rx)
- ;; not a list, check the rx
- (find-if
- (lambda (ct)
- (let ((name (car ct)) (email (cdr ct)))
- (or
- (and name (string-match rx name))
- (and email (string-match rx email)))))
- (mu4e-message-field msg cfield))))))
-
-(defun mu4e-message-contact-field-matches-me (msg cfield)
- "Checks whether any of the of the contacts in field
-CFIELD (either :to, :from, :cc or :bcc) of msg MSG matches *me*,
-that is, any of the e-mail address in
-`mu4e-user-mail-address-list'. Returns the contact cell that
-matched, or nil."
- (find-if
- (lambda (cc-cell)
- (member-if
- (lambda (addr)
- (string= (downcase addr) (downcase (cdr cc-cell))))
- mu4e-user-mail-address-list))
- (mu4e-message-field msg cfield)))
-
-(defsubst mu4e-message-part-field (msgpart field)
- "Get some field in a message part; a part would look something like:
- (:index 2 :name \"photo.jpg\" :mime-type \"image/jpeg\" :size 147331)."
- (plist-get msgpart field))
-
-;; backward compatibility ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defalias 'mu4e-msg-field 'mu4e-message-field)
-(defalias 'mu4e-body-text 'mu4e-message-body-text) ;; backward compatibility
-
-(defun mu4e-field-at-point (field)
- "Get FIELD (a symbol, see `mu4e-header-info') for the message at
-point in eiter the headers buffer or the view buffer."
- (plist-get (mu4e-message-at-point) field))
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-
-(defun mu4e-shr2text ()
- "Html to text using the shr engine; this can be used in
-`mu4e-html2text-command' in a new enough emacs. Based on code by
-Titus von der Malsburg."
- (interactive)
- (let ((dom (libxml-parse-html-region (point-min) (point-max)))
- ;; When HTML emails contain references to remote images,
- ;; retrieving these images leaks information. For example,
- ;; the sender can see when I openend the email and from which
- ;; computer (IP address). For this reason, it is preferrable
- ;; to not retrieve images.
- ;; See this discussion on mu-discuss:
- ;; https://groups.google.com/forum/#!topic/mu-discuss/gr1cwNNZnXo
- (shr-inhibit-images t))
- (erase-buffer)
- (shr-insert-document dom)
- (goto-char (point-min))))
-
-(provide 'mu4e-message)