|
From: | Thomas S. Dye |
Subject: | [Orgmode] [RFC] Self-configuring Org-mode files |
Date: | Thu, 9 Dec 2010 21:09:17 -1000 |
Aloha all, I'm eager to learn how to build a self-configuring Org-mode file. I think Org-mode is uniquely positioned to produce reproducible research documents, but frankly speaking, the author of a reproducible Org-mode research document would be foolish to release it. The probability that it would run out-of-the-box on a reader's computer is quite a bit less than 1. Multiply this fraction by the number of potential readers and the probability that the author will receive one or more emails entitled something like "Your reproducible research isn't reproducible" rapidly approaches 1. A desire to produce reproducible research with Org-mode shouldn't reduce to an open-ended commitment to solve configuration problems on users' computers around the world. An Org-mode file that reliably self-configures might solve this problem. Based on the kind comments of several list members, I've come up with what I hope are the rudiments of such a self-configuring Org-mode file. I'm requesting your comments because I believe, individually and collectively, you know way more about this than I do. 1) At the end of the Org-mode file are some instructions saying something like "To use this document, first evaluate this code block", as suggested by Dan Davison:# Local variables: # eval:(sbe "essential-document-config") # End: 2) the source code block "essential-document-config" would consist of noweb calls to Library of Babel functions: #+source: essential-document-config #+begin_src emacs-lisp :noweb yes <<lob-set-this-variable(x=t)>> <<lob-set-that-variable(x=nil)>> #+end_src 3) The Library of Babel would be populated with little functions, each of which sets a single variable in a buffer-local way (as suggested several times to me on the list): #+source: lob-set-this-variable #+begin_src emacs-lisp :var x=nil (set (make-local-variable 'this-variable) x) #+end_src 4) A super-function in the Library of Babel would set the buffer-local instance of every relevant Org-mode variable to its default state: #+source: lob-set-local-defaults #+begin_src emacs-lisp ... #+end_src 6) The author of a reproducible Org-mode document could reasonably expect to produce a document that self-configures on computers around the world, in a way that is safe and effective. The author would call the super-function, then add noweb calls to little functions until the reproducible research document works as expected. I'm happy for any comments, positive or negative. All the best, Tom |
[Prev in Thread] | Current Thread | [Next in Thread] |