Browse Source

export back-ends: Activate asynchronous export

* contrib/lisp/org-e-ascii.el (org-e-ascii-export-as-ascii,
  org-e-ascii-export-to-ascii): Activate asynchronous export.
* contrib/lisp/org-e-beamer.el (org-e-beamer-export-as-latex,
  org-e-beamer-export-to-latex): Activate asynchronous export.
* contrib/lisp/org-e-groff.el (org-e-groff-export-to-groff,
  org-e-groff-export-to-pdf): Activate asynchronous export.
* contrib/lisp/org-e-html.el (org-e-html-export-as-html,
  org-e-html-export-to-html): Activate asynchronous export.
* contrib/lisp/org-e-icalendar.el (org-e-icalendar-export-to-ics):
  Activate asynchronous export.
* contrib/lisp/org-e-latex.el (org-e-latex-export-as-latex,
  org-e-latex-export-to-latex, org-e-latex-export-to-pdf): Activate
  asynchronous export.
* contrib/lisp/org-e-man.el (org-e-man-export-to-man,
  org-e-man-export-to-pdf): Activate asynchronous export.
* contrib/lisp/org-e-odt.el (org-e-odt-export-to-odt): Activate
  asynchronous export.  Remove body-only argument.
* contrib/lisp/org-e-texinfo.el (org-e-texinfo-export-to-texinfo,
  org-e-texinfo-export-to-info): Activate asynchronous export.
* contrib/lisp/org-md.el (org-md-export-as-markdown,
  org-md-export-to-markdown): Activate asynchronous export.
Nicolas Goaziou 13 years ago
parent
commit
06872a4570

+ 47 - 22
contrib/lisp/org-e-ascii.el

