See the variables org-export-before-processing-hook and org-export-before-parsing-hook.
You can put something like this in a noexport tagged build heading in your document. Here I run head on the org-file to just get the first three lines. you can replace that with your external filter.: #+BEGIN_SRC emacs-lisp (let ((org-export-before-parsing-hook '((lambda (backend) "lightly tested" (let ((new-doc (shell-command-to-string (format "head -n 3 \"%s\"" (buffer-file-name))))) (erase-buffer) (insert new-doc)))))) (org-open-file (org-html-export-to-html))) #+END_SRC Josh <jnf...@grauman.com> writes: > Thanks! This is very helpful. > > I have a related question. How can I run an external program right before > Export > that takes as input the current buffer and prints out to stdout an updated > version of the org file that then is exported? Basically I want to pipe the > org > file through a filter that is an external program before it is exported. > > Thanks in advance! > > Josh > >> On Sunday, 10 Mar 2019 at 15:37, Josh wrote: >>> Hi, >>> >>> I am new to emacs and orgmode. I spent the last couple days reading most >>> of the docs before diving in, but I didn't see anywhere how I could have a >>> macro that instead of replacing the macro with lisp code, calls an >>> external program instead. >>> >>> Something like: >>> >>> #+MACRO: func call /home/josh/mybinary $1 >> >> You could maybe do something along the lines of >> >> #+macro: func (eval (shell-command (concat "/home/josh/mybinary " "$1"))) >> >> (untested). >> >> -- >> Eric S Fraga via Emacs 27.0.50, Org release_9.2.2-249-g51444a >> -- Professor John Kitchin Doherty Hall A207F Department of Chemical Engineering Carnegie Mellon University Pittsburgh, PA 15213 412-268-7803 @johnkitchin http://kitchingroup.cheme.cmu.edu