From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Eric Schulte" Subject: Re: [BABEL] Tangling to a hierarchy of files? Date: Wed, 19 Jan 2011 10:41:25 -0700 Message-ID: <87vd1k3i62.fsf@gmail.com> References: <87tyh5icir.fsf@gmail.com> <4D36B76D.9020502@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Return-path: Received: from [140.186.70.92] (port=40845 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Pfc2K-0006E2-Bp for emacs-orgmode@gnu.org; Wed, 19 Jan 2011 12:41:37 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Pfc2I-0001YV-Ch for emacs-orgmode@gnu.org; Wed, 19 Jan 2011 12:41:36 -0500 Received: from mail-vw0-f41.google.com ([209.85.212.41]:45171) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Pfc2I-0001YH-9n for emacs-orgmode@gnu.org; Wed, 19 Jan 2011 12:41:34 -0500 Received: by vws10 with SMTP id 10so467802vws.0 for ; Wed, 19 Jan 2011 09:41:33 -0800 (PST) In-Reply-To: (Chris Maier's message of "Wed, 19 Jan 2011 06:59:29 -0500") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Chris Maier Cc: emacs-orgmode@gnu.org, "Charles C. Berry" , Rainer M Krug Chris Maier writes: > On Wed, Jan 19, 2011 at 5:05 AM, Rainer M Krug 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" = ".")) >>> =C2=A0 (ns foo) >>> >>> =C2=A0 (defn my-inc [x] >>> =C2=A0 =C2=A0 (+ 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