@@ -104,23 +104,23 @@
   :menu-entry
   :menu-entry
   (?t "Export to Plain Text"
   (?t "Export to Plain Text"
       ((?A "As ASCII buffer"
       ((?A "As ASCII buffer"
-	   (lambda (s v b)
-	     (org-e-ascii-export-as-ascii s v b '(:ascii-charset ascii))))
+	   (lambda (a s v b)
+	     (org-e-ascii-export-as-ascii a s v b '(:ascii-charset ascii))))
        (?a "As ASCII file"
        (?a "As ASCII file"
-	   (lambda (s v b)
-	     (org-e-ascii-export-to-ascii s v b '(:ascii-charset ascii))))
+	   (lambda (a s v b)
+	     (org-e-ascii-export-to-ascii a s v b '(:ascii-charset ascii))))
        (?L "As Latin1 buffer"
        (?L "As Latin1 buffer"
-	   (lambda (s v b)
-	     (org-e-ascii-export-as-ascii s v b '(:ascii-charset latin1))))
+	   (lambda (a s v b)
+	     (org-e-ascii-export-as-ascii a s v b '(:ascii-charset latin1))))
        (?l "As Latin1 file"
        (?l "As Latin1 file"
-	   (lambda (s v b)
-	     (org-e-ascii-export-to-ascii s v b '(:ascii-charset latin1))))
+	   (lambda (a s v b)
+	     (org-e-ascii-export-to-ascii a s v b '(:ascii-charset latin1))))
        (?U "As UTF-8 buffer"
        (?U "As UTF-8 buffer"
-	   (lambda (s v b)
-	     (org-e-ascii-export-as-ascii s v b '(:ascii-charset utf-8))))
+	   (lambda (a s v b)
+	     (org-e-ascii-export-as-ascii a s v b '(:ascii-charset utf-8))))
        (?u "As UTF-8 file"
        (?u "As UTF-8 file"
-	   (lambda (s v b)
-	     (org-e-ascii-export-to-ascii s v b '(:ascii-charset utf-8))))))
+	   (lambda (a s v b)
+	     (org-e-ascii-export-to-ascii a s v b '(:ascii-charset utf-8))))))
   :filters-alist ((:filter-headline . org-e-ascii-filter-headline-blank-lines)
   :filters-alist ((:filter-headline . org-e-ascii-filter-headline-blank-lines)
 		  (:filter-parse-tree . org-e-ascii-filter-paragraph-spacing)
 		  (:filter-parse-tree . org-e-ascii-filter-paragraph-spacing)
 		  (:filter-section . org-e-ascii-filter-headline-blank-lines))
 		  (:filter-section . org-e-ascii-filter-headline-blank-lines))
@@ -1780,7 +1780,7 @@ This function only applies to `e-ascii' back-end.  See
 
 
 ;;;###autoload
 ;;;###autoload
 (defun org-e-ascii-export-as-ascii
 (defun org-e-ascii-export-as-ascii
-  (&optional subtreep visible-only body-only ext-plist)
+  (&optional async subtreep visible-only body-only ext-plist)
   "Export current buffer to a text buffer.
   "Export current buffer to a text buffer.
 
 
 If narrowing is active in the current buffer, only export its
 If narrowing is active in the current buffer, only export its
@@ -1788,6 +1788,10 @@ narrowed part.
 
 
 If a region is active, export that region.
 If a region is active, export that region.
 
 
+A non-nil optional argument ASYNC means the process should happen
+asynchronously.  The resulting buffer should be accessible
+through the `org-export-stack' interface.
+
 When optional argument SUBTREEP is non-nil, export the sub-tree
 When optional argument SUBTREEP is non-nil, export the sub-tree
 at point, extracting information from the headline properties
 at point, extracting information from the headline properties
 first.
 first.
@@ -1806,16 +1810,27 @@ Export is done in a buffer named \"*Org E-ASCII Export*\", which
 will be displayed when `org-export-show-temporary-export-buffer'
 will be displayed when `org-export-show-temporary-export-buffer'
 is non-nil."
 is non-nil."
   (interactive)
   (interactive)
-  (let ((outbuf (org-export-to-buffer
-		 'e-ascii "*Org E-ASCII Export*"
-		 subtreep visible-only body-only ext-plist)))
-    (with-current-buffer outbuf (text-mode))
-    (when org-export-show-temporary-export-buffer
-      (switch-to-buffer-other-window outbuf))))
+  (if async
+      (org-export-async-start
+	  (lambda (output)
+	    (with-current-buffer (get-buffer-create "*Org E-ASCII Export*")
+	      (erase-buffer)
+	      (insert output)
+	      (goto-char (point-min))
+	      (text-mode)
+	      (org-export-add-to-stack (current-buffer) 'e-ascii)))
+	`(org-export-as 'e-ascii ,subtreep ,visible-only ,body-only
+			',ext-plist))
+    (let ((outbuf (org-export-to-buffer
+		   'e-ascii "*Org E-ASCII Export*"
+		   subtreep visible-only body-only ext-plist)))
+      (with-current-buffer outbuf (text-mode))
+      (when org-export-show-temporary-export-buffer
+	(switch-to-buffer-other-window outbuf)))))
 
 
 ;;;###autoload
 ;;;###autoload
 (defun org-e-ascii-export-to-ascii
 (defun org-e-ascii-export-to-ascii
-  (&optional subtreep visible-only body-only ext-plist)
+  (&optional async subtreep visible-only body-only ext-plist)
   "Export current buffer to a text file.
   "Export current buffer to a text file.
 
 
 If narrowing is active in the current buffer, only export its
 If narrowing is active in the current buffer, only export its
@@ -1823,6 +1838,10 @@ narrowed part.
 
 
 If a region is active, export that region.
 If a region is active, export that region.
 
 
+A non-nil optional argument ASYNC means the process should happen
+asynchronously.  The resulting file should be accessible through
+the `org-export-stack' interface.
+
 When optional argument SUBTREEP is non-nil, export the sub-tree
 When optional argument SUBTREEP is non-nil, export the sub-tree
 at point, extracting information from the headline properties
 at point, extracting information from the headline properties
 first.
 first.
@@ -1840,8 +1859,14 @@ file-local settings.
 Return output file's name."
 Return output file's name."
   (interactive)
   (interactive)
   (let ((outfile (org-export-output-file-name ".txt" subtreep)))
   (let ((outfile (org-export-output-file-name ".txt" subtreep)))
-    (org-export-to-file
-     'e-ascii outfile subtreep visible-only body-only ext-plist)))
+    (if async
+	(org-export-async-start
+	    (lambda (f) (org-export-add-to-stack f 'e-ascii))
+	  `(expand-file-name
+	    (org-export-to-file
+	     'e-ascii ,outfile ,subtreep ,visible-only ,body-only ',ext-plist)))
+      (org-export-to-file
+       'e-ascii outfile subtreep visible-only body-only ext-plist))))
 
 
 ;;;###autoload
 ;;;###autoload
 (defun org-e-ascii-publish-to-ascii (plist filename pub-dir)
 (defun org-e-ascii-publish-to-ascii (plist filename pub-dir)

+ 57 - 15
contrib/lisp/org-e-beamer.el

@@ -273,8 +273,9 @@ brackets.  Return overlay specification, as a string, or nil."
        (?b "As TEX file (Beamer)" org-e-beamer-export-to-latex)
        (?b "As TEX file (Beamer)" org-e-beamer-export-to-latex)
        (?P "As PDF file (Beamer)" org-e-beamer-export-to-pdf)
        (?P "As PDF file (Beamer)" org-e-beamer-export-to-pdf)
        (?O "As PDF file and open (Beamer)"
        (?O "As PDF file and open (Beamer)"
-	   (lambda (s v b)
-	     (org-open-file (org-e-beamer-export-to-pdf s v b))))))
+	   (lambda (a s v b)
+	     (if a (org-e-beamer-export-to-pdf t s v b)
+	       (org-open-file (org-e-beamer-export-to-pdf nil s v b)))))))
   :options-alist
   :options-alist
   ((:beamer-theme "BEAMER_THEME" nil org-e-beamer-theme)
   ((:beamer-theme "BEAMER_THEME" nil org-e-beamer-theme)
    (:beamer-color-theme "BEAMER_COLOR_THEME" nil nil t)
    (:beamer-color-theme "BEAMER_COLOR_THEME" nil nil t)
@@ -980,7 +981,7 @@ value."
 
 
 ;;;###autoload
 ;;;###autoload
 (defun org-e-beamer-export-as-latex
 (defun org-e-beamer-export-as-latex
-  (&optional subtreep visible-only body-only ext-plist)
+  (&optional async subtreep visible-only body-only ext-plist)
   "Export current buffer as a Beamer buffer.
   "Export current buffer as a Beamer buffer.
 
 
 If narrowing is active in the current buffer, only export its
 If narrowing is active in the current buffer, only export its
@@ -988,6 +989,10 @@ narrowed part.
 
 
 If a region is active, export that region.
 If a region is active, export that region.
 
 
+A non-nil optional argument ASYNC means the process should happen
+asynchronously.  The resulting buffer should be accessible
+through the `org-export-stack' interface.
+
 When optional argument SUBTREEP is non-nil, export the sub-tree
 When optional argument SUBTREEP is non-nil, export the sub-tree
 at point, extracting information from the headline properties
 at point, extracting information from the headline properties
 first.
 first.
@@ -1006,16 +1011,28 @@ Export is done in a buffer named \"*Org E-BEAMER Export*\", which
 will be displayed when `org-export-show-temporary-export-buffer'
 will be displayed when `org-export-show-temporary-export-buffer'
 is non-nil."
 is non-nil."
   (interactive)
   (interactive)
-  (let ((outbuf (org-export-to-buffer
-		 'e-beamer "*Org E-BEAMER Export*"
-		 subtreep visible-only body-only ext-plist)))
-    (with-current-buffer outbuf (LaTeX-mode))
-    (when org-export-show-temporary-export-buffer
-      (switch-to-buffer-other-window outbuf))))
+  (if async
+      (org-export-async-start
+	  (lambda (output)
+	    (with-current-buffer (get-buffer-create "*Org E-BEAMER Export*")
+	      (erase-buffer)
+	      (insert output)
+	      (goto-char (point-min))
+	      (LaTeX-mode)
+	      (when org-export-show-temporary-export-buffer
+		(org-export-add-to-stack (current-buffer) 'e-beamer))))
+	`(org-export-as 'e-beamer ,subtreep ,visible-only ,body-only
+			',ext-plist))
+    (let ((outbuf (org-export-to-buffer
+		   'e-beamer "*Org E-BEAMER Export*"
+		   subtreep visible-only body-only ext-plist)))
+      (with-current-buffer outbuf (LaTeX-mode))
+      (when org-export-show-temporary-export-buffer
+	(switch-to-buffer-other-window outbuf)))))
 
 
 ;;;###autoload
 ;;;###autoload
 (defun org-e-beamer-export-to-latex
 (defun org-e-beamer-export-to-latex
-  (&optional subtreep visible-only body-only ext-plist)
+  (&optional async subtreep visible-only body-only ext-plist)
   "Export current buffer as a Beamer presentation (tex).
   "Export current buffer as a Beamer presentation (tex).
 
 
 If narrowing is active in the current buffer, only export its
 If narrowing is active in the current buffer, only export its
@@ -1023,6 +1040,10 @@ narrowed part.
 
 
 If a region is active, export that region.
 If a region is active, export that region.
 
 
+A non-nil optional argument ASYNC means the process should happen
+asynchronously.  The resulting file should be accessible through
+the `org-export-stack' interface.
+
 When optional argument SUBTREEP is non-nil, export the sub-tree
 When optional argument SUBTREEP is non-nil, export the sub-tree
 at point, extracting information from the headline properties
 at point, extracting information from the headline properties
 first.
 first.
@@ -1040,12 +1061,19 @@ file-local settings.
 Return output file's name."
 Return output file's name."
   (interactive)
   (interactive)
   (let ((outfile (org-export-output-file-name ".tex" subtreep)))
   (let ((outfile (org-export-output-file-name ".tex" subtreep)))
-    (org-export-to-file
-     'e-beamer outfile subtreep visible-only body-only ext-plist)))
+    (if async
+	(org-export-async-start
+	    (lambda (f) (org-export-add-to-stack f 'e-beamer))
+	  `(expand-file-name
+	    (org-export-to-file
+	     'e-beamer ,outfile ,subtreep ,visible-only ,body-only
+	     ',ext-plist)))
+      (org-export-to-file
+       'e-beamer outfile subtreep visible-only body-only ext-plist))))
 
 
 ;;;###autoload
 ;;;###autoload
 (defun org-e-beamer-export-to-pdf
 (defun org-e-beamer-export-to-pdf
-  (&optional subtreep visible-only body-only ext-plist)
+  (&optional async subtreep visible-only body-only ext-plist)
   "Export current buffer as a Beamer presentation (PDF).
   "Export current buffer as a Beamer presentation (PDF).
 
 
 If narrowing is active in the current buffer, only export its
 If narrowing is active in the current buffer, only export its
@@ -1053,6 +1081,10 @@ narrowed part.
 
 
 If a region is active, export that region.
 If a region is active, export that region.
 
 
+A non-nil optional argument ASYNC means the process should happen
+asynchronously.  The resulting file should be accessible through
+the `org-export-stack' interface.
+
 When optional argument SUBTREEP is non-nil, export the sub-tree
 When optional argument SUBTREEP is non-nil, export the sub-tree
 at point, extracting information from the headline properties
 at point, extracting information from the headline properties
 first.
 first.
@@ -1069,8 +1101,18 @@ file-local settings.
 
 
 Return PDF file's name."
 Return PDF file's name."
   (interactive)
   (interactive)
-  (org-e-latex-compile
-   (org-e-beamer-export-to-latex subtreep visible-only body-only ext-plist)))
+  (if async
+      (let ((outfile (org-export-output-file-name ".tex" subtreep)))
+	(org-export-async-start
+	    (lambda (f) (org-export-add-to-stack f 'e-beamer))
+	  `(expand-file-name
+	    (org-e-latex-compile
+	     (org-export-to-file
+	      'e-beamer ,outfile ,subtreep ,visible-only ,body-only
+	      ',ext-plist)))))
+    (org-e-latex-compile
+     (org-e-beamer-export-to-latex
+      nil subtreep visible-only body-only ext-plist))))
 
 
 ;;;###autoload
 ;;;###autoload
 (defun org-e-beamer-select-environment ()
 (defun org-e-beamer-select-environment ()

+ 38 - 9
contrib/lisp/org-e-groff.el

@@ -100,7 +100,9 @@
       ((?g "As GROFF file" org-e-groff-export-to-groff)
       ((?g "As GROFF file" org-e-groff-export-to-groff)
        (?p "As PDF file" org-e-groff-export-to-pdf)
        (?p "As PDF file" org-e-groff-export-to-pdf)
        (?o "As PDF file and open"
        (?o "As PDF file and open"
-	   (lambda (s v b) (org-open-file (org-e-groff-export-to-pdf s v b))))))
+	   (lambda (a s v b)
+	     (if a (org-e-groff-export-to-pdf t s v b)
+	       (org-open-file (org-e-groff-export-to-pdf nil s v b)))))))
   :options-alist
   :options-alist
   ((:groff-class "GROFF_CLASS" nil org-e-groff-default-class t)
   ((:groff-class "GROFF_CLASS" nil org-e-groff-default-class t)
    (:groff-class-options "GROFF_CLASS_OPTIONS" nil nil t)
    (:groff-class-options "GROFF_CLASS_OPTIONS" nil nil t)
@@ -1886,7 +1888,7 @@ contextual information."
 ;;; Interactive functions
 ;;; Interactive functions
 
 
 (defun org-e-groff-export-to-groff
 (defun org-e-groff-export-to-groff
-  (&optional subtreep visible-only body-only ext-plist)
+  (&optional async subtreep visible-only body-only ext-plist)
   "Export current buffer to a Groff file.
   "Export current buffer to a Groff file.
 
 
 If narrowing is active in the current buffer, only export its
 If narrowing is active in the current buffer, only export its
@@ -1894,6 +1896,10 @@ narrowed part.
 
 
 If a region is active, export that region.
 If a region is active, export that region.
 
 
+A non-nil optional argument ASYNC means the process should happen
+asynchronously.  The resulting file should be accessible through
+the `org-export-stack' interface.
+
 When optional argument SUBTREEP is non-nil, export the sub-tree
 When optional argument SUBTREEP is non-nil, export the sub-tree
 at point, extracting information from the headline properties
 at point, extracting information from the headline properties
 first.
 first.
@@ -1907,14 +1913,23 @@ file-local settings.
 
 
 Return output file's name."
 Return output file's name."
   (interactive)
   (interactive)
-  (setq org-e-groff-registered-references nil)
-  (setq org-e-groff-special-content nil)
   (let ((outfile (org-export-output-file-name ".groff" subtreep)))
   (let ((outfile (org-export-output-file-name ".groff" subtreep)))
-    (org-export-to-file
-     'e-groff outfile subtreep visible-only body-only ext-plist)))
+    (if async
+	(org-export-async-start
+	    (lambda (f) (org-export-add-to-stack f 'e-groff))
+	  (let ((org-e-groff-registered-references nil)
+		(org-e-groff-special-content nil))
+	    `(expand-file-name
+	      (org-export-to-file
+	       'e-groff ,outfile ,subtreep ,visible-only ,body-only
+	       ',ext-plist))))
+      (let ((org-e-groff-registered-references nil)
+	    (org-e-groff-special-content nil))
+	(org-export-to-file
+	 'e-groff outfile subtreep visible-only body-only ext-plist)))))
 
 
 (defun org-e-groff-export-to-pdf
 (defun org-e-groff-export-to-pdf
-  (&optional subtreep visible-only body-only ext-plist)
+  (&optional async subtreep visible-only body-only ext-plist)
   "Export current buffer to Groff then process through to PDF.
   "Export current buffer to Groff then process through to PDF.
 
 
 If narrowing is active in the current buffer, only export its
 If narrowing is active in the current buffer, only export its
@@ -1922,6 +1937,10 @@ narrowed part.
 
 
 If a region is active, export that region.
 If a region is active, export that region.
 
 
+A non-nil optional argument ASYNC means the process should happen
+asynchronously.  The resulting file should be accessible through
+the `org-export-stack' interface.
+
 When optional argument SUBTREEP is non-nil, export the sub-tree
 When optional argument SUBTREEP is non-nil, export the sub-tree
 at point, extracting information from the headline properties
 at point, extracting information from the headline properties
 first.
 first.
@@ -1935,8 +1954,18 @@ file-local settings.
 
 
 Return PDF file's name."
 Return PDF file's name."
   (interactive)
   (interactive)
-  (org-e-groff-compile
-   (org-e-groff-export-to-groff subtreep visible-only body-only ext-plist)))
+  (if async
+      (let ((outfile (org-export-output-file-name ".groff" subtreep)))
+	(org-export-async-start
+	    (lambda (f) (org-export-add-to-stack f 'e-groff))
+	  `(expand-file-name
+	    (org-e-groff-compile
+	     (org-export-to-file
+	      'e-groff ,outfile ,subtreep ,visible-only ,body-only
+	      ',ext-plist)))))
+    (org-e-groff-compile
+     (org-e-groff-export-to-groff
+      nil subtreep visible-only body-only ext-plist))))
 
 
 (defun org-e-groff-compile (file)
 (defun org-e-groff-compile (file)
   "Compile a Groff file.
   "Compile a Groff file.

+ 41 - 13
contrib/lisp/org-e-html.el

@@ -108,7 +108,9 @@
       ((?H "To temporary buffer" org-e-html-export-as-html)
       ((?H "To temporary buffer" org-e-html-export-as-html)
        (?h "To file" org-e-html-export-to-html)
        (?h "To file" org-e-html-export-to-html)
        (?o "To file and open"
        (?o "To file and open"
-	   (lambda (s v b) (org-open-file (org-e-html-export-to-html s v b))))))
+	   (lambda (a s v b)
+	     (if a (org-e-html-export-to-html t s v b)
+	       (org-open-file (org-e-html-export-to-html nil s v b)))))))
   :options-alist
   :options-alist
   ;; FIXME: Prefix KEYWORD and OPTION with "HTML_".  Prefix
   ;; FIXME: Prefix KEYWORD and OPTION with "HTML_".  Prefix
   ;; corresponding properties with `:html-".  If such a renaming is
   ;; corresponding properties with `:html-".  If such a renaming is
@@ -2746,7 +2748,7 @@ contextual information."
 
 
 ;;;###autoload
 ;;;###autoload
 (defun org-e-html-export-as-html
 (defun org-e-html-export-as-html
-  (&optional subtreep visible-only body-only ext-plist)
+  (&optional async subtreep visible-only body-only ext-plist)
   "Export current buffer to an HTML buffer.
   "Export current buffer to an HTML buffer.
 
 
 If narrowing is active in the current buffer, only export its
 If narrowing is active in the current buffer, only export its
@@ -2754,6 +2756,10 @@ narrowed part.
 
 
 If a region is active, export that region.
 If a region is active, export that region.
 
 
+A non-nil optional argument ASYNC means the process should happen
+asynchronously.  The resulting buffer should be accessible
+through the `org-export-stack' interface.
+
 When optional argument SUBTREEP is non-nil, export the sub-tree
 When optional argument SUBTREEP is non-nil, export the sub-tree
 at point, extracting information from the headline properties
 at point, extracting information from the headline properties
 first.
 first.
@@ -2772,18 +2778,28 @@ Export is done in a buffer named \"*Org E-HTML Export*\", which
 will be displayed when `org-export-show-temporary-export-buffer'
 will be displayed when `org-export-show-temporary-export-buffer'
 is non-nil."
 is non-nil."
   (interactive)
   (interactive)
-  (let ((outbuf
-	 (org-export-to-buffer
-	  'e-html "*Org E-HTML Export*"
-	  subtreep visible-only body-only ext-plist)))
-    ;; Set major mode.
-    (with-current-buffer outbuf (nxml-mode))
-    (when org-export-show-temporary-export-buffer
-      (switch-to-buffer-other-window outbuf))))
+  (if async
+      (org-export-async-start
+	  (lambda (output)
+	    (with-current-buffer (get-buffer-create "*Org E-HTML Export*")
+	      (erase-buffer)
+	      (insert output)
+	      (goto-char (point-min))
+	      (nxml-mode)
+	      (when org-export-show-temporary-export-buffer
+		(org-export-add-to-stack (current-buffer) 'e-html))))
+	`(org-export-as 'e-html ,subtreep ,visible-only ,body-only ',ext-plist))
+    (let ((outbuf (org-export-to-buffer
+		   'e-html "*Org E-HTML Export*"
+		   subtreep visible-only body-only ext-plist)))
+      ;; Set major mode.
+      (with-current-buffer outbuf (nxml-mode))
+      (when org-export-show-temporary-export-buffer
+	(switch-to-buffer-other-window outbuf)))))
 
 
 ;;;###autoload
 ;;;###autoload
 (defun org-e-html-export-to-html
 (defun org-e-html-export-to-html
-  (&optional subtreep visible-only body-only ext-plist)
+  (&optional async subtreep visible-only body-only ext-plist)
   "Export current buffer to a HTML file.
   "Export current buffer to a HTML file.
 
 
 If narrowing is active in the current buffer, only export its
 If narrowing is active in the current buffer, only export its
@@ -2791,6 +2807,10 @@ narrowed part.
 
 
 If a region is active, export that region.
 If a region is active, export that region.
 
 
+A non-nil optional argument ASYNC means the process should happen
+asynchronously.  The resulting file should be accessible through
+the `org-export-stack' interface.
+
 When optional argument SUBTREEP is non-nil, export the sub-tree
 When optional argument SUBTREEP is non-nil, export the sub-tree
 at point, extracting information from the headline properties
 at point, extracting information from the headline properties
 first.
 first.
@@ -2810,8 +2830,16 @@ Return output file's name."
   (let* ((extension (concat "." org-e-html-extension))
   (let* ((extension (concat "." org-e-html-extension))
 	 (file (org-export-output-file-name extension subtreep))
 	 (file (org-export-output-file-name extension subtreep))
 	 (org-export-coding-system org-e-html-coding-system))
 	 (org-export-coding-system org-e-html-coding-system))
-    (org-export-to-file
-     'e-html file subtreep visible-only body-only ext-plist)))
+    (if async
+	(org-export-async-start
+	    (lambda (f) (org-export-add-to-stack f 'e-latex))
+	  (let ((org-export-coding-system org-e-html-coding-system))
+	    `(expand-file-name
+	      (org-export-to-file
+	       'e-html ,file ,subtreep ,visible-only ,body-only ',ext-plist))))
+      (let ((org-export-coding-system org-e-html-coding-system))
+	(org-export-to-file
+	 'e-html file subtreep visible-only body-only ext-plist)))))
 
 
 ;;;###autoload
 ;;;###autoload
 (defun org-e-html-publish-to-html (plist filename pub-dir)
 (defun org-e-html-publish-to-html (plist filename pub-dir)

+ 71 - 26
contrib/lisp/org-e-icalendar.el

@@ -274,12 +274,11 @@ re-read the iCalendar file.")
   ((:filter-headline . org-e-icalendar-clear-blank-lines))
   ((:filter-headline . org-e-icalendar-clear-blank-lines))
   :menu-entry
   :menu-entry
   (?c "Export to iCalendar"
   (?c "Export to iCalendar"
-      ((?f "Current file"
-	   (lambda (s v b) (org-e-icalendar-export-to-ics s v b)))
+      ((?f "Current file" org-e-icalendar-export-to-ics)
        (?a "All agenda files"
        (?a "All agenda files"
-	   (lambda (s v b) (org-e-icalendar-export-agenda-files)))
+	   (lambda (a s v b) (org-e-icalendar-export-agenda-files a)))
        (?c "Combine all agenda files"
        (?c "Combine all agenda files"
-	   (lambda (s v b) (org-e-icalendar-combine-agenda-files))))))
+	   (lambda (a s v b) (org-e-icalendar-combine-agenda-files a))))))
 
 
 
 
 
 
@@ -789,7 +788,8 @@ CALSCALE:GREGORIAN\n"
 ;;; Interactive Functions
 ;;; Interactive Functions
 
 
 ;;;###autoload
 ;;;###autoload
-(defun org-e-icalendar-export-to-ics (&optional subtreep visible-only body-only)
+(defun org-e-icalendar-export-to-ics
+  (&optional async subtreep visible-only body-only)
   "Export current buffer to an iCalendar file.
   "Export current buffer to an iCalendar file.
 
 
 If narrowing is active in the current buffer, only export its
 If narrowing is active in the current buffer, only export its
@@ -797,6 +797,10 @@ narrowed part.
 
 
 If a region is active, export that region.
 If a region is active, export that region.
 
 
+A non-nil optional argument ASYNC means the process should happen
+asynchronously.  The resulting file should be accessible through
+the `org-export-stack' interface.
+
 When optional argument SUBTREEP is non-nil, export the sub-tree
 When optional argument SUBTREEP is non-nil, export the sub-tree
 at point, extracting information from the headline properties
 at point, extracting information from the headline properties
 first.
 first.
@@ -814,35 +818,76 @@ Return ICS file name."
       (org-e-icalendar-create-uid file 'warn-user)))
       (org-e-icalendar-create-uid file 'warn-user)))
   ;; Export part.  Since this back-end is backed up by `e-ascii',
   ;; Export part.  Since this back-end is backed up by `e-ascii',
   ;; ensure links will not be collected at the end of sections.
   ;; ensure links will not be collected at the end of sections.
-  (let ((outfile (org-export-output-file-name ".ics" subtreep))
-	(org-e-ascii-links-to-notes nil))
-    (org-export-to-file 'e-icalendar outfile subtreep visible-only body-only
-			'(:ascii-charset utf-8))
-    (run-hook-with-args 'org-e-icalendar-after-save-hook outfile)
-    outfile))
+  (let ((outfile (org-export-output-file-name ".ics" subtreep)))
+    (if async
+	(org-export-async-start
+	    (lambda (f)
+	      (org-export-add-to-stack f 'e-icalendar)
+	      (run-hook-with-args 'org-e-icalendar-after-save-hook f))
+	  `(let ((org-e-ascii-links-to-notes nil))
+	     (expand-file-name
+	      (org-export-to-file
+	       'e-icalendar ,outfile ,subtreep ,visible-only ,body-only
+	       '(:ascii-charset utf-8)))))
+      (let ((org-e-ascii-links-to-notes nil))
+	(org-export-to-file 'e-icalendar outfile subtreep visible-only body-only
+			    '(:ascii-charset utf-8)))
+      (run-hook-with-args 'org-e-icalendar-after-save-hook outfile)
+      outfile)))
 
 
 ;;;###autoload
 ;;;###autoload
-(defun org-e-icalendar-export-agenda-files ()
-  "Export all agenda files to iCalendar files."
+(defun org-e-icalendar-export-agenda-files (&optional async)
+  "Export all agenda files to iCalendar files.
+When optional argument ASYNC is non-nil, export happens in an
+external process."
   (interactive)
   (interactive)
-  (let ((files (org-agenda-files t)))
-    (org-agenda-prepare-buffers files)
-    (unwind-protect
-	(mapc (lambda (file)
-		(catch 'nextfile
-		  (org-check-agenda-file file)
-		  (with-current-buffer (org-get-agenda-file-buffer file)
-		    (org-e-icalendar-export-to-ics))))
-	      files)
-      (org-release-buffers org-agenda-new-buffers))))
+  (if async
+      ;; Asynchronous export is not interactive, so we will not call
+      ;; `org-check-agenda-file'.  Instead we remove any non-existent
+      ;; agenda file from the list.
+      (let ((files (org-remove-if-not 'file-exists-p (org-agenda-files t))))
+	(org-export-async-start
+	    (lambda (results)
+	      (mapc (lambda (f) (org-export-add-to-stack f 'icalendar))
+		    results))
+	  `(let (output-files)
+	     (mapc (lambda (file)
+		     (with-current-buffer (org-get-agenda-file-buffer file)
+		       (push (expand-file-name (org-e-icalendar-export-to-ics))
+			     output-files)))
+		   ',files)
+	     output-files)))
+    (let ((files (org-agenda-files t)))
+      (org-agenda-prepare-buffers files)
+      (unwind-protect
+	  (mapc (lambda (file)
+		  (catch 'nextfile
+		    (org-check-agenda-file file)
+		    (with-current-buffer (org-get-agenda-file-buffer file)
+		      (org-e-icalendar-export-to-ics))))
+		files)
+	(org-release-buffers org-agenda-new-buffers)))))
 
 
 ;;;###autoload
 ;;;###autoload
-(defun org-e-icalendar-combine-agenda-files ()
+(defun org-e-icalendar-combine-agenda-files (&optional async)
   "Combine all agenda files into a single iCalendar file.
   "Combine all agenda files into a single iCalendar file.
-The file is stored under the name
+
+A non-nil optional argument ASYNC means the process should happen
+asynchronously.  The resulting file should be accessible through
+the `org-export-stack' interface.
+
+The file is stored under the name chosen in
 `org-e-icalendar-combined-agenda-file'."
 `org-e-icalendar-combined-agenda-file'."
   (interactive)
   (interactive)
-  (apply 'org-e-icalendar--combine-files nil (org-agenda-files t)))
+  (if async
+      (let ((files (org-remove-if-not 'file-exists-p (org-agenda-files t))))
+	(org-export-async-start
+	    (lambda (dummy)
+	      (org-export-add-to-stack
+	       (expand-file-name org-e-icalendar-combined-agenda-file)
+	       'e-icalendar))
+	  `(apply 'org-e-icalendar--combine-files nil ',files)))
+    (apply 'org-e-icalendar--combine-files nil (org-agenda-files t))))
 
 
 (defun org-e-icalendar-export-current-agenda ()
 (defun org-e-icalendar-export-current-agenda ()
   "Export current agenda view to an iCalendar file.
   "Export current agenda view to an iCalendar file.

+ 55 - 14
contrib/lisp/org-e-latex.el

@@ -156,7 +156,9 @@
        (?l "As TEX file" org-e-latex-export-to-latex)
        (?l "As TEX file" org-e-latex-export-to-latex)
        (?p "As PDF file" org-e-latex-export-to-pdf)
        (?p "As PDF file" org-e-latex-export-to-pdf)
        (?o "As PDF file and open"
        (?o "As PDF file and open"
-	   (lambda (s v b) (org-open-file (org-e-latex-export-to-pdf s v b))))))
+	   (lambda (a s v b)
+	     (if a (org-e-latex-export-to-pdf t s v b)
+	       (org-open-file (org-e-latex-export-to-pdf nil s v b)))))))
   :options-alist ((:date "DATE" nil org-e-latex-date-format t)
   :options-alist ((:date "DATE" nil org-e-latex-date-format t)
 		  (:latex-class "LATEX_CLASS" nil org-e-latex-default-class t)
 		  (:latex-class "LATEX_CLASS" nil org-e-latex-default-class t)
 		  (:latex-class-options "LATEX_CLASS_OPTIONS" nil nil t)
 		  (:latex-class-options "LATEX_CLASS_OPTIONS" nil nil t)
@@ -2639,7 +2641,7 @@ contextual information."
 
 
 ;;;###autoload
 ;;;###autoload
 (defun org-e-latex-export-as-latex
 (defun org-e-latex-export-as-latex
-  (&optional subtreep visible-only body-only ext-plist)
+  (&optional async subtreep visible-only body-only ext-plist)
   "Export current buffer as a LaTeX buffer.
   "Export current buffer as a LaTeX buffer.
 
 
 If narrowing is active in the current buffer, only export its
 If narrowing is active in the current buffer, only export its
@@ -2647,6 +2649,10 @@ narrowed part.
 
 
 If a region is active, export that region.
 If a region is active, export that region.
 
 
+A non-nil optional argument ASYNC means the process should happen
+asynchronously.  The resulting buffer should be accessible
+through the `org-export-stack' interface.
+
 When optional argument SUBTREEP is non-nil, export the sub-tree
 When optional argument SUBTREEP is non-nil, export the sub-tree
 at point, extracting information from the headline properties
 at point, extracting information from the headline properties
 first.
 first.
@@ -2665,16 +2671,27 @@ Export is done in a buffer named \"*Org E-LATEX Export*\", which
 will be displayed when `org-export-show-temporary-export-buffer'
 will be displayed when `org-export-show-temporary-export-buffer'
 is non-nil."
 is non-nil."
   (interactive)
   (interactive)
-  (let ((outbuf (org-export-to-buffer
-		 'e-latex "*Org E-LATEX Export*"
-		 subtreep visible-only body-only ext-plist)))
-    (with-current-buffer outbuf (LaTeX-mode))
-    (when org-export-show-temporary-export-buffer
-      (switch-to-buffer-other-window outbuf))))
+  (if async
+      (org-export-async-start
+	  (lambda (output)
+	    (with-current-buffer (get-buffer-create "*Org E-LATEX Export*")
+	      (erase-buffer)
+	      (insert output)
+	      (goto-char (point-min))
+	      (LaTeX-mode)
+	      (org-export-add-to-stack (current-buffer) 'e-latex)))
+	`(org-export-as 'e-latex ,subtreep ,visible-only ,body-only
+			',ext-plist))
+    (let ((outbuf
+	   (org-export-to-buffer 'e-latex "*Org E-LATEX Export*"
+				 subtreep visible-only body-only ext-plist)))
+      (with-current-buffer outbuf (LaTeX-mode))
+      (when org-export-show-temporary-export-buffer
+	(switch-to-buffer-other-window outbuf)))))
 
 
 ;;;###autoload
 ;;;###autoload
 (defun org-e-latex-export-to-latex
 (defun org-e-latex-export-to-latex
-  (&optional subtreep visible-only body-only ext-plist)
+  (&optional async subtreep visible-only body-only ext-plist)
   "Export current buffer to a LaTeX file.
   "Export current buffer to a LaTeX file.
 
 
 If narrowing is active in the current buffer, only export its
 If narrowing is active in the current buffer, only export its
@@ -2682,6 +2699,10 @@ narrowed part.
 
 
 If a region is active, export that region.
 If a region is active, export that region.
 
 
+A non-nil optional argument ASYNC means the process should happen
+asynchronously.  The resulting file should be accessible through
+the `org-export-stack' interface.
+
 When optional argument SUBTREEP is non-nil, export the sub-tree
 When optional argument SUBTREEP is non-nil, export the sub-tree
 at point, extracting information from the headline properties
 at point, extracting information from the headline properties
 first.
 first.
@@ -2699,12 +2720,18 @@ file-local settings.
 Return output file's name."
 Return output file's name."
   (interactive)
   (interactive)
   (let ((outfile (org-export-output-file-name ".tex" subtreep)))
   (let ((outfile (org-export-output-file-name ".tex" subtreep)))
-    (org-export-to-file
-     'e-latex outfile subtreep visible-only body-only ext-plist)))
+    (if async
+	(org-export-async-start
+	    (lambda (f) (org-export-add-to-stack f 'e-latex))
+	  `(expand-file-name
+	    (org-export-to-file
+	     'e-latex ,outfile ,subtreep ,visible-only ,body-only ',ext-plist)))
+      (org-export-to-file
+       'e-latex outfile subtreep visible-only body-only ext-plist))))
 
 
 ;;;###autoload
 ;;;###autoload
 (defun org-e-latex-export-to-pdf
 (defun org-e-latex-export-to-pdf
-  (&optional subtreep visible-only body-only ext-plist)
+  (&optional async subtreep visible-only body-only ext-plist)
   "Export current buffer to LaTeX then process through to PDF.
   "Export current buffer to LaTeX then process through to PDF.
 
 
 If narrowing is active in the current buffer, only export its
 If narrowing is active in the current buffer, only export its
@@ -2712,6 +2739,10 @@ narrowed part.
 
 
 If a region is active, export that region.
 If a region is active, export that region.
 
 
+A non-nil optional argument ASYNC means the process should happen
+asynchronously.  The resulting file should be accessible through
+the `org-export-stack' interface.
+
 When optional argument SUBTREEP is non-nil, export the sub-tree
 When optional argument SUBTREEP is non-nil, export the sub-tree
 at point, extracting information from the headline properties
 at point, extracting information from the headline properties
 first.
 first.
@@ -2728,8 +2759,18 @@ file-local settings.
 
 
 Return PDF file's name."
 Return PDF file's name."
   (interactive)
   (interactive)
-  (org-e-latex-compile
-   (org-e-latex-export-to-latex subtreep visible-only body-only ext-plist)))
+  (if async
+      (let ((outfile (org-export-output-file-name ".tex" subtreep)))
+	(org-export-async-start
+	    (lambda (f) (org-export-add-to-stack f 'e-latex))
+	  `(expand-file-name
+	    (org-e-latex-compile
+	     (org-export-to-file
+	      'e-latex ,outfile ,subtreep ,visible-only ,body-only
+	      ',ext-plist)))))
+    (org-e-latex-compile
+     (org-e-latex-export-to-latex
+      nil subtreep visible-only body-only ext-plist))))
 
 
 (defun org-e-latex-compile (texfile)
 (defun org-e-latex-compile (texfile)
   "Compile a TeX file.
   "Compile a TeX file.

+ 32 - 7
contrib/lisp/org-e-man.el

@@ -108,7 +108,9 @@
       ((?m "As MAN file" org-e-man-export-to-man)
       ((?m "As MAN file" org-e-man-export-to-man)
        (?p "As PDF file" org-e-man-export-to-pdf)
        (?p "As PDF file" org-e-man-export-to-pdf)
        (?o "As PDF file and open"
        (?o "As PDF file and open"
-	   (lambda (s v b) (org-open-file (org-e-man-export-to-pdf s v b))))))
+	   (lambda (a s v b)
+	     (if a (org-e-man-export-to-pdf t s v b)
+	       (org-open-file (org-e-man-export-to-pdf nil s v b)))))))
   :options-alist
   :options-alist
   ((:man-class "MAN_CLASS" nil nil t)
   ((:man-class "MAN_CLASS" nil nil t)
    (:man-class-options "MAN_CLASS_OPTIONS" nil nil t)
    (:man-class-options "MAN_CLASS_OPTIONS" nil nil t)
@@ -1146,7 +1148,7 @@ contextual information."
 ;;; Interactive functions
 ;;; Interactive functions
 
 
 (defun org-e-man-export-to-man
 (defun org-e-man-export-to-man
-  (&optional subtreep visible-only body-only ext-plist)
+  (&optional async subtreep visible-only body-only ext-plist)
   "Export current buffer to a Man file.
   "Export current buffer to a Man file.
 
 
 If narrowing is active in the current buffer, only export its
 If narrowing is active in the current buffer, only export its
@@ -1154,6 +1156,10 @@ narrowed part.
 
 
 If a region is active, export that region.
 If a region is active, export that region.
 
 
+A non-nil optional argument ASYNC means the process should happen
+asynchronously.  The resulting file should be accessible through
+the `org-export-stack' interface.
+
 When optional argument SUBTREEP is non-nil, export the sub-tree
 When optional argument SUBTREEP is non-nil, export the sub-tree
 at point, extracting information from the headline properties
 at point, extracting information from the headline properties
 first.
 first.
@@ -1171,11 +1177,17 @@ file-local settings.
 Return output file's name."
 Return output file's name."
   (interactive)
   (interactive)
   (let ((outfile (org-export-output-file-name ".man" subtreep)))
   (let ((outfile (org-export-output-file-name ".man" subtreep)))
-    (org-export-to-file
-     'e-man outfile subtreep visible-only body-only ext-plist)))
+    (if async
+	(org-export-async-start
+	    (lambda (f) (org-export-add-to-stack f 'e-man))
+	  `(expand-file-name
+	    (org-export-to-file
+	     'e-man ,outfile ,subtreep ,visible-only ,body-only ',ext-plist)))
+      (org-export-to-file
+       'e-man outfile subtreep visible-only body-only ext-plist))))
 
 
 (defun org-e-man-export-to-pdf
 (defun org-e-man-export-to-pdf
-  (&optional subtreep visible-only body-only ext-plist)
+  (&optional async subtreep visible-only body-only ext-plist)
   "Export current buffer to Groff then process through to PDF.
   "Export current buffer to Groff then process through to PDF.
 
 
 If narrowing is active in the current buffer, only export its
 If narrowing is active in the current buffer, only export its
@@ -1183,6 +1195,10 @@ narrowed part.
 
 
 If a region is active, export that region.
 If a region is active, export that region.
 
 
+A non-nil optional argument ASYNC means the process should happen
+asynchronously.  The resulting file should be accessible through
+the `org-export-stack' interface.
+
 When optional argument SUBTREEP is non-nil, export the sub-tree
 When optional argument SUBTREEP is non-nil, export the sub-tree
 at point, extracting information from the headline properties
 at point, extracting information from the headline properties
 first.
 first.
@@ -1199,8 +1215,17 @@ file-local settings.
 
 
 Return PDF file's name."
 Return PDF file's name."
   (interactive)
   (interactive)
-  (org-e-man-compile
-   (org-e-man-export-to-man subtreep visible-only body-only ext-plist)))
+  (if async
+      (let ((outfile (org-export-output-file-name ".man" subtreep)))
+	(org-export-async-start
+	    (lambda (f) (org-export-add-to-stack f 'e-man))
+	  `(expand-file-name
+	    (org-e-man-compile
+	     (org-export-to-file
+	      'e-man ,outfile ,subtreep ,visible-only ,body-only
+	      ',ext-plist)))))
+    (org-e-man-compile
+     (org-e-man-export-to-man nil subtreep visible-only body-only ext-plist))))
 
 
 (defun org-e-man-compile (file)
 (defun org-e-man-compile (file)
   "Compile a Groff file.
   "Compile a Groff file.

+ 48 - 23
contrib/lisp/org-e-odt.el

@@ -91,8 +91,9 @@
   (?o "Export to ODT"
   (?o "Export to ODT"
       ((?o "As ODT file" org-e-odt-export-to-odt)
       ((?o "As ODT file" org-e-odt-export-to-odt)
        (?O "As ODT file and open"
        (?O "As ODT file and open"
-	   (lambda (s v b)
-	     (org-open-file (org-e-odt-export-to-odt s v b) 'system)))))
+	   (lambda (a s v b)
+	     (if a (org-e-odt-export-to-odt t s v)
+	       (org-open-file (org-e-odt-export-to-odt nil s v) 'system))))))
   :options-alist
   :options-alist
   ((:odt-styles-file "ODT_STYLES_FILE" nil nil t)
   ((:odt-styles-file "ODT_STYLES_FILE" nil nil t)
    (:LaTeX-fragments nil "LaTeX" org-export-with-LaTeX-fragments)))
    (:LaTeX-fragments nil "LaTeX" org-export-with-LaTeX-fragments)))
@@ -3828,8 +3829,7 @@ formula file."
 ;;;; Export to OpenDocument Text
 ;;;; Export to OpenDocument Text
 
 
 ;;;###autoload
 ;;;###autoload
-(defun org-e-odt-export-to-odt
-  (&optional subtreep visible-only body-only ext-plist)
+(defun org-e-odt-export-to-odt (&optional async subtreep visible-only ext-plist)
   "Export current buffer to a HTML file.
   "Export current buffer to a HTML file.
 
 
 If narrowing is active in the current buffer, only export its
 If narrowing is active in the current buffer, only export its
@@ -3837,6 +3837,10 @@ narrowed part.
 
 
 If a region is active, export that region.
 If a region is active, export that region.
 
 
+A non-nil optional argument ASYNC means the process should happen
+asynchronously.  The resulting file should be accessible through
+the `org-export-stack' interface.
+
 When optional argument SUBTREEP is non-nil, export the sub-tree
 When optional argument SUBTREEP is non-nil, export the sub-tree
 at point, extracting information from the headline properties
 at point, extracting information from the headline properties
 first.
 first.
@@ -3844,31 +3848,52 @@ first.
 When optional argument VISIBLE-ONLY is non-nil, don't export
 When optional argument VISIBLE-ONLY is non-nil, don't export
 contents of hidden elements.
 contents of hidden elements.
 
 
-When optional argument BODY-ONLY is non-nil, only write code
-between \"\\begin{document}\" and \"\\end{document}\".
-
 EXT-PLIST, when provided, is a property list with external
 EXT-PLIST, when provided, is a property list with external
 parameters overriding Org default settings, but still inferior to
 parameters overriding Org default settings, but still inferior to
 file-local settings.
 file-local settings.
 
 
 Return output file's name."
 Return output file's name."
   (interactive)
   (interactive)
-  (org-e-odt--export-wrap
-   (org-export-output-file-name ".odt" subtreep)
-   (let* ((org-e-odt-embedded-images-count 0)
-	  (org-e-odt-embedded-formulas-count 0)
-	  (org-e-odt-automatic-styles nil)
-	  (org-e-odt-object-counters nil)
-	  ;; Let `htmlfontify' know that we are interested in collecting
-	  ;; styles.
-	  (hfy-user-sheet-assoc nil))
-     ;; Initialize content.xml and kick-off the export process.
-     (let ((out-buf (progn
-		      (require 'nxml-mode)
-		      (let ((nxml-auto-insert-xml-declaration-flag nil))
-			(find-file-noselect
-			 (concat org-e-odt-zip-dir "content.xml") t)))))
-       (org-export-to-buffer 'e-odt out-buf subtreep visible-only body-only)))))
+  (let ((outfile (org-export-output-file-name ".odt" subtreep)))
+    (if async
+	(org-export-async-start (lambda (f) (org-export-add-to-stack f 'e-odt))
+	  `(expand-file-name
+	    (org-e-odt--export-wrap
+	     ,outfile
+	     (let* ((org-e-odt-embedded-images-count 0)
+		    (org-e-odt-embedded-formulas-count 0)
+		    (org-e-odt-automatic-styles nil)
+		    (org-e-odt-object-counters nil)
+		    ;; Let `htmlfontify' know that we are interested in
+		    ;; collecting styles.
+		    (hfy-user-sheet-assoc nil))
+	       ;; Initialize content.xml and kick-off the export
+	       ;; process.
+	       (let ((out-buf
+		      (progn
+			(require 'nxml-mode)
+			(let ((nxml-auto-insert-xml-declaration-flag nil))
+			  (find-file-noselect
+			   (concat org-e-odt-zip-dir "content.xml") t)))))
+		 (org-export-to-buffer
+		  'e-odt out-buf ,subtreep ,visible-only nil ',ext-plist))))))
+      (org-e-odt--export-wrap
+       outfile
+       (let* ((org-e-odt-embedded-images-count 0)
+	      (org-e-odt-embedded-formulas-count 0)
+	      (org-e-odt-automatic-styles nil)
+	      (org-e-odt-object-counters nil)
+	      ;; Let `htmlfontify' know that we are interested in collecting
+	      ;; styles.
+	      (hfy-user-sheet-assoc nil))
+	 ;; Initialize content.xml and kick-off the export process.
+	 (let ((out-buf (progn
+			  (require 'nxml-mode)
+			  (let ((nxml-auto-insert-xml-declaration-flag nil))
+			    (find-file-noselect
+			     (concat org-e-odt-zip-dir "content.xml") t)))))
+	   (org-export-to-buffer
+	    'e-odt out-buf subtreep visible-only nil ext-plist)))))))
 
 
 
 
 ;;;; Convert between OpenDocument and other formats
 ;;;; Convert between OpenDocument and other formats

+ 31 - 6
contrib/lisp/org-e-texinfo.el

@@ -1657,7 +1657,7 @@ contextual information."
 ;;; Interactive functions
 ;;; Interactive functions
 
 
 (defun org-e-texinfo-export-to-texinfo
 (defun org-e-texinfo-export-to-texinfo
-  (&optional subtreep visible-only body-only ext-plist)
+  (&optional async subtreep visible-only body-only ext-plist)
   "Export current buffer to a Texinfo file.
   "Export current buffer to a Texinfo file.
 
 
 If narrowing is active in the current buffer, only export its
 If narrowing is active in the current buffer, only export its
@@ -1665,6 +1665,10 @@ narrowed part.
 
 
 If a region is active, export that region.
 If a region is active, export that region.
 
 
+A non-nil optional argument ASYNC means the process should happen
+asynchronously.  The resulting file should be accessible through
+the `org-export-stack' interface.
+
 When optional argument SUBTREEP is non-nil, export the sub-tree
 When optional argument SUBTREEP is non-nil, export the sub-tree
 at point, extracting information from the headline properties
 at point, extracting information from the headline properties
 first.
 first.
@@ -1682,11 +1686,18 @@ file-local settings.
 Return output file's name."
 Return output file's name."
   (interactive)
   (interactive)
   (let ((outfile (org-export-output-file-name ".texi" subtreep)))
   (let ((outfile (org-export-output-file-name ".texi" subtreep)))
-    (org-export-to-file
-     'e-texinfo outfile subtreep visible-only body-only ext-plist)))
+    (if async
+	(org-export-async-start
+	    (lambda (f) (org-export-add-to-stack f 'e-texinfo))
+	  `(expand-file-name
+	    (org-export-to-file
+	     'e-texinfo ,outfile ,subtreep ,visible-only ,body-only
+	     ',ext-plist)))
+      (org-export-to-file
+       'e-texinfo outfile subtreep visible-only body-only ext-plist))))
 
 
 (defun org-e-texinfo-export-to-info
 (defun org-e-texinfo-export-to-info
-  (&optional subtreep visible-only body-only ext-plist)
+  (&optional async subtreep visible-only body-only ext-plist)
   "Export current buffer to Texinfo then process through to INFO.
   "Export current buffer to Texinfo then process through to INFO.
 
 
 If narrowing is active in the current buffer, only export its
 If narrowing is active in the current buffer, only export its
@@ -1694,6 +1705,10 @@ narrowed part.
 
 
 If a region is active, export that region.
 If a region is active, export that region.
 
 
+A non-nil optional argument ASYNC means the process should happen
+asynchronously.  The resulting file should be accessible through
+the `org-export-stack' interface.
+
 When optional argument SUBTREEP is non-nil, export the sub-tree
 When optional argument SUBTREEP is non-nil, export the sub-tree
 at point, extracting information from the headline properties
 at point, extracting information from the headline properties
 first.
 first.
@@ -1713,8 +1728,18 @@ directory.
 
 
 Return INFO file's name."
 Return INFO file's name."
   (interactive)
   (interactive)
-  (org-e-texinfo-compile
-   (org-e-texinfo-export-to-texinfo subtreep visible-only body-only ext-plist)))
+  (if async
+      (let ((outfile (org-export-output-file-name ".texi" subtreep)))
+	(org-export-async-start
+	    (lambda (f) (org-export-add-to-stack f 'e-texinfo))
+	  `(expand-file-name
+	    (org-e-texinfo-compile
+	     (org-export-to-file
+	      'e-texinfo ,outfile ,subtreep ,visible-only ,body-only
+	      ',ext-plist)))))
+    (org-e-texinfo-compile
+     (org-e-texinfo-export-to-texinfo
+      nil subtreep visible-only body-only ext-plist))))
 
 
 (defun org-e-texinfo-compile (file)
 (defun org-e-texinfo-compile (file)
   "Compile a texinfo file.
   "Compile a texinfo file.

+ 36 - 11
contrib/lisp/org-md.el

@@ -59,10 +59,12 @@ This variable can be set to either `atx' or `setext'."
   :menu-entry
   :menu-entry
   (?m "Export to Markdown"
   (?m "Export to Markdown"
       ((?M "To temporary buffer"
       ((?M "To temporary buffer"
-	   (lambda (s v b) (org-md-export-as-markdown s v)))
-       (?m "To file" (lambda (s v b) (org-md-export-to-markdown s v)))
+	   (lambda (a s v b) (org-md-export-as-markdown a s v)))
+       (?m "To file" (lambda (a s v b) (org-md-export-to-markdown a s v)))
        (?o "To file and open"
        (?o "To file and open"
-	   (lambda (s v b) (org-open-file (org-md-export-to-markdown s v))))))
+	   (lambda (a s v b)
+	     (if a (org-md-export-to-markdown t s v)
+	       (org-open-file (org-md-export-to-markdown nil s v)))))))
   :translate-alist ((bold . org-md-bold)
   :translate-alist ((bold . org-md-bold)
 		    (code . org-md-verbatim)
 		    (code . org-md-verbatim)
 		    (example-block . org-md-example-block)
 		    (example-block . org-md-example-block)
@@ -411,7 +413,7 @@ as a communication channel."
 ;;; Interactive function
 ;;; Interactive function
 
 
 ;;;###autoload
 ;;;###autoload
-(defun org-md-export-as-markdown (&optional subtreep visible-only)
+(defun org-md-export-as-markdown (&optional async subtreep visible-only)
   "Export current buffer to a text buffer.
   "Export current buffer to a text buffer.
 
 
 If narrowing is active in the current buffer, only export its
 If narrowing is active in the current buffer, only export its
@@ -419,6 +421,10 @@ narrowed part.
 
 
 If a region is active, export that region.
 If a region is active, export that region.
 
 
+A non-nil optional argument ASYNC means the process should happen
+asynchronously.  The resulting buffer should be accessible
+through the `org-export-stack' interface.
+
 When optional argument SUBTREEP is non-nil, export the sub-tree
 When optional argument SUBTREEP is non-nil, export the sub-tree
 at point, extracting information from the headline properties
 at point, extracting information from the headline properties
 first.
 first.
@@ -430,15 +436,25 @@ Export is done in a buffer named \"*Org MD Export*\", which will
 be displayed when `org-export-show-temporary-export-buffer' is
 be displayed when `org-export-show-temporary-export-buffer' is
 non-nil."
 non-nil."
   (interactive)
   (interactive)
-  (let ((outbuf (org-export-to-buffer
-		 'md "*Org MD Export*" subtreep visible-only)))
-    (with-current-buffer outbuf (text-mode))
-    (when org-export-show-temporary-export-buffer
-      (switch-to-buffer-other-window outbuf))))
+  (if async
+      (org-export-async-start
+	  (lambda (output)
+	    (with-current-buffer (get-buffer-create "*Org MD Export*")
+	      (erase-buffer)
+	      (insert output)
+	      (goto-char (point-min))
+	      (text-mode)
+	      (org-export-add-to-stack (current-buffer) 'md)))
+	`(org-export-as 'md ,subtreep ,visible-only))
+    (let ((outbuf (org-export-to-buffer
+		   'md "*Org MD Export*" subtreep visible-only)))
+      (with-current-buffer outbuf (text-mode))
+      (when org-export-show-temporary-export-buffer
+	(switch-to-buffer-other-window outbuf)))))
 
 
 
 
 ;;;###autoload
 ;;;###autoload
-(defun org-md-export-to-markdown (&optional subtreep visible-only)
+(defun org-md-export-to-markdown (&optional async subtreep visible-only)
   "Export current buffer to a Markdown file.
   "Export current buffer to a Markdown file.
 
 
 If narrowing is active in the current buffer, only export its
 If narrowing is active in the current buffer, only export its
@@ -446,6 +462,10 @@ narrowed part.
 
 
 If a region is active, export that region.
 If a region is active, export that region.
 
 
+A non-nil optional argument ASYNC means the process should happen
+asynchronously.  The resulting file should be accessible through
+the `org-export-stack' interface.
+
 When optional argument SUBTREEP is non-nil, export the sub-tree
 When optional argument SUBTREEP is non-nil, export the sub-tree
 at point, extracting information from the headline properties
 at point, extracting information from the headline properties
 first.
 first.
@@ -456,7 +476,12 @@ contents of hidden elements.
 Return output file's name."
 Return output file's name."
   (interactive)
   (interactive)
   (let ((outfile (org-export-output-file-name ".md" subtreep)))
   (let ((outfile (org-export-output-file-name ".md" subtreep)))
-    (org-export-to-file 'md outfile subtreep visible-only)))
+    (if async
+	(org-export-async-start
+	    (lambda (f) (org-export-add-to-stack f 'md))
+	  `(expand-file-name
+	    (org-export-to-file 'md ,outfile ,subtreep ,visible-only)))
+      (org-export-to-file 'md outfile subtreep visible-only))))
 
 
 
 
 (provide 'org-md)
 (provide 'org-md)