Re: [O] How to write a org babel hook, which can manupulate result
Daimrod writes: > Feng Shu writes: > >> Daimrod writes: >> >>> Feng Shu writes: >>> Hi: >>> Hi Feng, >>> >>> Look at the :post header argument. >>> (info "(org) post") >> >> How to use elisp in :post directly, > > I don't think you can. > > You have to use it this way (not tested): > #+NAME: align-multi-table > #+BEGIN_SRC emacs-lisp :var content="nil" :results raw > (align-multi-table content) > #+END_SRC > #+begin_src R :results output raw drawer :post > align-multi-table(content=*this*) > > #+end_src I prefer using a hook function to do this job, The below is my hook: #+begin_src elisp (add-hook 'org-babel-after-execute-hook 'eh-org-babel-align-tables) (defun eh-org-babel-align-tables (&optional info) "Align all tables in the result of the current source" (interactive) (let ((location (org-babel-where-is-src-block-result nil info))) (when location (save-excursion (goto-char location) (when (looking-at (concat org-babel-result-regexp ".*$")) (while (< (point) (progn (forward-line 1) (org-babel-result-end))) (when (org-at-table-p) (toggle-truncate-lines 1) (org-table-align) (goto-char (org-table-end))) (forward-line))) #+end_src > >> for example: >> >> #+begin_src R :results output raw drawer :post (align-multi-table) >> >> #+end_src >> #+begin_comment >> (defun align-multi-table (&optional content) >> (interactive) >> (let ((content (or content *this*))) >> (with-temp-buffer >> (insert content) >> (goto-char (point-min)) >> (while (not (eobp)) >> (when (org-at-table-p) >>(org-table-align)) >> (forward-line)) >> (buffer-string >> #+end_comment >> >>> I want to write a hook to menupulate org babel output, The problem is: How can I get two points info: [pointA] and [pointB] in my hook function? #+begin_src R :results output raw drawer tbl <- data.frame(a=c(1,2,3),b=c(3,2,1)) print(ascii(tbl),type="org") #+END_SRC #+RESULTS: :RESULTS: [pointA] | |a |b | |---+--+--| | 1 | 1.00 | 3.00 | | 2 | 2.00 | 2.00 | | 3 | 3.00 | 1.00 | [pointB] :END: --
Re: [O] How to write a org babel hook, which can manupulate result
Feng Shu writes: > Daimrod writes: > >> Feng Shu writes: >> >>> Hi: >> Hi Feng, >> >> Look at the :post header argument. >> (info "(org) post") > > How to use elisp in :post directly, I don't think you can. You have to use it this way (not tested): #+NAME: align-multi-table #+BEGIN_SRC emacs-lisp :var content="nil" :results raw (align-multi-table content) #+END_SRC #+begin_src R :results output raw drawer :post align-multi-table(content=*this*) #+end_src > for example: > > #+begin_src R :results output raw drawer :post (align-multi-table) > > #+end_src > #+begin_comment > (defun align-multi-table (&optional content) > (interactive) > (let ((content (or content *this*))) > (with-temp-buffer > (insert content) > (goto-char (point-min)) > (while (not (eobp)) > (when (org-at-table-p) > (org-table-align)) > (forward-line)) > (buffer-string > #+end_comment > >> >>> I want to write a hook to menupulate org babel output, >>> The problem is: How can I get two points info: [pointA] and [pointB] >>> in my hook function? >>> >>> #+begin_src R :results output raw drawer >>> tbl <- data.frame(a=c(1,2,3),b=c(3,2,1)) >>> print(ascii(tbl),type="org") >>> #+END_SRC >>> >>> #+RESULTS: >>> :RESULTS: >>> [pointA] >>> | |a |b | >>> |---+--+--| >>> | 1 | 1.00 | 3.00 | >>> | 2 | 2.00 | 2.00 | >>> | 3 | 3.00 | 1.00 | >>> [pointB] >>> :END: -- Daimrod/Greg
Re: [O] How to write a org babel hook, which can manupulate result
Daimrod writes: > Feng Shu writes: > >> Hi: > Hi Feng, > > Look at the :post header argument. > (info "(org) post") How to use elisp in :post directly, for example: #+begin_src R :results output raw drawer :post (align-multi-table) #+end_src #+begin_comment (defun align-multi-table (&optional content) (interactive) (let ((content (or content *this*))) (with-temp-buffer (insert content) (goto-char (point-min)) (while (not (eobp)) (when (org-at-table-p) (org-table-align)) (forward-line)) (buffer-string #+end_comment > >> I want to write a hook to menupulate org babel output, >> The problem is: How can I get two points info: [pointA] and [pointB] >> in my hook function? >> >> #+begin_src R :results output raw drawer >> tbl <- data.frame(a=c(1,2,3),b=c(3,2,1)) >> print(ascii(tbl),type="org") >> #+END_SRC >> >> #+RESULTS: >> :RESULTS: >> [pointA] >> | |a |b | >> |---+--+--| >> | 1 | 1.00 | 3.00 | >> | 2 | 2.00 | 2.00 | >> | 3 | 3.00 | 1.00 | >> [pointB] >> :END: --
Re: [O] How to write a org babel hook, which can manupulate result
Daimrod writes: > Feng Shu writes: > >> Hi: > Hi Feng, > > Look at the :post header argument. > (info "(org) post") Thanks ... > >> I want to write a hook to menupulate org babel output, >> The problem is: How can I get two points info: [pointA] and [pointB] >> in my hook function? >> >> #+begin_src R :results output raw drawer >> tbl <- data.frame(a=c(1,2,3),b=c(3,2,1)) >> print(ascii(tbl),type="org") >> #+END_SRC >> >> #+RESULTS: >> :RESULTS: >> [pointA] >> | |a |b | >> |---+--+--| >> | 1 | 1.00 | 3.00 | >> | 2 | 2.00 | 2.00 | >> | 3 | 3.00 | 1.00 | >> [pointB] >> :END: --
Re: [O] How to write a org babel hook, which can manupulate result
Feng Shu writes: > Hi: Hi Feng, Look at the :post header argument. (info "(org) post") > I want to write a hook to menupulate org babel output, > The problem is: How can I get two points info: [pointA] and [pointB] > in my hook function? > > #+begin_src R :results output raw drawer > tbl <- data.frame(a=c(1,2,3),b=c(3,2,1)) > print(ascii(tbl),type="org") > #+END_SRC > > #+RESULTS: > :RESULTS: > [pointA] > | |a |b | > |---+--+--| > | 1 | 1.00 | 3.00 | > | 2 | 2.00 | 2.00 | > | 3 | 3.00 | 1.00 | > [pointB] > :END: -- Daimrod/Greg
[O] How to write a org babel hook, which can manupulate result
Hi: I want to write a hook to menupulate org babel output, The problem is: How can I get two points info: [pointA] and [pointB] in my hook function? #+begin_src R :results output raw drawer tbl <- data.frame(a=c(1,2,3),b=c(3,2,1)) print(ascii(tbl),type="org") #+END_SRC #+RESULTS: :RESULTS: [pointA] | |a |b | |---+--+--| | 1 | 1.00 | 3.00 | | 2 | 2.00 | 2.00 | | 3 | 3.00 | 1.00 | [pointB] :END: --