org-mode/org-tangle-integration/article

115 lines
3.1 KiB
Plaintext

From: "Eric H. Neilsen, Jr." <neilsen@fnal.gov>
Subject: [Orgmode] A tool for creating source code files from example and src blocks in org files
To: emacs-orgmode@gnu.org
Date: Tue, 02 Jun 2009 13:50:58 -0500
Hi,
First, thank you Carsten and others, for putting this thing together;
org-mode is the most useful tool I've run across in a long time.
I recently put together a few commands to create source code files
from SRC and EXAMPLE blocks in org-mode files. The original idea is to
be able to compile examples in my notes without needing to merge them
into a separate source file by hand. As I was writing it I realized
this is exactly the same tool one needs to turn org-mode into a
literate programming tool (see http://www.literateprogramming.com/ ),
so I adopted some of the nomenclature. (I tried literate programming a
few years ago, and gave up in frustration with the tools. I am tempted
to try again with org-mode.)
The two user level commands are org-tangle and org-untangle, best
explained through example. Running org-tangle in a buffer that looks
like this:
---------------------- begin /tmp/test.org ---------------------------
* Some file
Some text here
#+CHUNK file1.sh 1
#+BEGIN_SRC bash
echo "line 1"
echo "line 2"
#+END_SRC
more text
** Some subsection
#+CHUNK file1.sh 2
#+BEGIN_SRC bash
echo "line 5"
echo "line 6"
#+END_SRC
blah blah blah
#+CHUNK README.txt 1
#+BEGIN_EXAMPLE
text line 1
text line 2
text line 3
#+END_EXAMPLE
foo foo bar baz
#+CHUNK file1.sh 1.5
#+BEGIN_SRC bash
echo "line 3"
echo "line 4"
#+END_SRC
-------------- end /tmp/test.org ----------------
results in the creation of these two files, opened in emacs buffers:
------------- begin /tmp/file1.sh ----------------
# ORGCHUNK /tmp/test.org 1
echo "line 1"
echo "line 2"
# ORGCHUNK /tmp/test.org 1.5
echo "line 3"
echo "line 4"
# ORGCHUNK /tmp/test.org 2
echo "line 5"
echo "line 6"
------------- end /tmp/file1.sh ---------------------
and
------------ begin /tmp/README.txt -------------
text line 1
text line 2
text line 3
------------ end /tmp/README.txt ---------------
If you then edit file1.sh and run org-untangle in the buffer, changes
to it will overwrite the literal blocks in the org-mode file from
whence they came.
Is there any interest in this? My organization's rules for releasing
code to open source projects are being revised, but I am likely to be
able to do so under a BSD-like license. If there is interest, I will
push to try and figure out how to do this, and maybe even see if I can
do the assignment of copyright stuff needed for it to get under the
main umbrella (although I am not optimistic).
(If anyone feels like rewriting it, that would be even better; aside
from a fairly straightforward .emacs, this is my first ever lisp code,
so it is likely to need cleaning and refactoring.)
-Eric
--
Eric H. Neilsen, Jr.
http://home.fnal.gov/~neilsen
_______________________________________________
Emacs-orgmode mailing list
Remember: use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode