emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: "Eric Schulte" <schulte.eric@gmail.com>
To: Chris Maier <christopher.maier@gmail.com>
Cc: emacs-orgmode@gnu.org, "Charles C. Berry" <cberry@tajo.ucsd.edu>,
	Rainer M Krug <r.m.krug@gmail.com>
Subject: Re: [BABEL] Tangling to a hierarchy of files?
Date: Wed, 19 Jan 2011 10:41:25 -0700	[thread overview]
Message-ID: <87vd1k3i62.fsf@gmail.com> (raw)
In-Reply-To: <AANLkTinvb9F2LGfpiy9RnPB8gBkEGQxL3RpkHXYcWkxs@mail.gmail.com> (Chris Maier's message of "Wed, 19 Jan 2011 06:59:29 -0500")

Chris Maier <christopher.maier@gmail.com> writes:

> On Wed, Jan 19, 2011 at 5:05 AM, Rainer M Krug <r.m.krug@gmail.com> wrote:
>> On 01/19/2011 08:22 AM, Eric Schulte wrote:
>>>
>>> In addition to the solution Charles posted, it is possible to put
>>> arbitrary elisp forms into header arguments, so the following
>>> alternative to your block above will create the directory (if it doesn't
>>> already exist) whenever the block is tangled or evaluated.
>>>
>>> #+begin_src clojure :tangle (prog1 "src/foo.clj" (make-directory "src" "."))
>>>   (ns foo)
>>>
>>>   (defn my-inc [x]
>>>     (+ x 1))
>>> #+end_src
>
> This will do what I'm looking for, thanks!
>
> Is there a place where this and the eval-on-startup trick Charles
> posted are documented?  If so, I missed it, and these are both really
> useful to know.
>

We don't currently have a good place in which to collect such tricks,
probably the closest is a file called scraps.org which I use for
stubbing out examples when responding to mailing list questions or doing
development.  Each subheading is a short self-contained example.  I do
plan on transforming this at some point into either a page on Worg
"Babel Tricks" or into a "Babel a Day" series or some such.  The page is
available at the following (notice this dir. trick is at the top)
https://github.com/eschulte/babel-dev/raw/master/scraps.org

If anyone would like to take on the task of transferring this
information into a page on Worg that would be much appreciated!  Maybe a
programmatic solution would be best, since I imagine this file will
continue to grow, or maybe I should just move this file to Worg
directly, if the Worg maintainers don't mind a steady trickle of small
commits...

>
>> Would it be possible, to include this into tangling, i.e. if the folder
>> in which the source file should be created does not exist, create it?
>>
>> I remember vaguely a discussion along these lines some time ago, but I
>> don't remember the outcome?
>
> This would be a great feature to have.  Eric's embedded Lisp code
> trick will do the job, but I can imagine that it would get cumbersome
> for more complex projects.
>

This issue has come up recently -- also raised (I believe) by a
Clojurian most likely wanted to create a lein directory layout.

The reason that I push back against this, is that I often times
accidentally use a tangle path in which the directory does not exist and
the error notification serves as a useful warning that I either
mis-typed the directory or need to create it.

I would suggest either using the pre-tangle hook, or using my trick
above, which could be made more graceful with the following function
defined...

#+begin_src emacs-lisp
  (defun mkdir-p (file &optional dir)
    "Create any parent directories of FILE if missing and return FILE."
    (make-directory (file-name-directory file) (or dir ".")) file)
#+end_src

However given that there seems to be some wide support for this maybe a
customization variable should be introduce,
e.g. org-babel-tangle-mkdirs-p or somesuch...

Cheers -- Eric

>
> Thanks for all the help, everyone!
>
> Chris

  parent reply	other threads:[~2011-01-19 17:41 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-01-19  4:02 [BABEL] Tangling to a hierarchy of files? Christopher Maier
2011-01-19  6:45 ` Charles C. Berry
2011-01-19  7:22   ` Eric Schulte
2011-01-19 10:05     ` Rainer M Krug
2011-01-19 11:59       ` Chris Maier
2011-01-19 12:06         ` Rainer M Krug
2011-01-19 16:20         ` Charles C. Berry
2011-01-19 16:27           ` Chris Maier
2011-01-19 17:41         ` Eric Schulte [this message]
2011-01-19 18:18           ` Chris Maier
2011-01-20  3:37             ` Eric Schulte
2011-01-20 10:06               ` Rainer M Krug
2011-01-21  2:11               ` Chris Maier
2011-01-20  9:09           ` Christopher Witte
2011-01-20 16:11             ` Eric Schulte

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:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  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=87vd1k3i62.fsf@gmail.com \
    --to=schulte.eric@gmail.com \
    --cc=cberry@tajo.ucsd.edu \
    --cc=christopher.maier@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    --cc=r.m.krug@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

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).