emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] inline source code blocks


From: Ilya Shlyakhter
Subject: Re: [O] inline source code blocks
Date: Thu, 06 Mar 2014 18:35:29 -0500
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Thunderbird/24.3.0

On 3/6/14 5:04 PM, Eric Schulte wrote:
I think code blocks work well for non-inline code.

For a series of one-liners interspersed with comments, code block boundaries triple the number of lines. E.g. the example in the manual at http://orgmode.org/org.html#noweb_002dref

+BEGIN_SRC sh :tangle yes :noweb yes :shebang #!/bin/sh
        <<fullest-disk>>
      #+END_SRC
      * the mount point of the fullest disk
        :PROPERTIES:
        :noweb-ref: fullest-disk
        :END:

      ** query all mounted disks
      #+BEGIN_SRC sh
        df \
      #+END_SRC

      ** strip the header row
      #+BEGIN_SRC sh
        |sed '1d' \
      #+END_SRC

      ** sort by the percent full
      #+BEGIN_SRC sh
        |awk '{print $5 " " $6}'|sort -n |tail -1 \
      #+END_SRC

      ** extract the mount point
      #+BEGIN_SRC sh
        |awk '{print $2}'
      #+END_SRC

could be shortened to

#+PROPERTY: ob-default-lang sh

#+HEADER: :tangle yes :noweb yes :shebang #!/bin/sh
    :  <<fullest-disk>>

* the mount point of the fullest disk
  :PROPERTIES:
  :noweb-ref: fullest-disk
  :END:
** query all mounted disks
  : df \
** strip the header row
  : |sed '1d' \
** sort by the percent full
  : |awk '{print $5 " " $6}'|sort -n |tail -1 \
** extract the mount point
  : |awk '{print $2}'


i.e. where the (inherited) property ob-default-lang exists, literal examples become code blocks in that language.

Or in a list of C++ declarations:

#+PROPERTY: ob-default-lang c++

...

* class MyClass
   Does X, Y and Z.
   : class MyClass: public MyParent {
** Private fields
*** Field a: stores thing one
   : int a;
*** Field b: stores thing two
   : char *b;
** Public methods
   : public:
*** Method getA: Returns the value of a.
   : int getA() const { return a; }
** end class MyClass
   :}

I'm finding that Org would work well as a literate programming system for C++, if the code block starts and ends didn't get in the way so much during frequent switching between code and prose.

> I use the following to make code block syntax less intrusive

Thanks, that was helpful, didn't know about compose-region.
Still, it does not reduce the number of lines used, so a short list of declarations interspersed with comments quickly ends up taking a lot of vertical space. When coding it helps to be able to see many things at once, and having many extra lines (even mostly-blank ones) makes that difficult.

ilya





reply via email to

[Prev in Thread] Current Thread [Next in Thread]