From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Hyatt Subject: Re: [ANN] org-mime -- using orgmode to send html mail? Date: Tue, 13 Apr 2010 21:57:26 -0400 Message-ID: References: <87sk7f8d6x.fsf@gmail.com> <87aatizcef.fsf@gmail.com> <71591C25-1B0B-4162-A53C-16DB9436C0F3@gmail.com> <8739z9c3vq.fsf@gmail.com> <8739z44lyl.fsf@gmail.com> <87bpdoio0j.fsf@gmail.com> <87mxx6hmvw.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0653442357==" Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1O1rrF-0005M1-Hp for emacs-orgmode@gnu.org; Tue, 13 Apr 2010 21:57:37 -0400 Received: from [140.186.70.92] (port=44760 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1O1rrB-0005Jc-7G for emacs-orgmode@gnu.org; Tue, 13 Apr 2010 21:57:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1O1rr8-0004Cy-02 for emacs-orgmode@gnu.org; Tue, 13 Apr 2010 21:57:33 -0400 Received: from ey-out-1920.google.com ([74.125.78.148]:7974) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1O1rr7-0004Cg-GS for emacs-orgmode@gnu.org; Tue, 13 Apr 2010 21:57:29 -0400 Received: by ey-out-1920.google.com with SMTP id 4so573998eyg.34 for ; Tue, 13 Apr 2010 18:57:27 -0700 (PDT) In-Reply-To: <87mxx6hmvw.fsf@gmail.com> 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: Eric Schulte Cc: emacs-orgmode@gnu.org --===============0653442357== Content-Type: multipart/alternative; boundary=0015174c3c1a340681048428b3db --0015174c3c1a340681048428b3db Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable I do get the same result you do. Hopefully, I'll have some time tomorrow t= o look into the issue. RIght now, though, my problem is not the nil, but the error I reported in my previous email. On Tue, Apr 13, 2010 at 8:57 PM, Eric Schulte wrote= : > So, for some reason the `org-mime-org-export' helper function is > returning nil on your (and Eric's) machines. Could you try evaluating > (C-M-x) the following in your *scratch* buffer? > > (insert (org-mime-org-export "html" "- first > - second > - third" (make-temp-file "quick-test"))) > > When I execute the above it inserts the following into the scratch > buffer > >
    >
  • > first >
  • >
  • > second >
  • >
  • > third >
  • >
