|
From: | Christopher Miles |
Subject: | [QUESTION] How to use `make-thread` to run org-babel-execute-src-block? |
Date: | Mon, 1 Feb 2021 05:05:07 +0000 |
<#secure method=pgpmime mode=sign>
I have following code snippet config:
(defun org-property-eval-on-cycle-expand (&optional state)
"Evaluate Org inline source block in property value on headline cycle expand."
(when (memq state '(children subtree))
(if-let ((inline-src-block (org-entry-get nil "EVAL" nil)))
(with-temp-buffer
(insert inline-src-block)
(goto-char (point-min))
(require 'ob-async nil t)
(setq-local org-babel-default-inline-header-args
'((:results . "silent") (:async . t)))
(let* ((context (org-element-context))
(src-block-info (org-babel-get-src-block-info nil context))
(type (org-element-type context)))
(when (eq type 'inline-src-block)
;; TODO use `make-thread'
;; ob-async: advice `org-babel-execute-src-block:async' on ‘org-babel-execute-src-block’
(org-babel-execute-src-block nil src-block-info)))))))
(add-hook 'org-cycle-hook #'org-property-eval-on-cycle-expand)
I use upper config in bellowing case to auto play video when I expand headline.
* eval inline src code block
:PROPERTIES:
:EVAL: src_sh{mpv "video.mp4"}
:END:
As upper code snippet marked TODO comment. Because I'm using ob-async
. So the
org-babel-execute-src-block
is async by default with ob-async
's advice. I want to get rip of it. Using
make-thread
, I tried to use (make-thread FUNCTION)
(the
FUNCTION
is a wrapper of org-babel-execute-src-block
) but it will block current Emacs instance. How to make it async without blocking current Emacs?
Hope someone can help me. Thank you in advance.
ATT00001.txt
Description: ATT00001.txt
[Prev in Thread] | Current Thread | [Next in Thread] |