emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* tangle on export
@ 2015-09-24 10:37 Alan Schmitt
  2015-09-24 11:17 ` Rainer M Krug
  2015-09-24 11:51 ` John Kitchin
  0 siblings, 2 replies; 7+ messages in thread
From: Alan Schmitt @ 2015-09-24 10:37 UTC (permalink / raw)
  To: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 711 bytes --]

Hello,

I have a question I feel is very basic but I did not find the answer in
the manual. How can I trigger the tangling of a block upon export.

More precisely, I want to give the following example in a lecture:

#+name:hello
#+begin_src ocaml :tangle myprog.ml
Printf.printf "Bonjour le monde !\n"
#+end_src

#+BEGIN_SRC sh :exports both :results verbatim
ocamlc -o myprog myprog.ml
./myprog
#+END_SRC

where I show a program to be compiled and actually compile it. Is there
a header I should put on the "hello" block to tangle it when I export
it?

Thanks,

Alan

-- 
OpenPGP Key ID : 040D0A3B4ED2E5C7
Athmospheric CO₂ (Updated September 22, 2015, Mauna Loa Obs.): 397.77 ppm

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: tangle on export
  2015-09-24 10:37 tangle on export Alan Schmitt
@ 2015-09-24 11:17 ` Rainer M Krug
  2015-09-24 12:14   ` Andreas Leha
  2015-09-24 13:36   ` Alan Schmitt
  2015-09-24 11:51 ` John Kitchin
  1 sibling, 2 replies; 7+ messages in thread
From: Rainer M Krug @ 2015-09-24 11:17 UTC (permalink / raw)
  To: Alan Schmitt; +Cc: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 1937 bytes --]

Alan Schmitt <alan.schmitt@polytechnique.org> writes:

> Hello,
>
> I have a question I feel is very basic but I did not find the answer in
> the manual. How can I trigger the tangling of a block upon export.

Tangling and exporting are two different paths (well - one could see
tangling as a special case of exporting).

You have to use an export hook (see
http://orgmode.org/tmp/worg/org-configs/org-hooks.html for a list of
hooks in org).

I have done something similar to run a post-tangle hook:

#+begin_src emacs-lisp
(defvar org-babel-tangle-run-postTangleScript nil
  "If non-nil, postTangleScript.sh will be executed")
(put 'org-babel-tangle-run-postTangleScript 'safe-local-variable 'booleanp)

(defun org-babel-run-post-tangle-script ()
  (when org-babel-tangle-run-postTangleScript
    (message "running the postTangleScript.sh bash shell script")
    (shell-command "bash ./postTangleScript.sh")))

(add-hook 'org-babel-post-tangle-hook 'org-babel-run-post-tangle-script)
#+end_src

Cheers,

Rainer

>
> More precisely, I want to give the following example in a lecture:
>
> #+name:hello
> #+begin_src ocaml :tangle myprog.ml
> Printf.printf "Bonjour le monde !\n"
> #+end_src
> #+BEGIN_SRC sh :exports both :results verbatim
> ocamlc -o myprog myprog.ml
> ./myprog
> #+END_SRC
>
> where I show a program to be compiled and actually compile it. Is there
> a header I should put on the "hello" block to tangle it when I export
> it?
>
> Thanks,
>
> Alan

-- 
Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany)

Centre of Excellence for Invasion Biology
Stellenbosch University
South Africa

Tel :       +33 - (0)9 53 10 27 44
Cell:       +33 - (0)6 85 62 59 98
Fax :       +33 - (0)9 58 10 27 44

Fax (D):    +49 - (0)3 21 21 25 22 44

email:      Rainer@krugs.de

Skype:      RMkrug

PGP: 0x0F52F982

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 454 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: tangle on export
  2015-09-24 10:37 tangle on export Alan Schmitt
  2015-09-24 11:17 ` Rainer M Krug
@ 2015-09-24 11:51 ` John Kitchin
  1 sibling, 0 replies; 7+ messages in thread
From: John Kitchin @ 2015-09-24 11:51 UTC (permalink / raw)
  To: Alan Schmitt; +Cc: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 1380 bytes --]

I would add a third Elisp block that calls org-babel-tangle. Assuming all
your code blocks execute on export that will make it tangle. Or I have also
made an Elisp block that does the tangle and then runs the export command.
I.e. Not using the keyboard shortcuts for export.