> > If instead you get an error, or it inserts nil, then it means that our > systems are somehow different with respect to that function, which is a > slight alteration of `org-run-like-in-org-mode'. > > At that point you could try using something like > > (org-run-like-in-org-mode 'org-export-as-html) > > to export a non-html buffer to html, or you could also try starting up > Emacs with the -Q option, then loading org-mime.el, opening an org-mode > file, and calling org-mime-org-buffer-htmlize, and sending an email to > yourself. > > Sorry I can't be of more help, I'm really mystified as to how this > function could be returning nil. > > Best -- Eric > > Andrew Hyatt writes: > > > Thanks for the response. I upgraded, now I get a > > > > Debugger entered--Lisp error: (wrong-type-argument arrayp t) > > substring(t 33) > > (progn (insert org-mime-default-header) (insert body) (write-file > tmp-file) > > (org-load-modules-maybe) (unless org-local-vars (setq org-local-vars > ...)) > > (substring (eval ...) (if ... ... 0))) > > (unwind-protect (progn (insert org-mime-default-header) (insert body) > > (write-file tmp-file) (org-load-modules-maybe) (unless org-local-vars > ...) > > (substring ... ...)) (and (buffer-name temp-buffer) (kill-buffer > > temp-buffer))) > > (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn .= .. > > ... ... ... ... ...) (and ... ...))) > > (with-current-buffer temp-buffer (unwind-protect (progn ... ... ... ..= . > ... > > ...) (and ... ...))) > > (let ((temp-buffer ...)) (with-current-buffer temp-buffer > (unwind-protect > > ... ...))) > > (with-temp-buffer (insert org-mime-default-header) (insert body) > > (write-file tmp-file) (org-load-modules-maybe) (unless org-local-vars > (setq > > org-local-vars ...)) (substring (eval ...) (if ... ... 0))) > > (save-excursion (with-temp-buffer (insert org-mime-default-header) > (insert > > body) (write-file tmp-file) (org-load-modules-maybe) (unless > org-local-vars > > ...) (substring ... ...))) > > org-mime-org-export("org" #("\nHTML test\n\n~foo~\n=3Dbar=3D\n_baz_\n\= n| 1 | > 2 > > |\n| a | b |\n" 0 1 (fontified t) 1 11 (fontified t) 11 12 (fontified t= ) > 12 > > 18 (fontified t) 18 24 (fontified t) 24 30 (fontified t) 30 31 (fontifi= ed > t) > > 31 40 (fontified t face (gnus-cite-1 message-cited-text)) 40 41 > (fontified > > t) 41 50 (fontified t face (gnus-cite-1 message-cited-text)) 50 51 > > (fontified t)) "/tmp/mail2522ZvL") > > (let* ((region-p ...) (html-start ...) (html-end ...) (raw-body ...) > > (tmp-file ...) (body ...) (org-export-skip-text-before-1st-heading nil) > > (org-export-htmlize-output-type ...) (org-export-preserve-breaks > > org-mime-preserve-breaks) (html-and-images ...) (html-images ...) (html > > ...)) (delete-region html-start html-end) (save-excursion (goto-char > > html-start) (insert ... ...))) > > org-mime-htmlize(nil) > > call-interactively(org-mime-htmlize record nil) > > > > I tried this with orgstruct-mode off and on, but it was the same error > > either way. Earlier, before I got the latest version, I tried with > > orgstruct-mode on, and it successfull htmlized my mail. But, when I > received > > it, the mail only contained the word "nil". > > > > On Mon, Apr 12, 2010 at 1:22 PM, Eric Schulte >wrote: > > > >> Hi Andrew, > >> > >> Thanks for the report. My guess is that somehow the call to > >> org-export-as-html is erroring out because some org-mode variables > >> aren't being set, maybe you don't have orgstruct-mode as a minor-mode = in > >> your email composition -- not that it's required, but that could be th= e > >> difference between our setups which is causing you to see the bug and > >> not me. > >> > >> I've changed the `org-mime-org-export' so it more closely mimics the > >> `org-run-like-in-org-mode' wrapping function, which should hopefully f= ix > >> this problem. Please let me know either way, and if the problem > >> persists we can try to figure out exactly which variable isn't being > >> initialized. > >> > >> Thanks for the report! -- Eric > >> > >> Andrew Hyatt writes: > >> > >> > This looks great. However, I get an error on my test mail: > >> > > >> > This is should be HTML mode. > >> > > >> > ~foo~ > >> > =3Dbar=3D > >> > _baz_ > >> > > >> > | Table | A | > >> > | 1 | 2 | > >> > > >> > On calling org-mime-htmlize > >> > > >> > Debugger entered--Lisp error: (wrong-type-argument stringp nil) > >> > string-match(nil #("This is should be HTML mode." 0 28 (fontified > t))) > >> > byte-code("\304\211. \305\n \"\203A > >> > org-html-handle-time-stamps(#("This is should be HTML mode." 0 28 > >> > (fontified t))) > >> > byte-code(" \203. > >> > org-export-as-html(nil nil nil string t) > >> > (let nil (org-export-as-html nil nil nil (quote string) t)) > >> > eval((let nil (org-export-as-html nil nil nil (quote string) t))) > >> > (progn (insert org-mime-default-header) (insert body) (write-file > >> > tmp-file) (eval (list ... org-local-vars ...))) > >> > (unwind-protect (progn (insert org-mime-default-header) (insert > body) > >> > (write-file tmp-file) (eval ...)) (and (buffer-name temp-buffer) > >> > (kill-buffer temp-buffer))) > >> > (save-current-buffer (set-buffer temp-buffer) (unwind-protect (pro= gn > >> ... > >> > ... ... ...) (and ... ...))) > >> > (with-current-buffer temp-buffer (unwind-protect (progn ... ... ..= . > >> ...) > >> > (and ... ...))) > >> > (let ((temp-buffer ...)) (with-current-buffer temp-buffer > >> (unwind-protect > >> > ... ...))) > >> > (with-temp-buffer (insert org-mime-default-header) (insert body) > >> > (write-file tmp-file) (eval (list ... org-local-vars ...))) > >> > (save-excursion (with-temp-buffer (insert org-mime-default-header) > >> (insert > >> > body) (write-file tmp-file) (eval ...))) > >> > org-mime-org-export("html" #("\nThis is should be HTML > >> > mode.\n\n~foo~\n=3Dbar=3D\n_baz_\n\n| Table | A |\n| 1 | 2 | \n\= n-- > \n" 0 > >> 1 > >> > (fontified t) 1 42 (fontified t) 42 43 (fontified t) 43 44 > (article-type > >> > emphasis fontified t) 44 47 (fontified t) 47 48 (article-type emphas= is > >> > fontified t) 48 50 (fontified t) 50 63 (fontified t face (gnus-cite-= 1 > >> > message-cited-text)) 63 64 (fontified t) 64 78 (fontified t face > >> > (gnus-cite-1 message-cited-text)) 78 79 (fontified t rear-nonsticky = t) > 79 > >> 80 > >> > (fontified t) 80 84 (fontified t)) "/tmp/mail2522NRw") > >> > (org-mime-replace-images (org-mime-org-export "html" raw-body > tmp-file) > >> > tmp-file) > >> > (let* ((region-p ...) (html-start ...) (html-end ...) (raw-body ..= .) > >> > (tmp-file ...) (body ...) (org-export-skip-text-before-1st-heading > nil) > >> > (org-export-htmlize-output-type ...) (org-export-preserve-breaks > >> > org-mime-preserve-breaks) (html-and-images ...) (html-images ...) > (html > >> > ...)) (delete-region html-start html-end) (save-excursion (goto-char > >> > html-start) (insert ... ...))) > >> > org-mime-htmlize(nil) > >> > > >> > > >> > On Fri, Apr 9, 2010 at 12:41 PM, Eric Schulte >> >wrote: > >> > > >> >> Announcing the addition of org-mime to the contrib directory of > Org-mode > >> >> > >> >> this allows sending HTML email using org-mode including... > >> >> > >> >> > >> >> - *tables* colname onecolname two 11 24 39 > >> >> - *inline images* including latex equations [image: $f(n) =3D n = + > >> >> \frac{1}{n} \int_{0}^{n}{d_x f(x) + f(n - x)}$] and the results = of > >> >> ditaa blocks, etc=E2=80=A6 > >> >> > >> >> [image: blue.png] > >> >> > >> >> - *blockquotes* > >> >> > >> >> HTML e-mail is the use of a subset of HTML (often ill-defined) t= o > >> >> provide formatting and semantic markup capabilities in e-mail th= at > >> are not > >> >> available with plain text. =E2=80=93 wikipedia > >> >> > >> >> - fontified *code blocks* (shown below) > >> >> - and *HTML character* conversion, like =E2=88=80 character c s.= t. =E2=88=83 h =E2=88=88 > >> *HTML > >> >> characters* and c =E2=89=A1 h, org-html-export of c results in h > >> >> > >> >> > >> >> > >> >> The original org-mode formatted plain text is included as a > text/plain > >> >> mime alternative to the generated html. > >> >> > >> >> Below find the org-mime export of the org-mime worg page which will > be > >> >> available at http://orgmode.org/worg/org-contrib/org-mime.php. > >> >> > >> >> Best -- Eric > >> >> > >> >> General > >> >> > >> >> org-mime can be used to send HTML email using Org-mode HTML export. > >> >> > >> >> This approximates a WYSiWYG HTML mail editor from within Emacs, and > can > >> be > >> >> useful for sending tables, notified source code, and inline images = in > >> email. > >> >> > >> >> How to use it > >> >> Setup > >> >> > >> >> org-mime exposes two functions > >> >> `org-mime-htmlize' can be called from within a mail composition > buffer > >> to > >> >> export either the entire buffer or just the active region to html, > and > >> embed > >> >> the results into the buffer as a text/html mime section. > >> >> > >> >> org-mime-htmlize is an interactive Lisp function in `org-mime.el'. > >> >> > >> >> (org-mime-htmlize ARG) > >> >> > >> >> Export a portion of an email body composed using `mml-mode' to > >> >> html using `org-mode'. If called with an active region only > >> >> export that region, otherwise export the entire body. > >> >> > >> >> `org-mime-org-buffer-htmlize' can be called from within an Org-mod= e > >> >> buffer to export either the whole buffer or the narrowed subtree or > >> active > >> >> region to HTML, and open a new email buffer including the resulting > HTML > >> >> content as an embedded mime section. > >> >> > >> >> org-mime-org-buffer-htmlize is an interactive Lisp function in > >> >> `org-mime.el'. > >> >> > >> >> (org-mime-org-buffer-htmlize) > >> >> > >> >> Export the current org-mode buffer to HTML using > >> >> `org-export-as-html' and package the results into an email > >> >> handling with appropriate MIME encoding. > >> >> > >> >> The following key bindings are suggested, which bind the C-c M-o k= ey > >> >> sequence to the appropriate org-mime function in both email and > Org-mode > >> >> buffers. > >> >> > >> >> (add-hook 'message-mode-hook > >> >> (lambda () > >> >> (local-set-key "\C-c\M-o" 'org-mime-htmlize))) > >> >> (add-hook 'org-mode-hook > >> >> (lambda () > >> >> (local-set-key "\C-c\M-o" 'org-mime-org-buffer-htmlize)= )) > >> >> > >> >> CSS style customization > >> >> > >> >> Email clients will often strip all global CSS from email messages. = In > >> the > >> >> case of web-based email readers this is essential in order to prote= ct > >> the > >> >> CSS of the containing web site. To ensure that your CSS styles are > >> rendered > >> >> correctly they must be included in the actual body of the elements = to > >> which > >> >> they apply. > >> >> > >> >> The `org-mime-html-hook' allows for the insertion of these importan= t > CSS > >> >> elements into the resulting HTML before mime encoding. The followin= g > are > >> >> some possible uses of this hook. > >> >> > >> >> - for those who use color themes with Dark backgrounds it is > useful > >> to > >> >> set a dark background for all exported code blocks and example > >> regions. This > >> >> can be accomplished with the following > >> >> > >> >> (add-hook 'org-mime-html-hook > >> >> (lambda () > >> >> (org-mime-change-element-style > >> >> "pre" (format "color: %s; background-color: %s; > padding: > >> 0.5em;" > >> >> "#E6E1DC" "#232323")))) > >> >> > >> >> - the following can be used to nicely offset block quotes in > email > >> >> bodies > >> >> > >> >> (add-hook 'org-mime-html-hook > >> >> (lambda () > >> >> (org-mime-change-element-style > >> >> "blockquote" "border-left: 2px solid gray; > padding-left: > >> 4px;"))) > >> >> > >> >> > >> >> For other customization options see the org-mime customization grou= p. > >> >> Credits > >> >> > >> >> org-mime was developed by Eric Schulte with much-appreciated help a= nd > >> >> discussion from everyone on the "using orgmode to send html mail< > >> http://thread.gmane.org/gmane.emacs.orgmode/23153>" > >> >> thread especially David Maus. > >> >> > >> >> "Eric Schulte" writes: > >> >> > >> >> > Carsten Dominik writes: > >> >> > > >> >> >> On Apr 5, 2010, at 7:39 AM, Eric Schulte wrote: > >> >> >> > >> >> >>> Hi, > >> >> >>> > >> >> >>> It is now possible to send HTML mail directly form an org-mode > >> buffer. > >> >> >>> > >> >> >>> Calling `org-mime-org-buffer-htmlize' (could probably use a > better > >> >> >>> name) > >> >> >>> from inside of an org-mode buffer will use `org-export-as-html' > to > >> >> >>> generate HTML of the buffer (respecting regions and subtree > >> >> >>> narrowing), > >> >> >>> and will then package the resulting HTML with all linked images > into > >> a > >> >> >>> message buffer. > >> >> >>> > >> >> >>> As usual thanks to Carsten's thoughtfully organized functions a= nd > >> >> >>> control variables this was surprisingly easy to implement. > >> >> >>> > >> >> >>> Cheers -- Eric > >> >> >>> > >> >> >>> The code is still up at http://github.com/eschulte/org-mime > >> >> >> > >> >> >> CONTIRB? yes, after the release..... > >> >> >> > >> >> > > >> >> > Sounds great, I'm move this into contrib then. -- Eric > >> >> > > >> >> >> > >> >> >> - Carsten > >> >> >> > >> >> >>> > >> >> >>> "Eric Schulte" writes: > >> >> >>> > >> >> >>>> Dan Davison writes: > >> >> >>>> > >> >> >>>> [...] > >> >> >>>> > >> >> >>>>> > >> >> >>>>> As I understand it the code you've written is designed to be > >> >> >>>>> called in a > >> >> >>>>> message-mode buffer with orgstruct-mode in force. Would it ma= ke > >> >> >>>>> sense to > >> >> >>>>> also include in your package a complementary function, that o= ne > >> >> >>>>> calls in > >> >> >>>>> an org-mode buffer? I envisage this generating the HTML, > forming > >> the > >> >> >>>>> multipart email contents, and then saving it to the kill ring= , > so > >> >> >>>>> that > >> >> >>>>> it can be pasted into an email. > >> >> >>>>> > >> >> >>>>> This function would have access to the directory-name and so > >> >> >>>>> should be > >> >> >>>>> able to resolve relative paths. Also, there might be some oth= er > >> >> >>>>> advantages -- for example when exporting just a region or > subtree, > >> >> >>>>> buffer-wide properties such as #+TITLE and #+AUTHOR are picke= d > up > >> >> >>>>> by the > >> >> >>>>> org exporter and packaged into the HTML. > >> >> >>>>> > >> >> >>>>> In other words, can I use your machinery to package up the HT= ML > >> >> >>>>> generated by Org's C-e dispatcher into an > >> appropriately-constructed > >> >> >>>>> email? > >> >> >>>>> > >> >> >>>> > >> >> >>>> Hi Dan, > >> >> >>>> > >> >> >>>> That sounds like a good idea, I've added it to a fledgling tas= k > >> list > >> >> >>>> packaged in the README at [1]. I'd say there are two options. > >> >> >>>> > >> >> >>>> 1) which you mentioned saving the entire exported content to t= he > >> >> >>>> kill-ring. One problem here is that everything is still tex= t > and > >> >> >>>> pastable only *before* the mime export process, which means > that > >> >> >>>> linked images wouldn't resolve after pasting into the email > >> client. > >> >> >>>> > >> >> >>>> 2) having the function generate a new mail buffer containing t= he > >> >> >>>> exported content. This buffer would need to have it's > >> >> >>>> `buffer-file-name' set, for images to resolve during export. > I'm > >> >> >>>> not > >> >> >>>> sure how this should best work. > >> >> >>>> > >> >> >>>> Thanks -- Eric > >> >> >>>> > >> >> >>>> Footnotes: > >> >> >>>> [1] http://github.com/eschulte/org-mime > >> >> >>> > >> >> >>> > >> >> >>> _______________________________________________ > >> >> >>> 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 > >> >> >> > >> >> >> - Carsten > >> >> > >> >> _______________________________________________ > >> >> 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 > >> >> > >> >> > >> > --0015174c3c1a340681048428b3db Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable I do get the same result you do. =C2=A0Hopefully, I'll have some time t= omorrow to look into the issue. =C2=A0RIght now, though, my problem is not = the nil, but the error I reported in my previous email.

On Tue, Apr 13, 2010 at 8:57 PM, Eric Schulte <schulte.eric@gmail.com> wr= ote:
So, for some reason the `org-mime-org-export' helper function is
returning nil on your (and Eric's) machines. =C2=A0Could you try evalua= ting
(C-M-x) the following in your *scratch* buffer?

(insert (org-mime-org-export "html" "- first
- second
- third" (make-temp-file "quick-test")))

When I execute the above it inserts the following into the scratch
buffer

<ul>
<li>
first
</li>
<li>
second
</li>
<li>
third
</li>
</ul>

If instead you get an error, or it inserts nil, then it means that our
systems are somehow different with respect to that function, which is a
slight alteration of `org-run-like-in-org-mode'.

At that point you could try using something like

(org-run-like-in-org-mode 'org-export-as-html)

to export a non-html buffer to html, or you could also try starting up
Emacs with the -Q option, then loading org-mime.el, opening an org-mode
file, and calling org-mime-org-buffer-htmlize, and sending an email to
yourself.

Sorry I can't be of more help, I'm really mystified as to how this<= br> function could be returning nil.

Best -- Eric

Andrew Hyatt <ahyatt@gmail.com&g= t; writes:

> Thanks for the response. =C2=A0I upgraded, now I get a
>
> Debugger entered--Lisp error: (wrong-type-argument arrayp t)
> =C2=A0substring(t 33)
> =C2=A0(progn (insert org-mime-default-header) (insert body) (write-fil= e tmp-file)
> (org-load-modules-maybe) (unless org-local-vars (setq org-local-vars .= ..))
> (substring (eval ...) (if ... ... 0)))
> =C2=A0(unwind-protect (progn (insert org-mime-default-header) (insert = body)
> (write-file tmp-file) (org-load-modules-maybe) (unless org-local-vars = ...)
> (substring ... ...)) (and (buffer-name temp-buffer) (kill-buffer
> temp-buffer)))
> =C2=A0(save-current-buffer (set-buffer temp-buffer) (unwind-protect (p= rogn ...
> ... ... ... ... ...) (and ... ...)))
> =C2=A0(with-current-buffer temp-buffer (unwind-protect (progn ... ... = ... ... ...
> ...) (and ... ...)))
> =C2=A0(let ((temp-buffer ...)) (with-current-buffer temp-buffer (unwin= d-protect
> ... ...)))
> =C2=A0(with-temp-buffer (insert org-mime-default-header) (insert body)=
> (write-file tmp-file) (org-load-modules-maybe) (unless org-local-vars = (setq
> org-local-vars ...)) (substring (eval ...) (if ... ... 0)))
> =C2=A0(save-excursion (with-temp-buffer (insert org-mime-default-heade= r) (insert
> body) (write-file tmp-file) (org-load-modules-maybe) (unless org-local= -vars
> ...) (substring ... ...)))
> =C2=A0org-mime-org-export("org" #("\nHTML test\n\n~foo~= \n=3Dbar=3D\n_baz_\n\n| 1 | 2
> |\n| a | b |\n" 0 1 (fontified t) 1 11 (fontified t) 11 12 (fonti= fied t) 12
> 18 (fontified t) 18 24 (fontified t) 24 30 (fontified t) 30 31 (fontif= ied t)
> 31 40 (fontified t face (gnus-cite-1 message-cited-text)) 40 41 (fonti= fied
> t) 41 50 (fontified t face (gnus-cite-1 message-cited-text)) 50 51
> (fontified t)) "/tmp/mail2522ZvL")
> =C2=A0(let* ((region-p ...) (html-start ...) (html-end ...) (raw-body = ...)
> (tmp-file ...) (body ...) (org-export-skip-text-before-1st-heading nil= )
> (org-export-htmlize-output-type ...) (org-export-preserve-breaks
> org-mime-preserve-breaks) (html-and-images ...) (html-images ...) (htm= l
> ...)) (delete-region html-start html-end) (save-excursion (goto-char > html-start) (insert ... ...)))
> =C2=A0org-mime-htmlize(nil)
> =C2=A0call-interactively(org-mime-htmlize record nil)
>
> I tried this with orgstruct-mode off and on, but it was the same error=
> either way. =C2=A0Earlier, before I got the latest version, I tried wi= th
> orgstruct-mode on, and it successfull htmlized my mail. But, when I re= ceived
> it, the mail only contained the word "nil".
>
> On Mon, Apr 12, 2010 at 1:22 PM, Eric Schulte <schulte.eric@gmail.com>wrote:
>
>> Hi Andrew,
>>
>> Thanks for the report. =C2=A0My guess is that somehow the call to<= br> >> org-export-as-html is erroring out because some org-mode variables=
>> aren't being set, maybe you don't have orgstruct-mode as a= minor-mode in
>> your email composition -- not that it's required, but that cou= ld be the
>> difference between our setups which is causing you to see the bug = and
>> not me.
>>
>> I've changed the `org-mime-org-export' so it more closely = mimics the
>> `org-run-like-in-org-mode' wrapping function, which should hop= efully fix
>> this problem. =C2=A0Please let me know either way, and if the prob= lem
>> persists we can try to figure out exactly which variable isn't= being
>> initialized.
>>
>> Thanks for the report! -- Eric
>>
>> Andrew Hyatt <ahyatt@gmail.= com> writes:
>>
>> > This looks great. =C2=A0However, I get an error on my test ma= il:
>> >
>> > This is should be HTML mode.
>> >
>> > ~foo~
>> > =3Dbar=3D
>> > _baz_
>> >
>> > | Table | A |
>> > | 1 =C2=A0 =C2=A0 | 2 |
>> >
>> > On calling org-mime-htmlize
>> >
>> > Debugger entered--Lisp error: (wrong-type-argument stringp ni= l)
>> > =C2=A0 string-match(nil #("This is should be HTML mode.&= quot; 0 28 (fontified t)))
>> > =C2=A0 byte-code("\304\211. \305\n \"\203A
>> > =C2=A0 org-html-handle-time-stamps(#("This is should be = HTML mode." 0 28
>> > (fontified t)))
>> > =C2=A0 byte-code(" \203.
>> > =C2=A0 org-export-as-html(nil nil nil string t)
>> > =C2=A0 (let nil (org-export-as-html nil nil nil (quote string= ) t))
>> > =C2=A0 eval((let nil (org-export-as-html nil nil nil (quote s= tring) t)))
>> > =C2=A0 (progn (insert org-mime-default-header) (insert body) = (write-file
>> > tmp-file) (eval (list ... org-local-vars ...)))
>> > =C2=A0 (unwind-protect (progn (insert org-mime-default-header= ) (insert body)
>> > (write-file tmp-file) (eval ...)) (and (buffer-name temp-buff= er)
>> > (kill-buffer temp-buffer)))
>> > =C2=A0 (save-current-buffer (set-buffer temp-buffer) (unwind-= protect (progn
>> ...
>> > ... ... ...) (and ... ...)))
>> > =C2=A0 (with-current-buffer temp-buffer (unwind-protect (prog= n ... ... ...
>> ...)
>> > (and ... ...)))
>> > =C2=A0 (let ((temp-buffer ...)) (with-current-buffer temp-buf= fer
>> (unwind-protect
>> > ... ...)))
>> > =C2=A0 (with-temp-buffer (insert org-mime-default-header) (in= sert body)
>> > (write-file tmp-file) (eval (list ... org-local-vars ...))) >> > =C2=A0 (save-excursion (with-temp-buffer (insert org-mime-def= ault-header)
>> (insert
>> > body) (write-file tmp-file) (eval ...)))
>> > =C2=A0 org-mime-org-export("html" #("\nThis is= should be HTML
>> > mode.\n\n~foo~\n=3Dbar=3D\n_baz_\n\n| Table | A |\n| 1 =C2=A0= =C2=A0 | 2 | \n\n-- \n" 0
>> 1
>> > (fontified t) 1 42 (fontified t) 42 43 (fontified t) 43 44 (a= rticle-type
>> > emphasis fontified t) 44 47 (fontified t) 47 48 (article-type= emphasis
>> > fontified t) 48 50 (fontified t) 50 63 (fontified t face (gnu= s-cite-1
>> > message-cited-text)) 63 64 (fontified t) 64 78 (fontified t f= ace
>> > (gnus-cite-1 message-cited-text)) 78 79 (fontified t rear-non= sticky t) 79
>> 80
>> > (fontified t) 80 84 (fontified t)) "/tmp/mail2522NRw&quo= t;)
>> > =C2=A0 (org-mime-replace-images (org-mime-org-export "ht= ml" raw-body tmp-file)
>> > tmp-file)
>> > =C2=A0 (let* ((region-p ...) (html-start ...) (html-end ...) = (raw-body ...)
>> > (tmp-file ...) (body ...) (org-export-skip-text-before-1st-he= ading nil)
>> > (org-export-htmlize-output-type ...) (org-export-preserve-bre= aks
>> > org-mime-preserve-breaks) (html-and-images ...) (html-images = ...) (html
>> > ...)) (delete-region html-start html-end) (save-excursion (go= to-char
>> > html-start) (insert ... ...)))
>> > =C2=A0 org-mime-htmlize(nil)
>> >
>> >
>> > On Fri, Apr 9, 2010 at 12:41 PM, Eric Schulte <schulte.eric@gmail.com
>> >wrote:
>> >
>> >> Announcing the addition of org-mime to the contrib direct= ory of Org-mode
>> >>
>> >> this allows sending HTML email using org-mode including..= .
>> >>
>> >>
>> >> =C2=A0 =C2=A0- *tables* =C2=A0 colname onecolname two =C2= =A011 24 39
>> >> =C2=A0 =C2=A0- *inline images* including latex equations = [image: $f(n) =3D n +
>> >> =C2=A0 =C2=A0\frac{1}{n} \int_{0}^{n}{d_x f(x) + f(n - x)= }$] and the results of
>> >> =C2=A0 =C2=A0ditaa blocks, etc=E2=80=A6
>> >>
>> >> [image: blue.png]
>> >>
>> >> =C2=A0 =C2=A0- *blockquotes*
>> >>
>> >> =C2=A0 =C2=A0HTML e-mail is the use of a subset of HTML (= often ill-defined) to
>> >> =C2=A0 =C2=A0provide formatting and semantic markup capab= ilities in e-mail that
>> are not
>> >> =C2=A0 =C2=A0available with plain text. =E2=80=93 wikiped= ia
>> >>
>> >> =C2=A0 =C2=A0 - fontified *code blocks* (shown below)
>> >> =C2=A0 =C2=A0- and *HTML character* conversion, like =E2= =88=80 character c s.t. =E2=88=83 h =E2=88=88
>> *HTML
>> >> =C2=A0 =C2=A0characters* and c =E2=89=A1 h, org-html-expo= rt of c results in h
>> >>
>> >>
>> >>
>> >> The original org-mode formatted plain text is included as= a text/plain
>> >> mime alternative to the generated html.
>> >>
>> >> Below find the org-mime export of the org-mime worg page = which will be
>> >> available at http://orgmode.org/worg/org-contrib/org-= mime.php.
>> >>
>> >> Best -- Eric
>> >>
>> >> General
>> >>
>> >> org-mime can be used to send HTML email using Org-mode HT= ML export.
>> >>
>> >> This approximates a WYSiWYG HTML mail editor from within = Emacs, and can
>> be
>> >> useful for sending tables, notified source code, and inli= ne images in
>> email.
>> >>
>> >> =C2=A0 How to use it
>> >> =C2=A0Setup
>> >>
>> >> org-mime exposes two functions
>> >> =C2=A0`org-mime-htmlize' can be called from within a = mail composition buffer
>> to
>> >> export either the entire buffer or just the active region= to html, and
>> embed
>> >> the results into the buffer as a text/html mime section.<= br> >> >>
>> >> org-mime-htmlize is an interactive Lisp function in `org-= mime.el'.
>> >>
>> >> (org-mime-htmlize ARG)
>> >>
>> >> Export a portion of an email body composed using `mml-mod= e' to
>> >> html using `org-mode'. =C2=A0If called with an active= region only
>> >> export that region, otherwise export the entire body.
>> >>
>> >> =C2=A0`org-mime-org-buffer-htmlize' can be called fro= m within an Org-mode
>> >> buffer to export either the whole buffer or the narrowed = subtree or
>> active
>> >> region to HTML, and open a new email buffer including the= resulting HTML
>> >> content as an embedded mime section.
>> >>
>> >> org-mime-org-buffer-htmlize is an interactive Lisp functi= on in
>> >> `org-mime.el'.
>> >>
>> >> (org-mime-org-buffer-htmlize)
>> >>
>> >> Export the current org-mode buffer to HTML using
>> >> `org-export-as-html' and package the results into an = email
>> >> handling with appropriate MIME encoding.
>> >>
>> >> =C2=A0The following key bindings are suggested, which bin= d the C-c M-o key
>> >> sequence to the appropriate org-mime function in both ema= il and Org-mode
>> >> buffers.
>> >>
>> >> (add-hook 'message-mode-hook
>> >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (lambda ()
>> >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (local-set-key = "\C-c\M-o" 'org-mime-htmlize)))
>> >> (add-hook 'org-mode-hook
>> >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (lambda ()
>> >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (local-set-key = "\C-c\M-o" 'org-mime-org-buffer-htmlize)))
>> >>
>> >> =C2=A0 CSS style customization
>> >>
>> >> Email clients will often strip all global CSS from email = messages. In
>> the
>> >> case of web-based email readers this is essential in orde= r to protect
>> the
>> >> CSS of the containing web site. To ensure that your CSS s= tyles are
>> rendered
>> >> correctly they must be included in the actual body of the= elements to
>> which
>> >> they apply.
>> >>
>> >> The `org-mime-html-hook' allows for the insertion of = these important CSS
>> >> elements into the resulting HTML before mime encoding. Th= e following are
>> >> some possible uses of this hook.
>> >>
>> >> =C2=A0 =C2=A0- for those who use color themes with Dark b= ackgrounds it is useful
>> to
>> >> =C2=A0 =C2=A0set a dark background for all exported code = blocks and example
>> regions. This
>> >> =C2=A0 =C2=A0can be accomplished with the following
>> >>
>> >> =C2=A0 =C2=A0(add-hook 'org-mime-html-hook
>> >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(lambda (= )
>> >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(o= rg-mime-change-element-style
>> >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &= quot;pre" (format "color: %s; background-color: %s; padding:
>> 0.5em;"
>> >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "#E6E1DC" "= #232323"))))
>> >>
>> >> =C2=A0 =C2=A0 - the following can be used to nicely offse= t block quotes in email
>> >> =C2=A0 =C2=A0bodies
>> >>
>> >> =C2=A0 =C2=A0(add-hook 'org-mime-html-hook
>> >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(lambda (= )
>> >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(o= rg-mime-change-element-style
>> >> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &= quot;blockquote" "border-left: 2px solid gray; padding-left:
>> 4px;")))
>> >>
>> >>
>> >> For other customization options see the org-mime customiz= ation group.
>> >> =C2=A0 Credits
>> >>
>> >> org-mime was developed by Eric Schulte with much-apprecia= ted help and
>> >> discussion from everyone on the "using orgmode to se= nd html mail<
>> http://thread.gmane.org/gmane.emacs.orgmode/23153>&quo= t;
>> >> thread especially David Maus.
>> >>
>> >> "Eric Schulte" <schulte.eric@gmail.com> writes:
>> >>
>> >> > Carsten Dominik <carsten.dominik@gmail.com> writes:
>> >> >
>> >> >> On Apr 5, 2010, at 7:39 AM, Eric Schulte wrote:<= br> >> >> >>
>> >> >>> Hi,
>> >> >>>
>> >> >>> It is now possible to send HTML mail directl= y form an org-mode
>> buffer.
>> >> >>>
>> >> >>> Calling `org-mime-org-buffer-htmlize' (c= ould probably use a better
>> >> >>> name)
>> >> >>> from inside of an org-mode buffer will use `= org-export-as-html' to
>> >> >>> generate HTML of the buffer (respecting regi= ons and subtree
>> >> >>> narrowing),
>> >> >>> and will then package the resulting HTML wit= h all linked images into
>> a
>> >> >>> message buffer.
>> >> >>>
>> >> >>> As usual thanks to Carsten's thoughtfull= y organized functions and
>> >> >>> control variables this was surprisingly easy= to implement.
>> >> >>>
>> >> >>> Cheers -- Eric
>> >> >>>
>> >> >>> The code is still up at http://github.com/eschulte/or= g-mime
>> >> >>
>> >> >> CONTIRB? =C2=A0yes, after the release.....
>> >> >>
>> >> >
>> >> > Sounds great, I'm move this into contrib then. -= - Eric
>> >> >
>> >> >>
>> >> >> - Carsten
>> >> >>
>> >> >>>
>> >> >>> "Eric Schulte" <schulte.eric@gmail.com> writes:
>> >> >>>
>> >> >>>> Dan Davison <davison@stats.ox.ac.uk> writes:
>> >> >>>>
>> >> >>>> [...]
>> >> >>>>
>> >> >>>>>
>> >> >>>>> As I understand it the code you'= ve written is designed to be
>> >> >>>>> called in a
>> >> >>>>> message-mode buffer with orgstruct-m= ode in force. Would it make
>> >> >>>>> sense to
>> >> >>>>> also include in your package a compl= ementary function, that one
>> >> >>>>> calls in
>> >> >>>>> an org-mode buffer? I envisage this = generating the HTML, forming
>> the
>> >> >>>>> multipart email contents, and then s= aving it to the kill ring, so
>> >> >>>>> that
>> >> >>>>> it can be pasted into an email.
>> >> >>>>>
>> >> >>>>> This function would have access to t= he directory-name and so
>> >> >>>>> should be
>> >> >>>>> able to resolve relative paths. Also= , there might be some other
>> >> >>>>> advantages -- for example when expor= ting just a region or subtree,
>> >> >>>>> buffer-wide properties such as #+TIT= LE and #+AUTHOR are picked up
>> >> >>>>> by the
>> >> >>>>> org exporter and packaged into the H= TML.
>> >> >>>>>
>> >> >>>>> In other words, can I use your machi= nery to package up the HTML
>> >> >>>>> generated by Org's C-e dispatche= r into an
>> appropriately-constructed
>> >> >>>>> email?
>> >> >>>>>
>> >> >>>>
>> >> >>>> Hi Dan,
>> >> >>>>
>> >> >>>> That sounds like a good idea, I've a= dded it to a fledgling task
>> list
>> >> >>>> packaged in the README at [1]. =C2=A0I&#= 39;d say there are two options.
>> >> >>>>
>> >> >>>> 1) which you mentioned saving the entire= exported content to the
>> >> >>>> =C2=A0 kill-ring. =C2=A0One problem here= is that everything is still text and
>> >> >>>> =C2=A0 pastable only *before* the mime e= xport process, which means that
>> >> >>>> =C2=A0 linked images wouldn't resolv= e after pasting into the email
>> client.
>> >> >>>>
>> >> >>>> 2) having the function generate a new ma= il buffer containing the
>> >> >>>> =C2=A0 exported content. =C2=A0This buff= er would need to have it's
>> >> >>>> =C2=A0 `buffer-file-name' set, for i= mages to resolve during export. =C2=A0I'm
>> >> >>>> not
>> >> >>>> =C2=A0 sure how this should best work. >> >> >>>>
>> >> >>>> Thanks -- Eric
>> >> >>>>
>> >> >>>> Footnotes:
>> >> >>>> [1] =C2=A0http://github.com/eschulte/org-mime=
>> >> >>>
>> >> >>>
>> >> >>> ____________________________________________= ___
>> >> >>> Emacs-orgmode mailing list
>> >> >>> Please use `Reply All' to send replies t= o the list.
>> >> >>> Ema= cs-orgmode@gnu.org
>> >> >>> http://lists.gnu.org/mailman/listinfo= /emacs-orgmode
>> >> >>
>> >> >> - Carsten
>> >>
>> >> _______________________________________________
>> >> Emacs-orgmode mailing list
>> >> Please use `Reply All' to send replies to the list. >> >> Emacs-orgmode@gn= u.org
>> >> http://lists.gnu.org/mailman/listinfo/emacs-orgmod= e
>> >>
>> >>
>>

--0015174c3c1a340681048428b3db-- --===============0653442357== 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 --===============0653442357==--