Browse Source

Added yet another org makefile

Samuel W. Flint 8 years ago
parent
commit
68a15ec8e7
1 changed files with 69 additions and 0 deletions
  1. 69 0
      org-make.txt

+ 69 - 0
org-make.txt

@@ -0,0 +1,69 @@
+%.html:	%.org
+	emacs -batch -l batch-export.el --eval "(batch-org-export-as 'html)" $<
+
+%.pdf:	%.tex
+	latexmk --shell-escape -pdf -xelatex $<
+
+%.tex: %.org
+	emacs -batch -l batch-export.el --eval "(batch-org-export-as 'latex)" $<
+
+;;; -*- mode: emacs-lisp -*-
+(add-to-list 'load-path (expand-file-name "~/src/emacs/org/org-mode/lisp"))
+
+(add-to-list 'auto-mode-alist '("\\.\\(org\\|org_archive\\|txt\\)$" . org-mode))
+
+(setq org-export-backends '(html latex))
+
+(require 'org-loaddefs)
+
+(defun org-export-file-to (backend src dest)
+  (with-temp-buffer
+    (insert-file-contents src)
+    (org-export-to-file backend dest)))
+
+(setq file-suffixes
+      '((html . ".html")
+	(latex . ".tex")
+	(pdf . ".pdf")))
+
+(defun org-export-dest (backend f)
+  (concat (file-name-sans-extension f) (cdr (assoc backend file-suffixes))))
+
+(defun batch-org-export-as (backend &optional noforce)
+  "Run `org-export-as' with the given backend  on the files remaining on the command line.
+Use this from the command line, with `-batch'; it won't work in
+an interactive Emacs.  Each file is processed even if an error
+occurred previously.  For example, invoke \"emacs -batch -f
+batch-byte-compile $emacs/ ~/*.el\".  If NOFORCE is non-nil,
+don't recompile a file that seems to be already up-to-date."
+  ;; command-line-args-left is what is left of the command line, from
+  ;; startup.el.
+  (defvar command-line-args-left)	;Avoid 'free variable' warning
+  (if (not noninteractive)
+      (error "`batch-org-export-as' is to be used only with -batch"))
+  (let ((error nil))
+    (while command-line-args-left
+      (if (file-directory-p (expand-file-name (car command-line-args-left)))
+      	  ;; Directory as argument.
+      	  (let (source dest)
+      	    (dolist (file (directory-files (car command-line-args-left)))
+      	      (if (and (string-match emacs-lisp-file-regexp file)
+      		       (not (auto-save-file-name-p file))
+      		       (setq source
+                             (expand-file-name file
+                                               (car command-line-args-left)))
+      		       (setq dest (org-export-dest backend source))
+      		       (file-exists-p dest)
+      		       (file-newer-than-file-p source dest))
+      		  (if (null (org-export-file-to backend source dest))
+      		      (setq error t)))))
+      	;; Specific file argument
+	(let* ((source (car command-line-args-left))
+	       (dest (org-export-dest backend source)))
+	  (if (or (not noforce)
+      		  (or (not (file-exists-p dest))
+      		      (file-newer-than-file-p source dest)))
+      	    (if (null (org-export-file-to backend (car command-line-args-left) dest))
+      		(setq error t)))))
+      (setq command-line-args-left (cdr command-line-args-left)))
+    (kill-emacs (if error 1 0))))