emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* org-babel-tangle indentation
@ 2009-10-08 13:51 Chris Gray
  2009-10-08 14:31 ` Eric Schulte
  0 siblings, 1 reply; 3+ messages in thread
From: Chris Gray @ 2009-10-08 13:51 UTC (permalink / raw)
  To: emacs-orgmode

Hi,

I've been using org-babel for a couple of weeks now and I really like it
for programming.  One thing I've noticed, though, is that source blocks
are not indented when they are output by org-babel-tangle.  This makes
the output source hard to read, and incorrect for languages where
indentation is important.

For example, the following bit of python does not compile when tangled. 

--8<---------------cut here---------------start------------->8---
* Introduction

  This is some intro text.

#+srcname: the first block
#+begin_src python :tangle foo :exports none
  print '1 + 1'
  if 1 + 1 == 2:
      print 'oh no'
  else:
      # <<do the other thing>>
#+end_src

  Some more text.

#+srcname: do the other thing
#+begin_src python :tangle no :exports none
  print 'oh yes'
#+end_src
--8<---------------cut here---------------end--------------->8---

My preference would be for source blocks to be indented to the level of
the comment that caused them to be inserted.

Cheers,
Chris

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

* Re: org-babel-tangle indentation
  2009-10-08 13:51 org-babel-tangle indentation Chris Gray
@ 2009-10-08 14:31 ` Eric Schulte
  2009-10-08 17:36   ` Dan Davison
  0 siblings, 1 reply; 3+ messages in thread
From: Eric Schulte @ 2009-10-08 14:31 UTC (permalink / raw)
  To: emacs-orgmode

Hi Chris,

You have touched upon a true limitation in the current tangle
functionality.  I think this issue has two parts (one of which you
address below).

1) it is impossible to specify a piece of heavily indented code in a
   source-code block.  For example

--8<---------------cut here---------------start------------->8---
#+begin_src python
          9
#+end_src
--8<---------------cut here---------------end--------------->8---

   will always be exported as 

--8<---------------cut here---------------start------------->8---
9
--8<---------------cut here---------------end--------------->8---

   because Org-babel strips off any leading spaces.  This problem is
   exacerbated by the fact that C-' org-edit-special also strips off
   leading spaces.

2) There is no way to specify the level at which the contents of a
   source block should be indented.  You provided a good solution to
   this second issue below, and I'm adding it to the org-babel task
   stack.

Thanks -- Eric

Chris Gray <chrismgray@gmail.com> writes:

> Hi,
>
> I've been using org-babel for a couple of weeks now and I really like it
> for programming.  One thing I've noticed, though, is that source blocks
> are not indented when they are output by org-babel-tangle.  This makes
> the output source hard to read, and incorrect for languages where
> indentation is important.
>
> For example, the following bit of python does not compile when tangled. 
>
> * Introduction
>
>   This is some intro text.
>
> #+srcname: the first block
> #+begin_src python :tangle foo :exports none
>   print '1 + 1'
>   if 1 + 1 == 2:
>       print 'oh no'
>   else:
>       # <<do the other thing>>
> #+end_src
>
>   Some more text.
>
> #+srcname: do the other thing
> #+begin_src python :tangle no :exports none
>   print 'oh yes'
> #+end_src
>
> My preference would be for source blocks to be indented to the level of
> the comment that caused them to be inserted.
>
> Cheers,
> Chris
>
>
>
> _______________________________________________
> Emacs-orgmode mailing list
> Remember: use `Reply All' to send replies to the list.
> Emacs-orgmode@gnu.org
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode

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

* Re: org-babel-tangle indentation
  2009-10-08 14:31 ` Eric Schulte
@ 2009-10-08 17:36   ` Dan Davison
  0 siblings, 0 replies; 3+ messages in thread
From: Dan Davison @ 2009-10-08 17:36 UTC (permalink / raw)
  To: Eric Schulte; +Cc: chrismgray, emacs-orgmode

Chris, Eric --

Coincidentally, I think the email I just sent to the list provides a
solution to these issues. I've also been using org-babel-tangle to write
a python program this week. I've been finding it very helpful merely
using basic org mode features such as folding and restructuring to
organise and navgigate the code (same with my emacs config files). See
below for notes on tangling your python example.

"Eric Schulte" <schulte.eric@gmail.com> writes:

> Hi Chris,
>
> You have touched upon a true limitation in the current tangle
> functionality.  I think this issue has two parts (one of which you
> address below).
>
> 1) it is impossible to specify a piece of heavily indented code in a
>    source-code block.  For example
>
> #+begin_src python
>           9
> #+end_src
>
>    will always be exported as 
>
> 9
>
>    because Org-babel strips off any leading spaces.  This problem is
>    exacerbated by the fact that C-' org-edit-special also strips off
>    leading spaces.

With org-src-preserve-indentation set to t, the leading spaces are
removed neither by C-c ' nor during
org-babel-tangle. org-src-preserve-indentation can be set globally or as
a buffer local variable.

>
> 2) There is no way to specify the level at which the contents of a
>    source block should be indented.  You provided a good solution to
>    this second issue below, and I'm adding it to the org-babel task
>    stack.

With org-src-preserve-indentation, as long as the indentation is correct
in the org file, it will be correct in the tangled output. So in order
to produce correct python code from Chris's example, it has to have the
correct indentation in the org buffer, i.e.

--8<---------------cut here---------------start------------->8---
* Introduction

  This is some intro text.

#+srcname: the first block
#+begin_src python :tangle foo :exports none
print '1 + 1'
if 1 + 1 == 2:
      print 'oh no'
else:
      # <<do the other thing>>
#+end_src

  Some more text.

#+srcname: do the other thing
#+begin_src python :tangle no :exports none
      print 'oh yes'
#+end_src
--8<---------------cut here---------------end--------------->8---

Chris, I have not implemented your suggestion regarding the indentation
of noweb referenced blocks, but I think it would be sensible behaviour
when org-src-preserve-indentation is nil.

Dan

>> For example, the following bit of python does not compile when tangled. 
>>
>> * Introduction
>>
>>   This is some intro text.
>>
>> #+srcname: the first block
>> #+begin_src python :tangle foo :exports none
>>   print '1 + 1'
>>   if 1 + 1 == 2:
>>       print 'oh no'
>>   else:
>>       # <<do the other thing>>
>> #+end_src
>>
>>   Some more text.
>>
>> #+srcname: do the other thing
>> #+begin_src python :tangle no :exports none
>>   print 'oh yes'
>> #+end_src
>>
>> My preference would be for source blocks to be indented to the level of
>> the comment that caused them to be inserted.
>>
>> Cheers,
>> Chris
>>
>>
>>
>> _______________________________________________
>> Emacs-orgmode mailing list
>> Remember: use `Reply All' to send replies to the list.
>> Emacs-orgmode@gnu.org
>> http://lists.gnu.org/mailman/listinfo/emacs-orgmode
>
>
> _______________________________________________
> Emacs-orgmode mailing list
> Remember: use `Reply All' to send replies to the list.
> Emacs-orgmode@gnu.org
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode

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

end of thread, other threads:[~2009-10-08 17:36 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-10-08 13:51 org-babel-tangle indentation Chris Gray
2009-10-08 14:31 ` Eric Schulte
2009-10-08 17:36   ` Dan Davison

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