[ESS] Integration of pandoc using polymode+knitr

Mathieu Basille basille.web at ase-research.org
Mon Mar 10 16:53:58 CET 2014


Dear list,

As a happy user of Emacs+ESS for years, I happily welcomed the new 
polymode, most notably to edit .Rmd (R Markdown) documents. It's very easy 
to weave the file, e.g. using M-n s (ess-swv-weave), with knitr defined as 
the ess-swv-processor.

Personally, I also added M-n s as the shortcut for ess-swv-weave in 
polymode-mode-map:

(define-key polymode-mode-map "\M-ns" 'ess-swv-weave)

Maybe not the cleanest approach, but it allows to weave from anywhere in 
the document.

Now, I'd like to integrate the use of pandoc after the .Rmd has been 
weaved. A typical workflow in R would be:

library(knitr)
knit("test.Rmd")
pandoc("test.md", format = "html")

While the first step (knit) is perfectly handled by ess-swv-weave, I don't 
know any solution for the second part. I thus tried to mimic different 
functions from ESS, to no avail because of my virtually NULL skills of Lisp 
programming. The closest I could come was:

(defun ess-swv-pandoc
   "Run Pandoc on the associated .md file."
   (let* ((rmd-buf (current-buffer)))
     (save-excursion
       (let* ((sprocess (ess-get-process ess-current-process-name))
              (sbuffer (process-buffer sprocess))
              (md-file (buffer-file-name))
              (buf-coding (symbol-name buffer-file-coding-system))
              (pandoc-cmd
	      (format "require(knitr); pandoc(%s.md, output = \"html\")" md-file)))
	(message "Running pandoc on %s.md" md-file)
         (ess-execute pandoc-cmd 'buffer nil nil)
         (switch-to-buffer rmd-buf)
         (ess-show-buffer (buffer-name sbuffer) nil)))))

This attempt miserably fails with: "Wrong type argument: commandp, 
ess-swv-pandoc", and this is where I am stuck.

I'd appreciate if a good soul could shed some light on this!

All the best,
Mathieu Basille.


-- 

~$ whoami
Mathieu Basille, PhD

~$ locate --details
University of Florida \\
Fort Lauderdale Research and Education Center
(+1) 954-577-6314
http://ase-research.org/basille

~$ fortune
« Le tout est de tout dire, et je manque de mots
Et je manque de temps, et je manque d'audace. »
  -- Paul Éluard



More information about the ESS-help mailing list