Hi, OK, I've applied this patch.
Christopher Allan Webber <cweb...@dustycloud.org> writes: > Eric, > > Looks good to me! It's abusing the None type's meaning a little, but > I think it's acceptable enough. (If you think of hlines as rows that > are not rows, you can trick yourself into thinking it is perfectly > pythonic :)) > Yea, this semantic mismatch bothered me, however it looks like Python doesn't have anything like symbols that could be used here, and I guess there isn't an issue of wanting to preserve "None" for "nil" mapping because "nil" can be represented with an empty list "[]". Thanks for bringing this up! -- Eric > > - cwebb > > "Eric Schulte" <schulte.e...@gmail.com> writes: > >> Hi Christopher, >> >> I'm certainly no Python expert, but I implemented your idea of >> converting "hlines" to and from "None"'s (patch below [1]), and it seems >> to work (under some definition of work). See the following example with >> the new behavior. >> >> >> --8<---------------cut here---------------start------------->8--- >> #+tblname: many-cols >> | a | b | c | >> |---+---+---| >> | d | e | f | >> |---+---+---| >> | g | h | i | >> >> #+source: echo-table >> #+begin_src python :var tab=many-cols :hlines yes >> return tab >> #+end_src >> >> #+results: echo-table >> | a | b | c | >> |---+---+---| >> | d | e | f | >> |---+---+---| >> | g | h | i | >> --8<---------------cut here---------------end--------------->8--- >> >> Please, Python people, try this out and if you like the behavior then >> I'll happily apply the patch. >> >> Best -- Eric >> >> Christopher Allan Webber <cweb...@dustycloud.org> writes: >> >>> Hey Eric, >>> >>> Thanks for the super helpful reply! >>> >>> Out of curiosity, is it likely that we will ever get hline support in >>> Python and etc? I've been pondering how it might be done, and maybe it >>> could be like this, using a '|-' string instead of a list for the row: >>> >>> [['a', 'b', 'c'], '|-', ['d', 'e', 'f'], ['g', 'h', 'i']] >>> >>> Which would produce: >>> >>> | a | b | c | >>> |---+---+---| >>> | d | e | f | >>> | g | h | i | >>> >>> Alternately maybe the same thing could be done by abusing None: >>> >>> [['a', 'b', 'c'], None, ['d', 'e', 'f'], ['g', 'h', 'i']] >>> >>> Thoughts? >>> - cwebb >>> >>> "Eric Schulte" <schulte.e...@gmail.com> writes: >>> >>>> Hi Christopher, >>>> >>>> Thanks for pointing this out, this is an error in the documentation, >>>> which I will update. The code you posted should generate the error you >>>> have received. >>>> >>>> Currently the only language which can handle hlines is emacs-lisp, all >>>> other languages will result in errors like the one you pasted below. >>>> That's not to say that it wouldn't be possible to add hline handling to >>>> other languages, or to maybe do something tricky like session-based >>>> evaluation in which an `hlines' variable was pre-initialized to some >>>> value, but I digress. >>>> >>>> Note that it *is* possible to have hlines in the output, using colnames, >>>> e.g. >>>> >>>> >>>> --8<---------------cut here---------------start------------->8--- >>>> #+tblname: A >>>> | a | b | c | >>>> |---+---+---| >>>> | d | e | f | >>>> | g | h | i | >>>> >>>> #+begin_src python :var tab=A :colnames yes >>>> return [[val + '*' for val in row] for row in tab] >>>> #+end_src >>>> >>>> #+results: >>>> | a | b | c | >>>> |----+----+----| >>>> | d* | e* | f* | >>>> | g* | h* | i* | >>>> --8<---------------cut here---------------end--------------->8--- >>>> >>>> which works because the hline, and the column names, are never made >>>> available to python, rather Babel holds onto them and then re-applies >>>> them to the source block's output. >>>> >>>> or even to have an elisp block add hlines to your results >>>> >>>> >>>> --8<---------------cut here---------------start------------->8--- >>>> #+tblname: many-cols >>>> | a | b | c | >>>> |---+---+---| >>>> | d | e | f | >>>> |---+---+---| >>>> | g | h | i | >>>> >>>> #+source: echo-table >>>> #+begin_src python :var tab=many-cols >>>> return tab >>>> #+end_src >>>> >>>> #+begin_src emacs-lisp :var table=echo-table >>>> (butlast (apply #'append (mapcar (lambda (el) (list el 'hline)) table))) >>>> #+end_src >>>> >>>> #+results: >>>> | a | b | c | >>>> |---+---+---| >>>> | d | e | f | >>>> |---+---+---| >>>> | g | h | i | >>>> --8<---------------cut here---------------end--------------->8--- >>>> >>>> Thanks for pointing this out! >>>> >>>> Best -- Eric >>>> >>>> Christopher Allan Webber <cweb...@dustycloud.org> writes: >>>> >>>>> Hello all, >>>>> >>>>> I was going through the tutorial and testing the :hlines yes feature as >>>>> described in the info manual. Unfortunately, the example given no >>>>> longer seems to work for python: >>>>> >>>>> #+tblname: many-cols >>>>> | a | b | c | >>>>> |---+---+---| >>>>> | d | e | f | >>>>> |---+---+---| >>>>> | g | h | i | >>>>> >>>>> #+source: echo-table >>>>> #+begin_src python :var tab=many-cols :hlines yes >>>>> return tab >>>>> #+end_src >>>>> >>>>> #+results: echo-table >>>>> | a | b | c | >>>>> | d | e | f | >>>>> | g | h | i | >>>>> >>>>> In the buffer *Org-Babel Error Output* I see: >>>>> >>>>> Traceback (most recent call last): >>>>> File "<stdin>", line 6, in <module> >>>>> File "<stdin>", line 3, in main >>>>> NameError: global name 'hline' is not defined >>>>> >>>>> In emacs-lisp this still seems to work though. But I also see that in >>>>> emacs lisp hlines are represented by the hline symbol. I'm guessing >>>>> that the python equivalent was trying to do the same thing, but no hline >>>>> variable exists in python? >>>>> >>>>> Thanks! >>>>> - cwebb >>>>> >>>>> _______________________________________________ >>>>> Emacs-orgmode mailing list >>>>> Please use `Reply All' to send replies to the list. >>>>> Emacs-orgmode@gnu.org >>>>> http://lists.gnu.org/mailman/listinfo/emacs-orgmode >> >> Footnotes: >> [1] >> >> diff --git a/lisp/babel/langs/ob-python.el b/lisp/babel/langs/ob-python.el >> index 2ce9e1d..29bb166 100644 >> --- a/lisp/babel/langs/ob-python.el >> +++ b/lisp/babel/langs/ob-python.el >> @@ -96,7 +96,7 @@ called by `org-babel-execute-src-block'." >> specifying a var of the same value." >> (if (listp var) >> (concat "[" (mapconcat #'org-babel-python-var-to-python var ", ") "]") >> - (format "%S" var))) >> + (if (equal var 'hline) "None" (format "%S" var)))) >> >> (defun org-babel-python-table-or-string (results) >> "If the results look like a list or tuple, then convert them into an >> @@ -110,7 +110,9 @@ Emacs-lisp table, otherwise return the results as a >> string." >> "\\[" "(" (replace-regexp-in-string >> "\\]" ")" (replace-regexp-in-string >> ", " " " (replace-regexp-in-string >> - "'" "\"" results)))))) >> + "'" "\"" >> + (replace-regexp-in-string >> + "None" "hline" results >> t))))))) >> results))) >> >> (defvar org-babel-python-buffers '(:default . nil)) _______________________________________________ Emacs-orgmode mailing list Please use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode