[PATCH v7 08/10] emacs: Factor out useful functions into notmuch-lib

2012-03-11 Thread Adam Wolfe Gordon
Move a few functions related to handling multipart/alternative parts
into notmuch-lib.el, so they can be used by future reply code.
---
 emacs/notmuch-lib.el  |   33 +
 emacs/notmuch-show.el |   24 ++--
 2 files changed, 35 insertions(+), 22 deletions(-)

diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el
index d315f76..7e3f110 100644
--- a/emacs/notmuch-lib.el
+++ b/emacs/notmuch-lib.el
@@ -21,6 +21,8 @@

 ;; This is an part of an emacs-based interface to the notmuch mail system.

+(eval-when-compile (require 'cl))
+
 (defvar notmuch-command "notmuch"
   "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)
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.
 ;;
 ;; Both functions here were copied from emacs 23 with the following copyright:
diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
index 4a60631..ed938bf 100644
--- a/emacs/notmuch-show.el
+++ b/emacs/notmuch-show.el
@@ -542,30 +542,13 @@ current buffer, if possible."
(mm-display-part handle)
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)
   (mapcar (lambda (inner-part) (plist-get inner-part :content-type))
  (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)
   (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))
(start (point)))
 ;; 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.

-(defun notmuch-show-split-content-type (content-type)
-  (split-string content-type "/"))
-
 (defun notmuch-show-handlers-for (content-type)
   "Return a list of content handlers for a part of type CONTENT-TYPE."
   (let (result)
@@ -821,7 +801,7 @@ current buffer, if possible."
  (list (intern (concat "notmuch-show-insert-part-*/*"))
(intern (concat
 "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
 result))
-- 
1.7.5.4



[PATCH v7 08/10] emacs: Factor out useful functions into notmuch-lib

2012-03-11 Thread Adam Wolfe Gordon
Move a few functions related to handling multipart/alternative parts
into notmuch-lib.el, so they can be used by future reply code.
---
 emacs/notmuch-lib.el  |   33 +
 emacs/notmuch-show.el |   24 ++--
 2 files changed, 35 insertions(+), 22 deletions(-)

diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el
index d315f76..7e3f110 100644
--- a/emacs/notmuch-lib.el
+++ b/emacs/notmuch-lib.el
@@ -21,6 +21,8 @@
 
 ;; This is an part of an emacs-based interface to the notmuch mail system.
 
+(eval-when-compile (require 'cl))
+
 (defvar notmuch-command "notmuch"
   "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)
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.
 ;;
 ;; Both functions here were copied from emacs 23 with the following copyright:
diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
index 4a60631..ed938bf 100644
--- a/emacs/notmuch-show.el
+++ b/emacs/notmuch-show.el
@@ -542,30 +542,13 @@ current buffer, if possible."
(mm-display-part handle)
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)
   (mapcar (lambda (inner-part) (plist-get inner-part :content-type))
  (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)
   (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))
(start (point)))
 ;; 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.
 
-(defun notmuch-show-split-content-type (content-type)
-  (split-string content-type "/"))
-
 (defun notmuch-show-handlers-for (content-type)
   "Return a list of content handlers for a part of type CONTENT-TYPE."
   (let (result)
@@ -821,7 +801,7 @@ current buffer, if possible."
  (list (intern (concat "notmuch-show-insert-part-*/*"))
(intern (concat
 "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
 result))
-- 
1.7.5.4

___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch