[BUG] ":sep" header argument doesn't work in ob-shell [9.6.21 ( @ /home/aragaer/.config/emacs/elpa/org-9.6.21/)]

2024-03-12 Thread Ilya Konovalov
On current master using ":sep" header argument does not work as
expected and records are always split on whitespaces. For example:

#+begin_src sh :sep "\t"
  echo hello world
  echo test
#+end_src

#+RESULTS:
| hello | world |
| test  |   |

It looks like the issue is in the org-babel-sh-evaluate function, where
at the end it passes the result to the org-babel-import-elist-from-file
function for processing. Replacing the code with the following seems to
fix the issue:

(let ((tmp-file (org-babel-temp-file "sh-"))
  (sep (or (cdr (assq :sep params)) "\t")))
  (with-temp-file tmp-file (insert results))
  (org-babel-import-elisp-from-file tmp-file sep))

Emacs  : GNU Emacs 29.2 (build 1, x86_64-pc-linux-gnu, X toolkit)
 of 2024-03-02
Package: Org mode version 9.6.21 ( @ 
/home/aragaer/.config/emacs/elpa/org-9.6.21/)



Re: [BUG] ":sep" header argument doesn't work in ob-shell [9.6.21 ( @ /home/aragaer/.config/emacs/elpa/org-9.6.21/)]

2024-03-12 Thread Ilya Konovalov


I assumed that https://org-babel.readthedocs.io/ is at least somewhat
related to org documentation. Looks like I was wrong.

The :separator parameter seems to be related to how block's :var
arguments are formatted when passing to the shell script.

In most cases separator is not passed to
`org-babel-import-elisp-from-file' -- looks like only some languages set
it to some fixed value.

Matt  writes:

>   On Tue, 12 Mar 2024 10:27:46 +0100  Ilya Konovalov  wrote --- 
>  > 
>  > After some usage I found that this exact patch breaks
>  > `org-babel-import-elisp-from-file's own separator detection. It looks
>  > like it's better to leave it as `nil' unless specified.
>  
> Thanks for taking the time to look into it.  According to my notes,
> :sep and :separator don't work for anything beyond basic table layout.
> I'm not familiar with org-table and there isn't much documentation on
> those keywords in the manual. The :sep keyword shows up for Texinfo
> and LaTeX. It looks like :sep is used for export? It's not clear to me
> how they're supposed to work with shell block output, or if that was
> even a consideration at all.
>
> They were added in
> https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=a60a83fbb65a368bb96ea6aaf1db20706b3e99c5
> claiming "better handling of table in shell scripts" So, it looks like
> their inclusion was intentional.
>
> Maybe someone has deeper insights?




Re: [BUG] ":sep" header argument doesn't work in ob-shell [9.6.21 ( @ /home/aragaer/.config/emacs/elpa/org-9.6.21/)]

2024-03-12 Thread Ilya Konovalov


After some usage I found that this exact patch breaks
`org-babel-import-elisp-from-file's own separator detection. It looks
like it's better to leave it as `nil' unless specified.

Ilya Konovalov  writes:

> On current master using ":sep" header argument does not work as
> expected and records are always split on whitespaces. For example:
>
> #+begin_src sh :sep "\t"
>   echo hello world
>   echo test
> #+end_src
>
> #+RESULTS:
> | hello | world |
> | test  |   |
>
> It looks like the issue is in the org-babel-sh-evaluate function, where
> at the end it passes the result to the org-babel-import-elist-from-file
> function for processing. Replacing the code with the following seems to
> fix the issue:
>
> (let ((tmp-file (org-babel-temp-file "sh-"))
>   (sep (or (cdr (assq :sep params)) "\t")))
>   (with-temp-file tmp-file (insert results))
>   (org-babel-import-elisp-from-file tmp-file sep))
>
> Emacs  : GNU Emacs 29.2 (build 1, x86_64-pc-linux-gnu, X toolkit)
>  of 2024-03-02
> Package: Org mode version 9.6.21 ( @ 
> /home/aragaer/.config/emacs/elpa/org-9.6.21/)