Thorsten Jolitz <tjol...@gmail.com> writes: > Nicolas Goaziou <m...@nicolasgoaziou.fr> writes: > >> Thorsten Jolitz <tjol...@gmail.com> writes: >> >>> I see, thanks. I'm still getting used to the 'org-element API', but it >>> seems to be much easier than I thought: just use >>> org-element-at-point' and >>> `org-element-interpret-data' in most cases ... >> >> Correct. >> >> For completeness, if you're working at the local level (i.e. with >> `org-element-at-point'), available accessors are >> >> - `org-element-type' >> - `org-element-property' >> >> When you're working at the global level (i.e. with >> `org-element-parse-buffer'), you get another accessor, >> `org-element-contents', and some tools to modify the parse tree >> >> - `org-element-put-property' >> - `org-element-adopt-element' >> - `org-element-insert-before' >> - `org-element-extract-element' >> - `org-element-set-element' >> >> In both cases, `org-element-interpret-data' is the only way to turn data >> back into Org syntax. > > That makes things much clearer, thanks. > > I definitely would have used `org-element-put-property' to modify a > 'local' parse-tree too, but I can just as well directly use `plist-put' > on the raw plist in its cdr - would that be the correct way?
I tried it out, works very nicely in this buffer: * ORG SCRATCH #+name: myPicoBlock #+header: :var X=5 #+begin_src picolisp :results value raw :tangle no (+ 3 X) #+end_src #+results: 8 Evaluating the following src-block with C-c C-c gives an error: ,---- | split-string: Wrong type argument: stringp, nil `---- but it can be copied to the *scratch* buffer and evaluated there. #+begin_src emacs-lisp :results (defun tj/try-parser-api () (let (ptree) (org-babel-map-src-blocks nil (when (string= lang "picolisp") (setq ptree (delq nil (list (org-element-at-point) ptree))))) (org-element-put-property (car ptree) :value " (* 5 X)\n") (message "%S" ptree) (mapconcat 'org-element-interpret-data ptree "\n"))) #+end_src Then interpreting works as expected: #+begin_src emacs-lisp :results raw (tj/try-parser-api) #+end_src #+results: #+NAME: myPicoBlock #+HEADER: :var X=5 #+BEGIN_SRC picolisp :results value raw :tangle no (* 5 X) #+END_SRC #+results: myPicoBlock 25 and I can actually use `org-element-put-property' on the car of the local parse-tree (but need to add an "\n"). -- cheers, Thorsten