On Thursday, September 24, 2015, Alan Schmitt <
alan.schmitt@polytechnique.org> wrote:

> Hello,
>
> I have a question I feel is very basic but I did not find the answer in
> the manual. How can I trigger the tangling of a block upon export.
>
> More precisely, I want to give the following example in a lecture:
>
> #+name:hello
> #+begin_src ocaml :tangle myprog.ml
> Printf.printf "Bonjour le monde !\n"
> #+end_src
>
> #+BEGIN_SRC sh :exports both :results verbatim
> ocamlc -o myprog myprog.ml
> ./myprog
> #+END_SRC
>
> where I show a program to be compiled and actually compile it. Is there
> a header I should put on the "hello" block to tangle it when I export
> it?
>
> Thanks,
>
> Alan
>
> --
> OpenPGP Key ID : 040D0A3B4ED2E5C7
> Athmospheric CO₂ (Updated September 22, 2015, Mauna Loa Obs.): 397.77 ppm
>


-- 
John

-----------------------------------
Professor John Kitchin
Doherty Hall A207F
Department of Chemical Engineering
Carnegie Mellon University
Pittsburgh, PA 15213
412-268-7803
@johnkitchin
http://kitchingroup.cheme.cmu.edu

[-- Attachment #2: Type: text/html, Size: 1917 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: tangle on export
  2015-09-24 11:17 ` Rainer M Krug
@ 2015-09-24 12:14   ` Andreas Leha
  2015-09-24 13:33     ` Alan Schmitt
  2015-09-24 13:36   ` Alan Schmitt
  1 sibling, 1 reply; 7+ messages in thread
From: Andreas Leha @ 2015-09-24 12:14 UTC (permalink / raw)
  To: emacs-orgmode

Hi Alan,

Rainer M Krug <Rainer@krugs.de> writes:
> Alan Schmitt <alan.schmitt@polytechnique.org> writes:
>
>> Hello,
>>
>> I have a question I feel is very basic but I did not find the answer in
>> the manual. How can I trigger the tangling of a block upon export.
>
> Tangling and exporting are two different paths (well - one could see
> tangling as a special case of exporting).
>
> You have to use an export hook (see
> http://orgmode.org/tmp/worg/org-configs/org-hooks.html for a list of
> hooks in org).
>
> I have done something similar to run a post-tangle hook:
>
> #+begin_src emacs-lisp
> (defvar org-babel-tangle-run-postTangleScript nil
>   "If non-nil, postTangleScript.sh will be executed")
> (put 'org-babel-tangle-run-postTangleScript 'safe-local-variable 'booleanp)
>
> (defun org-babel-run-post-tangle-script ()
>   (when org-babel-tangle-run-postTangleScript
>     (message "running the postTangleScript.sh bash shell script")
>     (shell-command "bash ./postTangleScript.sh")))
>
> (add-hook 'org-babel-post-tangle-hook 'org-babel-run-post-tangle-script)
> #+end_src
>
> Cheers,
>
> Rainer
>
>>
>> More precisely, I want to give the following example in a lecture:
>>
>> #+name:hello
>> #+begin_src ocaml :tangle myprog.ml
>> Printf.printf "Bonjour le monde !\n"
>> #+end_src
>> #+BEGIN_SRC sh :exports both :results verbatim
>> ocamlc -o myprog myprog.ml
>> ./myprog
>> #+END_SRC
>>
>> where I show a program to be compiled and actually compile it. Is there
>> a header I should put on the "hello" block to tangle it when I export
>> it?
>>
>> Thanks,
>>
>> Alan

if all of this is for a single block, you can get away quite cheaply
with sth along (untested)

#+begin_src emacs-lisp :results silent
  (save-excursion
    ;; tangle
    (org-babel-goto-named-src-block "hello")
    (org-babel-tangle '(4)))
#+end_src

and make sure this gets executed during export.

Regards,
Andreas

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: tangle on export
  2015-09-24 12:14   ` Andreas Leha
@ 2015-09-24 13:33     ` Alan Schmitt
  2015-09-24 13:43       ` Andreas Leha
  0 siblings, 1 reply; 7+ messages in thread
From: Alan Schmitt @ 2015-09-24 13:33 UTC (permalink / raw)
  To: Andreas Leha; +Cc: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 747 bytes --]

Hi Andreas,

On 2015-09-24 14:14, Andreas Leha <andreas.leha@med.uni-goettingen.de> writes:

> if all of this is for a single block, you can get away quite cheaply
> with sth along (untested)
>
> #+begin_src emacs-lisp :results silent
>   (save-excursion
>     ;; tangle
>     (org-babel-goto-named-src-block "hello")
>     (org-babel-tangle '(4)))
> #+end_src
>
> and make sure this gets executed during export.

I’ve tried this and somehow it replaces the whole org file with
a version with comments and src block headers removed, and macros
expanded. I have no idea why it does this …

Best,

Alan

-- 
OpenPGP Key ID : 040D0A3B4ED2E5C7
Athmospheric CO₂ (Updated September 22, 2015, Mauna Loa Obs.): 397.23 ppm

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: tangle on export
  2015-09-24 11:17 ` Rainer M Krug
  2015-09-24 12:14   ` Andreas Leha
@ 2015-09-24 13:36   ` Alan Schmitt
  1 sibling, 0 replies; 7+ messages in thread
From: Alan Schmitt @ 2015-09-24 13:36 UTC (permalink / raw)
  To: Rainer M Krug; +Cc: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 1308 bytes --]

Hi Rainer,

On 2015-09-24 13:17, Rainer M Krug <Rainer@krugs.de> writes:

> Alan Schmitt <alan.schmitt@polytechnique.org> writes:
>
>> Hello,
>>
>> I have a question I feel is very basic but I did not find the answer in
>> the manual. How can I trigger the tangling of a block upon export.
>
> Tangling and exporting are two different paths (well - one could see
> tangling as a special case of exporting).
>
> You have to use an export hook (see
> http://orgmode.org/tmp/worg/org-configs/org-hooks.html for a list of
> hooks in org).
>
> I have done something similar to run a post-tangle hook:
>
> #+begin_src emacs-lisp
> (defvar org-babel-tangle-run-postTangleScript nil
>   "If non-nil, postTangleScript.sh will be executed")
> (put 'org-babel-tangle-run-postTangleScript 'safe-local-variable 'booleanp)
>
> (defun org-babel-run-post-tangle-script ()
>   (when org-babel-tangle-run-postTangleScript
>     (message "running the postTangleScript.sh bash shell script")
>     (shell-command "bash ./postTangleScript.sh")))
>
> (add-hook 'org-babel-post-tangle-hook 'org-babel-run-post-tangle-script)
> #+end_src

Thanks, I’ll give this a try.

Alan

-- 
OpenPGP Key ID : 040D0A3B4ED2E5C7
Athmospheric CO₂ (Updated September 22, 2015, Mauna Loa Obs.): 397.23 ppm

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: tangle on export
  2015-09-24 13:33     ` Alan Schmitt
@ 2015-09-24 13:43       ` Andreas Leha
  0 siblings, 0 replies; 7+ messages in thread
From: Andreas Leha @ 2015-09-24 13:43 UTC (permalink / raw)
  To: emacs-orgmode

Hi Alan,

Alan Schmitt <alan.schmitt@polytechnique.org> writes:
> Hi Andreas,
>
> On 2015-09-24 14:14, Andreas Leha <andreas.leha@med.uni-goettingen.de> writes:
>
>> if all of this is for a single block, you can get away quite cheaply
>> with sth along (untested)
>>
>> #+begin_src emacs-lisp :results silent
>>   (save-excursion
>>     ;; tangle
>>     (org-babel-goto-named-src-block "hello")
>>     (org-babel-tangle '(4)))
>> #+end_src
>>
>> and make sure this gets executed during export.
>
> I’ve tried this and somehow it replaces the whole org file with
> a version with comments and src block headers removed, and macros
> expanded. I have no idea why it does this …
>

That's what I feared.  So, you better go for the other suggestions in
this thread, the hook or calling the export from that same source block
-- now making sure not to evaluate the block again.

Best,
Andreas

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2015-09-24 13:44 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-09-24 10:37 tangle on export Alan Schmitt
2015-09-24 11:17 ` Rainer M Krug
2015-09-24 12:14   ` Andreas Leha
2015-09-24 13:33     ` Alan Schmitt
2015-09-24 13:43       ` Andreas Leha
2015-09-24 13:36   ` Alan Schmitt
2015-09-24 11:51 ` John Kitchin

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