emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* [babel] Conditional tangling possible
@ 2010-08-30 11:42 Rainer M Krug
  2010-08-31  0:06 ` Eric Schulte
  0 siblings, 1 reply; 4+ messages in thread
From: Rainer M Krug @ 2010-08-30 11:42 UTC (permalink / raw)
  To: emacs-orgmode

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi

I would like to have two different versions (not in the sense of version
control) of one program in one org file, and depending on the value if a
tag is set or not, tangle either the one or the other. The tangled file
has to have the same name.

So essentially:



** Test Code              :VERSIONTAG
Version 1:
#+begin_src R :tangle result.R
  version <- 1
  x <- 10
#+end_src

Version 2:
#+begin_src R :tangle result.R
  version <- 2
  x <- 13
#+end_src

If VERSIONTAG is Version1, result.R should contain the code as in the
first code block, and if it is Version2, the code from the second code
block.


Is this possible?

Cheers,

Rainer


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

Centre of Excellence for Invasion Biology
Natural Sciences Building
Office Suite 2039
Stellenbosch University
Main Campus, Merriman Avenue
Stellenbosch
South Africa

Tel:        +33 - (0)9 53 10 27 44
Cell:       +27 - (0)8 39 47 90 42
Fax (SA):   +27 - (0)8 65 16 27 82
Fax (D) :   +49 - (0)3 21 21 25 22 44
Fax (FR):   +33 - (0)9 58 10 27 44
email:      Rainer@krugs.de

Skype:      RMkrug
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkx7mQgACgkQoYgNqgF2ego7xACePYhPdbw/g5jWB4GMFmaTaN9M
oZ0AoIUora8lIII8ssSQssSyZUwL8aOp
=Ztnc
-----END PGP SIGNATURE-----

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

* Re: [babel] Conditional tangling possible
  2010-08-30 11:42 [babel] Conditional tangling possible Rainer M Krug
@ 2010-08-31  0:06 ` Eric Schulte
  2010-08-31  8:19   ` Rainer M Krug
  0 siblings, 1 reply; 4+ messages in thread
From: Eric Schulte @ 2010-08-31  0:06 UTC (permalink / raw)
  To: R.M.Krug; +Cc: emacs-orgmode

Hi Rainer,

The easiest way to do this should be,

--8<---------------cut here---------------start------------->8---
** pulling information from tags                                       :blue:

#+begin_src R :var color=(car (org-get-tags-at (point))) :tangle example.R
  color
#+end_src

#+results:
: blue
--8<---------------cut here---------------end--------------->8---

this will tangle to

--8<---------------cut here---------------start------------->8---
color <- "blue"
color
--8<---------------cut here---------------end--------------->8---

Cheers -- Eric

Rainer M Krug <r.m.krug@gmail.com> writes:

> Hi
>
> I would like to have two different versions (not in the sense of version
> control) of one program in one org file, and depending on the value if a
> tag is set or not, tangle either the one or the other. The tangled file
> has to have the same name.
>
> So essentially:
>
>
>
> ** Test Code              :VERSIONTAG
> Version 1:
> #+begin_src R :tangle result.R
>   version <- 1
>   x <- 10
> #+end_src
>
> Version 2:
> #+begin_src R :tangle result.R
>   version <- 2
>   x <- 13
> #+end_src
>
> If VERSIONTAG is Version1, result.R should contain the code as in the
> first code block, and if it is Version2, the code from the second code
> block.
>
>
> Is this possible?
>
> Cheers,
>
> Rainer

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

* Re: [babel] Conditional tangling possible
  2010-08-31  0:06 ` Eric Schulte
@ 2010-08-31  8:19   ` Rainer M Krug
  2010-08-31 16:19     ` Eric Schulte
  0 siblings, 1 reply; 4+ messages in thread
From: Rainer M Krug @ 2010-08-31  8:19 UTC (permalink / raw)
  To: Eric Schulte; +Cc: emacs-orgmode

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 31/08/10 02:06, Eric Schulte wrote:
> Hi Rainer,
> 
> The easiest way to do this should be,
> 
> --8<---------------cut here---------------start------------->8---
> ** pulling information from tags                                       :blue:
> 
> #+begin_src R :var color=(car (org-get-tags-at (point))) :tangle example.R
>   color
> #+end_src

OK - that looks good. That solves one problem.

But it is not actually conditional tangling? It is rather the transation
of a tag into a variable - or am I seeing something wrong?

I must admit I have chosen a bad example. The idea is really to have two
completely different definitions of a function, which is then tangled
depending on a tag (or property or whatever else I could use to make
this easy).

so:
- -8<---------------cut here---------------start------------->8---

