emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: "Eric H. Neilsen, Jr." <neilsen@fnal.gov>
To: emacs-orgmode@gnu.org
Subject: A tool for creating source code files from example and src blocks in org files
Date: Tue, 02 Jun 2009 13:50:58 -0500	[thread overview]
Message-ID: <4A257492.5030300@fnal.gov> (raw)


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"

more text

** Some subsection

#+CHUNK file1.sh 2
#+BEGIN_SRC bash
echo "line 5"
echo "line 6"

blah blah blah

text line 1
text line 2
text line 3

foo foo bar baz

#+CHUNK file1.sh 1.5
#+BEGIN_SRC bash
echo "line 3"
echo "line 4"
-------------- 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 ---------------------


------------ 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 H. Neilsen, Jr.

             reply	other threads:[~2009-06-02 18:51 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-02 18:50 Eric H. Neilsen, Jr. [this message]
2009-06-03  8:53 ` Chris Gray
2009-06-16 14:03 ` Bastien
2009-06-26 19:15   ` Eric Schulte
2009-06-27 20:31     ` Eric Schulte
2009-06-03 13:27 Eric H. Neilsen, Jr.

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4A257492.5030300@fnal.gov \
    --to=neilsen@fnal.gov \
    --cc=emacs-orgmode@gnu.org \
    --subject='Re: A tool for creating source code files from example and src blocks in org files' \


* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Code repositories for project(s) associated with this inbox:


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).