]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve previous patch to allow for multiple simultaneous ODF->PDF
authorTassilo Horn <tsdh@gnu.org>
Tue, 12 Feb 2013 11:53:34 +0000 (12:53 +0100)
committerTassilo Horn <tsdh@gnu.org>
Tue, 12 Feb 2013 11:53:34 +0000 (12:53 +0100)
conversions.

lisp/doc-view.el

index da0b728ce91720f134424a84b1f0cba4c9ed8b55..dcc28a523222a4bd30b8bc2a3425ff8f8b9043de 100644 (file)
@@ -939,22 +939,21 @@ is named like ODF with the extension turned to pdf."
   "Convert ODF to PDF asynchronously and call CALLBACK when finished.
 The converted PDF is put into the current cache directory, and it
 is named like ODF with the extension turned to pdf."
-  (doc-view-start-process "odf->pdf" doc-view-odf->pdf-converter-program
-                         (list
-                          ;; FIXME: soffice doesn't work when there's
-                          ;; another running LibreOffice instance, in
-                          ;; which case it returns success without
-                          ;; actually doing anything.  See
-                          ;; LibreOffice bug
-                          ;; https://bugs.freedesktop.org/show_bug.cgi?id=37531.
-                          ;; A workaround is to start soffice with a
-                          ;; separate UserInstallation directory.
-                          (concat "-env:UserInstallation=file://"
-                                  (expand-file-name (format "libreoffice-docview%d" (user-uid))
-                                                    temporary-file-directory))
-                          "--headless" "--convert-to" "pdf"
-                          "--outdir" (doc-view-current-cache-dir) odf)
-                         callback))
+  ;; FIXME: soffice doesn't work when there's another running
+  ;; LibreOffice instance, in which case it returns success without
+  ;; actually doing anything.  See LibreOffice bug
+  ;; https://bugs.freedesktop.org/show_bug.cgi?id=37531.  A workaround
+  ;; is to start soffice with a separate UserInstallation directory.
+  (let ((tmp-user-install-dir (make-temp-file "libreoffice-docview" t)))
+    (doc-view-start-process "odf->pdf" doc-view-odf->pdf-converter-program
+                           (list
+                            (concat "-env:UserInstallation=file://"
+                                    tmp-user-install-dir)
+                            "--headless" "--convert-to" "pdf"
+                            "--outdir" (doc-view-current-cache-dir) odf)
+                           (lambda ()
+                             (delete-directory tmp-user-install-dir t)
+                             (funcall callback)))))
 
 (defun doc-view-pdf/ps->png (pdf-ps png)
   ;; FIXME: Fix name and docstring to account for djvu&tiff.