Re: [O] inline source code blocks
On 3/6/14 9:22 PM, Eric Schulte wrote: How about the following alternative to my previous suggestion, which will eliminate the extra lines. Looks beautiful initially, but leads to some confusing behaviors due to invisible lines. But eliminating extra lines is only important for some sections of code; in others, the extra lines (though shortened) actually help. I'll use begin_src/end_src for the former and BEGIN_SRC/END_SRC for the latter, and have your prettier-org-code-blocks fontifier match just the lowercase version. Thanks a lot, ilya
Re: [O] inline source code blocks
> 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. > I agree that maximizing code per vertical space is important. However, keeping Org-mode parseable and editable is also important. How about the following alternative to my previous suggestion, which will eliminate the extra lines. (defun prettier-org-code-blocks () (interactive) (font-lock-add-keywords nil '(("\\(^[[:space:]]*#\\+begin_src .*[\r\n]\\)" (0 (progn (compose-region (match-beginning 1) (match-end 1) "") nil))) ("\\(^[[:space:]]*#\\+end_src[\r\n]\\)" (0 (progn (compose-region (match-beginning 1) (match-end 1) "") nil)) Best, > > ilya > > > -- Eric Schulte https://cs.unm.edu/~eschulte PGP: 0x614CA05D
Re: [O] inline source code blocks
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 <> #+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 : <> * 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
Re: [O] inline source code blocks
> 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 <> #+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 : <> * 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
Re: [O] inline source code blocks
Ilya Shlyakhter writes: > Some questions about inline source code blocks: > >- They're not fontified even when org-src-fontify-natively is true > -- correct? Correct. > >- They're not included in tangled code; is that intended behavior? > The manual does not seem to say they're different from normal code > blocks, except for syntax. They were originally added for the sole purpose of including results inline in textual elements. They are not meant to export code. There is currently no support (to my knowledge) for inline fontified code. >There are also mailing list messages that suggest they're not meant > to be exported. What is the correct understanding? I can submit a > patch to the manual once I understand this myself. > That would be much appreciated. > > - For very short code snippets (1-2 lines), it would be good to > allow specifying (via properties) a default language for code blocks > (say C) and a prefix character (say '>'), after which one could write > > > int i; > I think code blocks work well for non-inline code. Although I think that an inline fontification solution may be nice. I use the following to make code block syntax less intrusive... Pretty code blocks #+begin_src emacs-lisp (defun prettier-org-code-blocks () (interactive) (font-lock-add-keywords nil '(("\\(\+begin_src\\)" (0 (progn (compose-region (match-beginning 1) (match-end 1) ?¦) nil))) ("\\(\+end_src\\)" (0 (progn (compose-region (match-beginning 1) (match-end 1) ?¦) nil)) (add-hook 'org-mode-hook 'prettier-org-code-blocks) #+end_src and code blocks may easily by typed with "< s TAB". Beyond that you could add personal customization to further reduce either the visual or typing burden. > > and have this be the equivalent of > > +BEGIN_SRC c > int i; > +END_SRC > > by analogy with short literal examples >: such as this > > Would this break any Org invariants? > > (Context: trying to use Org for literate programming in C++; > interested in others' experience in this area). > Hope these suggestions help, > > Thanks, > > Ilya > -- Eric Schulte https://cs.unm.edu/~eschulte PGP: 0x614CA05D
[O] inline source code blocks
Some questions about inline source code blocks: - They're not fontified even when org-src-fontify-natively is true -- correct? - They're not included in tangled code; is that intended behavior? The manual does not seem to say they're different from normal code blocks, except for syntax. There are also mailing list messages that suggest they're not meant to be exported. What is the correct understanding? I can submit a patch to the manual once I understand this myself. - For very short code snippets (1-2 lines), it would be good to allow specifying (via properties) a default language for code blocks (say C) and a prefix character (say '>'), after which one could write > int i; and have this be the equivalent of +BEGIN_SRC c int i; +END_SRC by analogy with short literal examples : such as this Would this break any Org invariants? (Context: trying to use Org for literate programming in C++; interested in others' experience in this area). Thanks, Ilya