emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[O] Correct way to insert results


From: Alex Bennée
Subject: [O] Correct way to insert results
Date: Mon, 11 May 2015 09:09:05 +0100

Hi,

I'm working on adding async call functionality to org-babel blocks so I
don't need to block my main Emacs for long running calculations. However
I'm having problems with the insertion of the results once handled. My
code looks like this:

(defmacro async-org-call (async-form)
  "Expands `ASYNC-FORM' as an asynchronus org-bable function.
If executed inside an org file will insert the results into the src
  blocks results.  Otherwise the result will be echoed to the Message
  buffer."

  (let ((result-buffer (buffer-name))
        (result-org-name (nth 4 (org-babel-get-src-block-info))))

    `(async-start

      ;; The result of the async-sexp is returned to the handler
      ;; as result.
      (lambda ()
        ,(async-inject-variables "async-form")
        (eval async-form))

      ;; This code runs in the current emacs process.
      (lambda (result)
        (let ((buf ,result-buffer)
              (org ,result-org-name))
          
          ;; Send the results somewhere
          (if (and buf org)
              (save-excursion
                (with-current-buffer buf
                  (org-babel-goto-named-result org)
                  (org-babel-insert-result (format "%s" result))))
            (message (pp (format "async-result: %s" result)))))))))

However the insert result seems to keep skipping the named result I'm
aiming for (I was calling basic-async-test, the results end up after
async-with-delay in a fresh RESULTS: drawer):

** Basic async

#+name: basic-async-test
#+begin_src emacs-lisp 
(async-org-call (format "this is in inferior"))
#+end_src

#+RESULTS: basic-async-test
: #<process emacs>

#+name: async-with-delay
#+begin_src emacs-lisp 
(async-org-call ((sleep-for 3) (format "woken up")))
#+end_src

#+RESULTS:
=this is in inferior
=: this is in inferior

#+RESULTS: async-with-delay
: #<process emacs>

Any idea how I can do this better?


-- 
Alex Bennée



reply via email to

[Prev in Thread] Current Thread [Next in Thread]