emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Dan Davison <davison@stats.ox.ac.uk>
To: Giorgio Valoti <giorgio_v@me.com>
Cc: emacs-orgmode@gnu.org
Subject: Re: Include files to be used in literate programming
Date: Mon, 13 Sep 2010 08:47:16 -0400	[thread overview]
Message-ID: <87fwxdhktn.fsf@stats.ox.ac.uk> (raw)
In-Reply-To: <4A6B29B6-07EA-46F0-99E9-718F93DAE558@me.com> (Giorgio Valoti's message of "Sun, 12 Sep 2010 19:02:18 +0200")

Giorgio Valoti <giorgio_v@me.com> writes:

> Hi all,
> I’ve just switched from OmniFocus and began using Org mode. But I also discovered that it can be used for literate programming and I’d like to ask if is there a way to use an included file in the tangling phase. In other words, I have a file which includes a commons.org file, like this:
>
> === commons.org contents ===
> * Variabili comuni
>   :PROPERTIES:
>   :END:
> #+SRCNAME: entity-name
> #+BEGIN_SRC :noweb yes
> nome_tabella
> #+END_SRC
>
>
> === main.org contents ===
> #+INCLUDE: "commons.org"
>
> * Sezione in SQL
>   :PROPERTIES:
>   :END:
> #+SRCNAME: sql-module
> #+BEGIN_SRC sql :tangle module.sql :noweb yes
>   select *
>   from table <<entity-name>>;
> #+END_SRC
>
> <<entity-name>> should come from the commons but it’s not.
>
> Is there a way to expand values from included files?

Hi Giorgio,

I don't know of a way currently but I agree that it is desirable. It
does seem temtping to want to use #+INCLUDE for this purpose;
however #+INCLUDE is an /export/ construct, and tangling is not
(technically at least) an Org-mode export method. So some options that
come to my mind are:

1. I am overlooking an existing way of doing this.

2. Implement #+INCLUDE when tangling, optionally or by default.

3. Implement a general way of including blocks of code from other files
   in such a way that they behave as 'normal' code blocks. This would
   have several potentially useful consequences.

4. It seems that it should be possible to get what you want by first
   using `org-export-as-org' followed by `org-babel-tangle'. However,
   `org-export-as-org' doesn't currently include #+INCLUDE'd files. I
   wonder if it should. A hack to do what you want is below (You'll be
   prompted for a file name to save the Org export buffer to.):

#+begin_src emacs-lisp
  (defun ded/org-export-as-org-to-buffer ()
    (interactive)
    (let* ((tmp-file (make-temp-file "org-tangle-with-include"))
           (org-export-preprocess-after-include-files-hook
            `((lambda () (let ((s (buffer-string)))
                           (with-temp-file ,tmp-file (insert s)))))))
      (save-window-excursion (org-export-as-html-to-buffer nil))
      (switch-to-buffer
       (get-buffer-create "*Org Org Export*"))
      (insert-file-contents tmp-file))
    (org-mode))
  
  (defun ded/tangle-with-include-files ()
    (interactive)
    (save-window-excursion
      (ded/org-export-as-org-to-buffer)
      (org-babel-tangle)))
#+end_src

Dan


>
> Thank you in advance.
>
> --
> Giorgio Valoti
>
>
> _______________________________________________
> Emacs-orgmode mailing list
> Please use `Reply All' to send replies to the list.
> Emacs-orgmode@gnu.org
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode

  reply	other threads:[~2010-09-13 12:47 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-12 17:02 Include files to be used in literate programming Giorgio Valoti
2010-09-13 12:47 ` Dan Davison [this message]
2010-09-13 15:17   ` Giorgio Valoti
2010-09-13 15:39   ` Rainer M Krug
2010-09-13 17:05   ` [OT] " Jambunathan K
2010-09-13 18:23     ` Dan Davison
2010-09-13 19:04       ` Jambunathan K
2010-09-17 12:51 ` 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=87fwxdhktn.fsf@stats.ox.ac.uk \
    --to=davison@stats.ox.ac.uk \
    --cc=emacs-orgmode@gnu.org \
    --cc=giorgio_v@me.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).