Hi, I want org-mode to display a tab-separated values table ge- nerated by jq that includes elisp links that do something (differently) for each row, especially containing data that is not displayed in other columns.
The source block: | #+BEGIN_SRC sh :colnames '(Column\ A Column\ B Column\ C) | jq --null-input -r 'range(1; 4) | tostring | [ "A" + ., "B" + ., "[[elisp:(ignore)][Do it]]"] | @tsv' | #+END_SRC evaluates to: | #+RESULTS: | | Column A | Column B | Column C | | |----------+----------+----------| | | A1 | B1 | [[elisp:(ignore)][Do it]] | | | A2 | B2 | [[elisp:(ignore)][Do it]] | | | A3 | B3 | [[elisp:(ignore)][Do it]] | which org-mode displays as: | #+RESULTS: | | Column A | Column B | Column C | | |----------+----------+----------| | | A1 | B1 | Do it | | | A2 | B2 | Do it | | | A3 | B3 | Do it | with each "Do it" being a button that, when pressed and con- firmed, executes ignore. Great! Executing Emacs Lisp: | (org-insert-link nil "elisp:(ignore \"1\")" "Do it") results in the org-mode source code: | [[elisp:(ignore "1")][Do it]] so let's try jq generating that with: | #+BEGIN_SRC sh :colnames '(Column\ A Column\ B Column\ C) | jq --null-input -r 'range(1; 4) | tostring | [ "A" + ., "B" + ., "[[elisp:(ignore \"" + . + "\")][Do it]]"] | @tsv' | #+END_SRC This jq call, executed in a shell, evaluates to the output (tab-separated): | A1 B1 [[elisp:(ignore "1")][Do it]] | A2 B2 [[elisp:(ignore "2")][Do it]] | A3 B3 [[elisp:(ignore "3")][Do it]] When org-mode evaluates the source block, it strips it down to: | #+RESULTS: | | Column A | Column B | Column C | | |----------+----------+----------| | | A1 | B1 | 1 | | | A2 | B2 | 2 | | | A3 | B3 | 3 | where "1", "2" and "3" are not buttons or anything else but plain text, and any other input has been permanently dis- carded (i. e., is not just not displayed). If however I set ":results raw" in the source block: | #+BEGIN_SRC sh :colnames '(Column\ A Column\ B Column\ C) :results raw | jq --null-input -r 'range(1; 4) | tostring | [ "A" + ., "B" + ., "[[elisp:(ignore \"" + . + "\")][Do it]]"] | @tsv' | #+END_SRC org-mode evaluates that to: | #+RESULTS: | A1 B1 Do it | A2 B2 Do it | A3 B3 Do it with each "Do it" being a button that, when pressed and con- firmed, will execute (ignore "1"), (ignore "2") and (ignore "3"), respectively. So in the first and third source block, org-mode teases me that I can embed elisp links in that very nice table format (first source block) with "complex" Lisp code (third source block), but when I try to combine the two (second source block), it slaps me in the face. Surely I must be missing some obvious solution? Is there another syntax I need to use? Do I need to have jq output the raw columns A, B, D and E and then define a :post source block that converts that to A, B and C = f(D, E)? My alternative and thus benchmark for such "dashboards" that show "stuff" and offer things to do with it are derivatives of tabulated-list-mode, but their programming requires de- finitions of functions & Co. that need to be updated syn- chronously; an org-mode source block on the other hand just does what it says on the tin. TIA, Tim