** Here is the conditional tangle 		:SIM1
#+begin_src R :TANGLE_ONLY_IF__IN_TAGs SIM1 :tangle example.R
	simulate <- function() {
		# do something
		result <- 15
		return(result)
	}
#+end_src

#+begin_src R :TANGLE_ONLY_IF__IN_TAGs SIM2 :tangle example.R
	simulate <- function() {
		# do something else
		result <- -88
		return(result)
	}
#+end_src

- --8<---------------cut here---------------end--------------->8---

So if SIM1 is in the tags, tangle the first block, if SIM2 is in tags
then tangle the second block.

As I said, I do not have to use tags, properties would also work.

Cheers,

Rainer



> 
> #+results:
> : blue
> --8<---------------cut here---------------end--------------->8---
> 
> this will tangle to
> 
> --8<---------------cut here---------------start------------->8---
> color <- "blue"
> color
> --8<---------------cut here---------------end--------------->8---
> 
> Cheers -- Eric
> 
> Rainer M Krug <r.m.krug@gmail.com> writes:
> 
>> Hi
>>
>> I would like to have two different versions (not in the sense of version
>> control) of one program in one org file, and depending on the value if a
>> tag is set or not, tangle either the one or the other. The tangled file
>> has to have the same name.
>>
>> So essentially:
>>
>>
>>
>> ** Test Code              :VERSIONTAG
>> Version 1:
>> #+begin_src R :tangle result.R
>>   version <- 1
>>   x <- 10
>> #+end_src
>>
>> Version 2:
>> #+begin_src R :tangle result.R
>>   version <- 2
>>   x <- 13
>> #+end_src
>>
>> If VERSIONTAG is Version1, result.R should contain the code as in the
>> first code block, and if it is Version2, the code from the second code
>> block.
>>
>>
>> Is this possible?
>>
>> Cheers,
>>
>> Rainer


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

Centre of Excellence for Invasion Biology
Natural Sciences Building
Office Suite 2039
Stellenbosch University
Main Campus, Merriman Avenue
Stellenbosch
South Africa

Tel:        +33 - (0)9 53 10 27 44
Cell:       +27 - (0)8 39 47 90 42
Fax (SA):   +27 - (0)8 65 16 27 82
Fax (D) :   +49 - (0)3 21 21 25 22 44
Fax (FR):   +33 - (0)9 58 10 27 44
email:      Rainer@krugs.de

Skype:      RMkrug
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkx8uvgACgkQoYgNqgF2egrL2QCePKP3mb6CKbjCVUk4l6zHWj0y
rMIAniSj/OO5laX3xETB5s+RKborhwS4
=0pMO
-----END PGP SIGNATURE-----

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

* Re: [babel] Conditional tangling possible
  2010-08-31  8:19   ` Rainer M Krug
@ 2010-08-31 16:19     ` Eric Schulte
  0 siblings, 0 replies; 4+ messages in thread
From: Eric Schulte @ 2010-08-31 16:19 UTC (permalink / raw)
  To: R.M.Krug; +Cc: emacs-orgmode

Hi Rainer,

Rainer M Krug <r.m.krug@gmail.com> writes:

> On 31/08/10 02:06, Eric Schulte wrote:
>> Hi Rainer,
>> 
>> The easiest way to do this should be,
>> 
>> --8<---------------cut here---------------start------------->8---
>> ** pulling information from tags                                       :blue:
>> 
>> #+begin_src R :var color=(car (org-get-tags-at (point))) :tangle example.R
>>   color
>> #+end_src
>
> OK - that looks good. That solves one problem.
>
> But it is not actually conditional tangling? It is rather the transation
> of a tag into a variable - or am I seeing something wrong?
>

My fault, I misread your original message, something like the following
should work.  You can use the uppermost elisp code block to change the
value of the tangle-tag to whichever tag you wish to be tangled.

--8<---------------cut here---------------start------------->8---
** conditional tangling
#+begin_src emacs-lisp :results silent
  (setq tangle-tag "right")
#+end_src

*** first subheading                                                   :left:
#+begin_src R :tangle (and (equal (car (org-get-tags-at (point))) tangle-tag) "yes")
  "first"
#+end_src

*** second subheading                                                 :right:
#+begin_src R :tangle (and (equal (car (org-get-tags-at (point))) tangle-tag) "yes")
  "second"
#+end_src
--8<---------------cut here---------------end--------------->8---

Cheers -- Eric

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

end of thread, other threads:[~2010-08-31 16:21 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-08-30 11:42 [babel] Conditional tangling possible Rainer M Krug
2010-08-31  0:06 ` Eric Schulte
2010-08-31  8:19   ` Rainer M Krug
2010-08-31 16:19     ` Eric Schulte

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