十几行的 org-exec 仅仅能够执行整个 buffer 中的代码块, 而且还不包括那些被设置为 :eval no 的块。此版本在其基础上添加精确定位代码块的能力,并无视 :eval no 等某些块配置。
#+name: 2025-08-02-15-04
#+begin_src emacs-lisp :eval yes :lexical t :results none
(defalias 'org-exec
(let ((timeout 30) (h (make-symbol "hook"))
(fetch (make-symbol "fetch"))
(hash (make-hash-table :test #'equal))
(rcmd (if (executable-find "curl")
`("curl" "-s" "--ssl-no-revoke")))
(conf (concat ":eval yes :results none "
":noweb yes :lexical t")))
(defalias h
(lambda()(remove-hook'eww-after-render-hook h)))
(defalias fetch
(lambda (url)
(add-hook 'eww-after-render-hook h)
(let ((eww-retrieve-command
(or rcmd eww-retrieve-command))
(st (float-time)))
(save-window-excursion
(with-timeout (timeout (error "Timeout"))
(eww-browse-url url t)
(while (memq h eww-after-render-hook)
(sit-for 1)
(message "%d" (- (float-time) st))))
(org-mode) (message "done")
(puthash url (current-buffer) hash)))))
(lambda (link &optional o)
(setq
link (string-trim link "\\[+" "\\]+")
link (with-temp-buffer
(org-mode) (insert "file:///" link)
(goto-char (point-min))
(org-element-link-parser))
o (org-element-property :search-option link)
link (org-element-property :path link)
link (substring link 1))
(let ((buf (gethash link hash))
(inhibit-read-only t))
(with-current-buffer
(if (buffer-live-p buf) buf
(funcall fetch link))
(ignore-errors (xb))
(if (null o) (org-babel-execute-buffer)
(eval `(org-sbe ,o ,conf))))))))
#+end_src