[Orgmode] org-babel-tangle indentation

2009-10-08 Thread Chris Gray
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



___
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


Re: [Orgmode] org-babel-tangle indentation

2009-10-08 Thread Eric Schulte
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 chrismg...@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


___
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


Re: [Orgmode] org-babel-tangle indentation

2009-10-08 Thread Dan Davison
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.e...@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


___
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