From mboxrd@z Thu Jan 1 00:00:00 1970 From: Benjamin Andresen Subject: org-mime: [PATCH] Toggle between plaintext and html Date: Thu, 15 Apr 2010 23:47:50 +0200 Message-ID: <87ochke6bd.fsf@in-ulm.de> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1O2aA4-0005z5-VB for emacs-orgmode@gnu.org; Thu, 15 Apr 2010 21:16:01 -0400 Received: from [140.186.70.92] (port=52497 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1O2aA3-0005wd-IP for emacs-orgmode@gnu.org; Thu, 15 Apr 2010 21:16:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1O2aA1-0003BN-HA for emacs-orgmode@gnu.org; Thu, 15 Apr 2010 21:15:59 -0400 Received: from mail.in-ulm.de ([217.10.8.10]:37011) by eggs.gnu.org with smtp (Exim 4.69) (envelope-from ) id 1O2Wvj-0001nM-Dn for emacs-orgmode@gnu.org; Thu, 15 Apr 2010 17:48:59 -0400 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org --=-=-= Hello, I hope I'm not polluting this mailing list wrongly (due to org-mime being contrib and not mainline). I wrote a small patch that gives the function org-mime-toggle-html (+ support) for that I had to unfortunately rewrite `org-mime-multipart' Maybe Eric can look at it and if useful include it. --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=org-mime-toggle-html.patch diff --git a/contrib/lisp/org-mime.el b/contrib/lisp/org-mime.el index 14a8ce3..79a1789 100644 --- a/contrib/lisp/org-mime.el +++ b/contrib/lisp/org-mime.el @@ -116,19 +116,30 @@ (buffer-string))))) ('vm "?"))) +(defvar org-mime-multipart-alist + '((mml ((beg . "<#multipart type=alternative>\n<#part type=text/plain>\n") + (mid . "<#part type=text/html>") + (end . "\n<#/multipart>\n"))) + (semi ((beg . "--<>-{\n--[[text/plain]]\n") + (mid . "--[[text/html]]\n") + (end . "--}-<>\n"))) + (vm ((beg . "?") + (mid . "?") + (end . "?")))) + "Text to wrap around plain and html strings.") + +(defun org-mime-multipart-get (pos &optional mime-lib alist) + (let ((alist (cadr (assoc (or mime-lib org-mime-library) + (or alist org-mime-multipart-alist))))) + (cdr (assoc pos alist)))) + (defun org-mime-multipart (plain html) "Markup a multipart/alternative with text/plain and text/html alternatives." - (case org-mime-library - ('mml (format (concat "<#multipart type=alternative><#part type=text/plain>" - "%s<#part type=text/html>%s<#/multipart>\n") - plain html)) - ('semi (concat - "--" "<>-{\n" - "--" "[[text/plain]]\n" plain - "--" "[[text/html]]\n" html - "--" "}-<>\n")) - ('vm "?"))) + (let ((begin (org-mime-multipart-get 'beg)) + (middle (org-mime-multipart-get 'mid)) + (end (org-mime-multipart-get 'end))) + (concat begin plain middle html end))) (defun org-mime-replace-images (str current-file) "Replace images in html files with cid links." @@ -190,6 +201,40 @@ export that region, otherwise export the entire body." (insert (org-mime-multipart body html) (mapconcat 'identity html-images "\n"))))) +(defun org-mime-unhtmlize (arg) + "Delete mime-related text and revert buffer to pure plaintext state." + (interactive "P") + (let ((body-start (save-excursion + (goto-char (point-min)) + (search-forward mail-header-separator) + (+ (point) 1))) + (plaintext-start (org-mime-multipart-get 'beg)) + (plaintext-end (org-mime-multipart-get 'mid))) + (condition-case nil + (when (org-mime-buffer-html-p) + (goto-char body-start) + (search-forward plaintext-start) + (delete-region body-start (point)) + (search-forward plaintext-end) + (delete-region (- (point) (length plaintext-end)) (point-max)) + (goto-char body-start)) + (error nil)))) + +(defun org-mime-buffer-html-p () + "Return true if buffer has already been htmlized." + (condition-case nil + (save-excursion + (goto-char (point-min)) + (search-forward (org-mime-multipart-get 'beg))) + (error nil))) + +(defun org-mime-toggle-html (arg) + "If buffer hasn't been htmlized, do it. Otherwise revert." + (interactive "P") + (if (org-mime-buffer-html-p) + (org-mime-unhtmlize arg) + (org-mime-htmlize arg))) + (defun org-mime-org-export (fmt body tmp-file) "Org-Export BODY to format FMT with the file name set to TMP-FILE during export." --=-=-= Critique and comments always welcome. :-) br, benny --=-=-= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Emacs-orgmode mailing list Please use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode --=-=-=--