Rasmus <ras...@gmx.us> writes: > I can move the call to Emacs as file variable s.t. > > # Local Variables: > # eval: (unless (or user-init-file (window-system)) (load-file > "conf.el")) > # End:
A much better variable to check is `noninteractive', cf (info "(elisp) Batch mode"). > Ideally, what I would like would be to specify a per-file/project init > file. Sort of like org-export-async-init-file, but as part of > org-export-options-alist to get the "init.el-dependency" inside the > Org-file. It would be read when Org exports async or via batch. This patch moves org-export-async-init-file to org-export-options-alist and introduces #+INIT for setting it in a file. It also automatically "switches" to async export if running Emacs in batch. I don't know if this is a good idea! E.g. I guess it would starts a new Emacs process from a Emacs batch process... WDYT? Would something like this be appropriate? —Rasmus -- One thing that is clear: it's all down hill from here
>From 796c6a55e2ece026a17268bd9a021895fa1be273 Mon Sep 17 00:00:00 2001 From: rasmus <ras...@gmx.us> Date: Fri, 20 Feb 2015 12:56:06 +0100 Subject: [PATCH] ox.el: Introduce file-specific init-files. * ox.el (org-export-options-alist): Add :init-file. (org-export-async-start): Use :init-file. * ox-publish.el (org-publish) (org-publish-all) (org-publish-current-file): Use :init-file if noninteractive. * ox-icalendar.el (org-icalendar-export-agenda-files), (org-icalendar-combine-agenda-files): Use :init-file if noninteractive. Allows specifying a file-specific init-file via #+INIT. --- lisp/ox-icalendar.el | 4 ++-- lisp/ox-odt.el | 2 +- lisp/ox-publish.el | 6 +++--- lisp/ox.el | 18 +++++++++++------- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/lisp/ox-icalendar.el b/lisp/ox-icalendar.el index b473f11..3a489f7 100644 --- a/lisp/ox-icalendar.el +++ b/lisp/ox-icalendar.el @@ -832,7 +832,7 @@ Return ICS file name." When optional argument ASYNC is non-nil, export happens in an external process." (interactive) - (if async + (if (or async noninteractive) ;; 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. @@ -870,7 +870,7 @@ the `org-export-stack' interface. The file is stored under the name chosen in `org-icalendar-combined-agenda-file'." (interactive) - (if async + (if (or async noninteractive) (let ((files (org-remove-if-not 'file-exists-p (org-agenda-files t)))) (org-export-async-start (lambda (dummy) diff --git a/lisp/ox-odt.el b/lisp/ox-odt.el index 4a94de1..a3fd43b 100644 --- a/lisp/ox-odt.el +++ b/lisp/ox-odt.el @@ -4232,7 +4232,7 @@ file-local settings. Return output file's name." (interactive) (let ((outfile (org-export-output-file-name ".odt" subtreep))) - (if async + (if (or async noninteractive) (org-export-async-start (lambda (f) (org-export-add-to-stack f 'odt)) `(expand-file-name (org-odt--export-wrap diff --git a/lisp/ox-publish.el b/lisp/ox-publish.el index d450c0e..c5b0a76 100644 --- a/lisp/ox-publish.el +++ b/lisp/ox-publish.el @@ -884,7 +884,7 @@ publishing will be done asynchronously, in another process." (assoc project org-publish-project-alist)))) (cond ((not project)) - (async + ((or async noninteractive) (org-export-async-start (lambda (results) nil) `(let ((org-publish-use-timestamps-flag ,(and (not force) org-publish-use-timestamps-flag))) @@ -905,7 +905,7 @@ directory and force publishing all projects. With a non-nil optional argument ASYNC, publishing will be done asynchronously, in another process." (interactive "P") - (if async + (if (or async noninteractive) (org-export-async-start (lambda (results) nil) `(progn (when ',force (org-publish-remove-all-timestamps)) @@ -927,7 +927,7 @@ optional argument ASYNC is non-nil, publishing will be done asynchronously, in another process." (interactive "P") (let ((file (buffer-file-name (buffer-base-buffer)))) - (if async + (if (or async noninteractive) (org-export-async-start (lambda (results) nil) `(let ((org-publish-use-timestamps-flag (if ',force nil ,org-publish-use-timestamps-flag))) diff --git a/lisp/ox.el b/lisp/ox.el index 6a16997..6cf728b 100644 --- a/lisp/ox.el +++ b/lisp/ox.el @@ -108,6 +108,7 @@ (:select-tags "SELECT_TAGS" nil org-export-select-tags split) (:exclude-tags "EXCLUDE_TAGS" nil org-export-exclude-tags split) (:creator "CREATOR" nil org-export-creator-string) + (:init-file "INIT" nil org-export-async-init-file t) (:headline-levels nil "H" org-export-headline-levels) (:preserve-breaks nil "\\n" org-export-preserve-breaks) (:section-numbers nil "num" org-export-with-section-numbers) @@ -859,7 +860,7 @@ automatically. But you can retrieve them with \\[org-export-stack]." :type 'boolean) (defcustom org-export-async-init-file nil - "File used to initialize external export process. + "File used to initialize external and batch export processes. Value must be either nil or an absolute file name. When nil, the external process is launched like a regular Emacs session, @@ -868,7 +869,9 @@ configuration. If a file is provided, it, and only it, is loaded at start-up. Therefore, using a specific configuration makes the process to -load faster and the export more portable." +load faster and the export more portable. + +In ox-publish projects the value :init-file takes precedence." :group 'org-export-general :version "24.4" :package-version '(Org . "8.0") @@ -5646,7 +5649,8 @@ and `org-export-to-file' for more specialized functions." ;; Sexp to evaluate in the buffer. (print (progn ,,@body)))))) ;; Start external process. - (let* ((process-connection-type nil) + (let* ((init (plist-get :init (org-export--get-inbuffer-options))) + (process-connection-type nil) (,proc-buffer (generate-new-buffer-name "*Org Export Process*")) (,process (apply @@ -5656,8 +5660,8 @@ and `org-export-to-file' for more specialized functions." ,proc-buffer (expand-file-name invocation-name invocation-directory) "--batch") - (if org-export-async-init-file - (list "-Q" "-l" org-export-async-init-file) + (if init + (list "-Q" "-l" init) (list "-l" user-init-file)) (list "-l" ,temp-file))))) ;; Register running process in stack. @@ -5724,7 +5728,7 @@ use it to set a major mode there, e.g, This function returns BUFFER." (declare (indent 2)) - (if async + (if (or async noninteractive) (org-export-async-start `(lambda (output) (with-current-buffer (get-buffer-create ,buffer) @@ -5790,7 +5794,7 @@ or FILE." (if (not (file-writable-p file)) (error "Output file not writable") (let ((ext-plist (org-combine-plists `(:output-file ,file) ext-plist)) (encoding (or org-export-coding-system buffer-file-coding-system))) - (if async + (if (or async noninteractive) (org-export-async-start `(lambda (file) (org-export-add-to-stack (expand-file-name file) ',backend)) -- 2.3.0