From mboxrd@z Thu Jan 1 00:00:00 1970 From: George Mauer Subject: =?UTF-8?B?UmU6IOKAnExpdGVyYXRl4oCdIHB5dGhvbj8=?= Date: Fri, 29 Nov 2019 13:30:21 -0600 Message-ID: References: Reply-To: gmauer@gmail.com Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="00000000000061f88305988143b7" Return-path: Received: from eggs.gnu.org ([2001:470:142:3::10]:59751) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ialyT-0004yO-Up for emacs-orgmode@gnu.org; Fri, 29 Nov 2019 14:30:43 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ialyO-0003t0-GE for emacs-orgmode@gnu.org; Fri, 29 Nov 2019 14:30:40 -0500 Received: from mail-ot1-x342.google.com ([2607:f8b0:4864:20::342]:36077) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ialyO-0003eJ-8j for emacs-orgmode@gnu.org; Fri, 29 Nov 2019 14:30:36 -0500 Received: by mail-ot1-x342.google.com with SMTP id d7so8785802otq.3 for ; Fri, 29 Nov 2019 11:30:33 -0800 (PST) In-Reply-To: List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: emacs-orgmode@gnu.org --00000000000061f88305988143b7 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable I've used noweb references to actually assemble what will be tangled all at once. See how I did it here . The reason why the "incorrect" block is outdented is that tangle automatically tries to guess indentation level. (Take that as a handwavy thing - I don't know exactly how it does that nor how configurable it is) The solution I've found is noweb - basically you *wouldn't* tangle any of those blocks, but would create another non-evaluated or exportable block that has noweb references to the above blocks and how you want them arranged. *This* is the block you tangle. I haven't yet figured out how, but it should be possible to automatically configure things to run autopep8 after tangling - that would take care of indentation issues. Also I'm pretty sure there's no :weave header arg...at least I haven't seen it used and can't find it documented anywhere. On Fri, Nov 29, 2019 at 12:08 PM Norman Walsh wrote: > Hi, > > I=E2=80=99ve seen a couple of pointers recently to using Org mode and tan= gle > to write more literate Emacs configurations. I use Org+babel all the > time to write =E2=80=9Cinteractive=E2=80=9D documents, so I thought I=E2= =80=99d try out tangle > from Org. > > I didn=E2=80=99t want to start with something as comlicated as my Emacs > config :-) so I figured I=E2=80=99d kick the tires with a small python > program. That did not end well. > > Consider: > > #+TITLE: Python literate programming > #+OPTIONS: html-postamble:nil > > It starts off as a completely standard Python3 program. > > ---%<------------------------------------------------------ > #+BEGIN_SRC python :tangle yes :weave no > #!/usr/bin/env python3 > > #+END_SRC > > It defines ~a~. > > #+BEGIN_SRC python :tangle yes > def a(): > print("a") > > > #+END_SRC > > And ~b~. > > #+BEGIN_SRC python :tangle yes > def b(): > print("b") > > > #+END_SRC > > Now ~c~ is a little more complicated: > > #+BEGIN_SRC python :tangle yes > def c(): > print("c") > #+END_SRC > > Not only does ~c~ print =E2=80=9Cc=E2=80=9D, it calls ~a()~ and ~b()~. > > #+BEGIN_SRC python :tangle yes > b() > a() > #+END_SRC > > Finally, make it importable. Not that you=E2=80=99d want to. > > #+BEGIN_SRC python :tangle yes > if __name__ =3D=3D "__main__": > main() > #+END_SRC > --->%------------------------------------------------------ > > That=E2=80=99s the script. It weaves into HTML more-or-less ok (there=E2= =80=99s a > weird black box at the front of indented lines, but I can come back to > that later). > > It=E2=80=99s a complete mess when tangled. > > The extra blank lines between functions (to make pylint happy with > some PEP guideline) have disappeared. I guess I could live with that, > but the complete failure to preserve indention in the penultimate code > block is a show stopper: > > #!/usr/bin/env python3 > > def a(): > print("a") > > def b(): > print("b") > > def c(): > print("c") > > b() > a() > > if __name__ =3D=3D "__main__": > main() > > (Also, why is there an extra blank line before the incorrectly > indented block?) > > Is this user error on my part somehow? I suppose I could write my own > version of tangle, though I=E2=80=99m not clear if the whitespace is lost= in > the tangle function or in the Org mode data model. > > Thoughts? > > Be seeing you, > norm > > -- > Norman Walsh | We discover in ourselves what others > http://nwalsh.com/ | hide from us, and we recognize in > | others what we hide from > | ourselves.--Vauvenargues > --00000000000061f88305988143b7 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
I've used noweb references to actually assemble what w= ill be tangled all at once. See how I did it here.
The reason why the "incorrect" block is outdented is = that tangle automatically tries to guess indentation level. (Take that as a= handwavy thing - I don't know exactly how it does that nor how configu= rable it is) The solution I've found is noweb - basically you *wouldn&#= 39;t* tangle any of those blocks, but would create another non-evaluated or= exportable block that has noweb references to the above blocks and how you= want them arranged. *This* is the block you tangle.

I haven't yet figured out how, but it should be possible to automati= cally configure things to run autopep8 after tangling - that would take car= e of indentation issues.

Also I'm pretty sure = there's no :weave header arg...at least I haven't seen it used and = can't find it documented anywhere.

On Fri, Nov 29, 2019 at 12:08 P= M Norman Walsh <ndw@nwalsh.com>= wrote:
Hi,

I=E2=80=99ve seen a couple of pointers recently to using Org mode and tangl= e
to write more literate Emacs configurations. I use Org+babel all the
time to write =E2=80=9Cinteractive=E2=80=9D documents, so I thought I=E2=80= =99d try out tangle
from Org.

I didn=E2=80=99t want to start with something as comlicated as my Emacs
config :-) so I figured I=E2=80=99d kick the tires with a small python
program. That did not end well.

