mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-25 12:28:09 +01:00
emacs: Factor out useful functions into notmuch-lib
Move a few functions related to handling multipart/alternative parts into notmuch-lib.el, so they can be used by future reply code.
This commit is contained in:
parent
92b48c8c98
commit
950789f3c3
2 changed files with 35 additions and 22 deletions
|
@ -21,6 +21,8 @@
|
||||||
|
|
||||||
;; This is an part of an emacs-based interface to the notmuch mail system.
|
;; This is an part of an emacs-based interface to the notmuch mail system.
|
||||||
|
|
||||||
|
(eval-when-compile (require 'cl))
|
||||||
|
|
||||||
(defvar notmuch-command "notmuch"
|
(defvar notmuch-command "notmuch"
|
||||||
"Command to run the notmuch binary.")
|
"Command to run the notmuch binary.")
|
||||||
|
|
||||||
|
@ -173,6 +175,37 @@ the user hasn't set this variable with the old or new value."
|
||||||
(list 'when (< emacs-major-version 23)
|
(list 'when (< emacs-major-version 23)
|
||||||
form))
|
form))
|
||||||
|
|
||||||
|
(defun notmuch-split-content-type (content-type)
|
||||||
|
"Split content/type into 'content' and 'type'"
|
||||||
|
(split-string content-type "/"))
|
||||||
|
|
||||||
|
(defun notmuch-match-content-type (t1 t2)
|
||||||
|
"Return t if t1 and t2 are matching content types, taking wildcards into account"
|
||||||
|
(let ((st1 (notmuch-split-content-type t1))
|
||||||
|
(st2 (notmuch-split-content-type t2)))
|
||||||
|
(if (or (string= (cadr st1) "*")
|
||||||
|
(string= (cadr st2) "*"))
|
||||||
|
(string= (car st1) (car st2))
|
||||||
|
(string= t1 t2))))
|
||||||
|
|
||||||
|
(defvar notmuch-multipart/alternative-discouraged
|
||||||
|
'(
|
||||||
|
;; Avoid HTML parts.
|
||||||
|
"text/html"
|
||||||
|
;; multipart/related usually contain a text/html part and some associated graphics.
|
||||||
|
"multipart/related"
|
||||||
|
))
|
||||||
|
|
||||||
|
(defun notmuch-multipart/alternative-choose (types)
|
||||||
|
"Return a list of preferred types from the given list of types"
|
||||||
|
;; Based on `mm-preferred-alternative-precedence'.
|
||||||
|
(let ((seq types))
|
||||||
|
(dolist (pref (reverse notmuch-multipart/alternative-discouraged))
|
||||||
|
(dolist (elem (copy-sequence seq))
|
||||||
|
(when (string-match pref elem)
|
||||||
|
(setq seq (nconc (delete elem seq) (list elem))))))
|
||||||
|
seq))
|
||||||
|
|
||||||
;; Compatibility functions for versions of emacs before emacs 23.
|
;; Compatibility functions for versions of emacs before emacs 23.
|
||||||
;;
|
;;
|
||||||
;; Both functions here were copied from emacs 23 with the following copyright:
|
;; Both functions here were copied from emacs 23 with the following copyright:
|
||||||
|
|
|
@ -542,30 +542,13 @@ current buffer, if possible."
|
||||||
(mm-display-part handle)
|
(mm-display-part handle)
|
||||||
t))))))
|
t))))))
|
||||||
|
|
||||||
(defvar notmuch-show-multipart/alternative-discouraged
|
|
||||||
'(
|
|
||||||
;; Avoid HTML parts.
|
|
||||||
"text/html"
|
|
||||||
;; multipart/related usually contain a text/html part and some associated graphics.
|
|
||||||
"multipart/related"
|
|
||||||
))
|
|
||||||
|
|
||||||
(defun notmuch-show-multipart/*-to-list (part)
|
(defun notmuch-show-multipart/*-to-list (part)
|
||||||
(mapcar (lambda (inner-part) (plist-get inner-part :content-type))
|
(mapcar (lambda (inner-part) (plist-get inner-part :content-type))
|
||||||
(plist-get part :content)))
|
(plist-get part :content)))
|
||||||
|
|
||||||
(defun notmuch-show-multipart/alternative-choose (types)
|
|
||||||
;; Based on `mm-preferred-alternative-precedence'.
|
|
||||||
(let ((seq types))
|
|
||||||
(dolist (pref (reverse notmuch-show-multipart/alternative-discouraged))
|
|
||||||
(dolist (elem (copy-sequence seq))
|
|
||||||
(when (string-match pref elem)
|
|
||||||
(setq seq (nconc (delete elem seq) (list elem))))))
|
|
||||||
seq))
|
|
||||||
|
|
||||||
(defun notmuch-show-insert-part-multipart/alternative (msg part content-type nth depth declared-type)
|
(defun notmuch-show-insert-part-multipart/alternative (msg part content-type nth depth declared-type)
|
||||||
(notmuch-show-insert-part-header nth declared-type content-type nil)
|
(notmuch-show-insert-part-header nth declared-type content-type nil)
|
||||||
(let ((chosen-type (car (notmuch-show-multipart/alternative-choose (notmuch-show-multipart/*-to-list part))))
|
(let ((chosen-type (car (notmuch-multipart/alternative-choose (notmuch-show-multipart/*-to-list part))))
|
||||||
(inner-parts (plist-get part :content))
|
(inner-parts (plist-get part :content))
|
||||||
(start (point)))
|
(start (point)))
|
||||||
;; This inserts all parts of the chosen type rather than just one,
|
;; This inserts all parts of the chosen type rather than just one,
|
||||||
|
@ -808,9 +791,6 @@ current buffer, if possible."
|
||||||
|
|
||||||
;; Functions for determining how to handle MIME parts.
|
;; Functions for determining how to handle MIME parts.
|
||||||
|
|
||||||
(defun notmuch-show-split-content-type (content-type)
|
|
||||||
(split-string content-type "/"))
|
|
||||||
|
|
||||||
(defun notmuch-show-handlers-for (content-type)
|
(defun notmuch-show-handlers-for (content-type)
|
||||||
"Return a list of content handlers for a part of type CONTENT-TYPE."
|
"Return a list of content handlers for a part of type CONTENT-TYPE."
|
||||||
(let (result)
|
(let (result)
|
||||||
|
@ -821,7 +801,7 @@ current buffer, if possible."
|
||||||
(list (intern (concat "notmuch-show-insert-part-*/*"))
|
(list (intern (concat "notmuch-show-insert-part-*/*"))
|
||||||
(intern (concat
|
(intern (concat
|
||||||
"notmuch-show-insert-part-"
|
"notmuch-show-insert-part-"
|
||||||
(car (notmuch-show-split-content-type content-type))
|
(car (notmuch-split-content-type content-type))
|
||||||
"/*"))
|
"/*"))
|
||||||
(intern (concat "notmuch-show-insert-part-" content-type))))
|
(intern (concat "notmuch-show-insert-part-" content-type))))
|
||||||
result))
|
result))
|
||||||
|
|
Loading…
Reference in a new issue