emacs-orgmode
[Top][All Lists]
Advanced

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

Re: [O] Correct way to insert results


From: Alex Bennée
Subject: Re: [O] Correct way to insert results
Date: Thu, 14 May 2015 10:17:41 +0100

Alex Bennée <address@hidden> writes:

> 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.

Ping? Is this something I should just write a custom routine for to
replace a token generated at the initial call?

> 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]