Consider:

#+TITLE: Python literate programming
#+OPTIONS: html-postamble:nil

It starts off as a completely standard Python3 program.

---%<------------------------------------------------------
#+BEGIN_SRC python :tangle yes :weave no
#!/usr/bin/env python3

#+END_SRC

It defines ~a~.

#+BEGIN_SRC python :tangle yes
def a():
=C2=A0 =C2=A0 print("a")


#+END_SRC

And ~b~.

#+BEGIN_SRC python :tangle yes
def b():
=C2=A0 =C2=A0 print("b")


#+END_SRC

Now ~c~ is a little more complicated:

#+BEGIN_SRC python :tangle yes
def c():
=C2=A0 =C2=A0print("c")
#+END_SRC

Not only does ~c~ print =E2=80=9Cc=E2=80=9D, it calls ~a()~ and ~b()~.

#+BEGIN_SRC python :tangle yes
=C2=A0 =C2=A0b()
=C2=A0 =C2=A0a()
#+END_SRC

Finally, make it importable. Not that you=E2=80=99d want to.

#+BEGIN_SRC python :tangle yes
if __name__ =3D=3D "__main__":
=C2=A0 =C2=A0 main()
#+END_SRC
--->%------------------------------------------------------

That=E2=80=99s the script. It weaves into HTML more-or-less ok (there=E2=80= =99s a
weird black box at the front of indented lines, but I can come back to
that later).

It=E2=80=99s a complete mess when tangled.

The extra blank lines between functions (to make pylint happy with
some PEP guideline) have disappeared. I guess I could live with that,
but the complete failure to preserve indention in the penultimate code
block is a show stopper:

#!/usr/bin/env python3

def a():
=C2=A0 =C2=A0 print("a")

def b():
=C2=A0 =C2=A0 print("b")

def c():
=C2=A0 =C2=A0print("c")

b()
a()

if __name__ =3D=3D "__main__":
=C2=A0 =C2=A0 main()

(Also, why is there an extra blank line before the incorrectly
indented block?)

Is this user error on my part somehow? I suppose I could write my own
version of tangle, though I=E2=80=99m not clear if the whitespace is lost i= n
the tangle function or in the Org mode data model.

Thoughts?

=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Be seein= g you,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 n= orm

--
Norman Walsh <ndw@nw= alsh.com> | We discover in ourselves what others
http://= nwalsh.com/=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | hide from us, an= d we recognize in
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | others what we hide from
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | ourselves.--Vauvenargues
--00000000000061f88305988143b7--