org-mode 能不能在 org src buffer 中执行 org babel?

我的需求是, 我会用 org-babel 用 dot, mermaid 之类的来画一些图,生成的是 pdf, 用另一个 pdf 软件看 (这样可以看得比较清楚). 我希望能一边编辑 babel block 中的 source code (用 org-edit-special 在另一个 buffer), 一边看 pdf 效果. 现在每次我想更新图, 我要先 org-edit-src-exit, 再 C-c C-c 再重新 org-edit-special. 有没有优雅一点的方法可以直接在 org src buffer 中执行 org babel? 一个不优雅的做法就是直接写一个命令先后调用, org-edic-src-exit, org-babel-execute-src-block, org-edit-special. 就是这样:

(defun my/org-babel-in-buffer ()
  (interactive)
  (call-interactively #'org-edit-src-exit)
  (call-interactively #'org-babel-execute-src-block)
  (call-interactively #'org-edit-special)
  )

可以是可以, 不优雅的地方在于, 每次执行完了都需要重新设置 buffer, 比如打开 undo-tree-mode, font-lock-mode 之类的.

这段代码可以:

(defun my/execute-org-src-block-in-org-src-buffer ()
  "Execute the source block from an org-src buffer."
  (interactive)
  (org-edit-src-save)
  (if (org-src-edit-buffer-p)
      (let* ((src-beg (marker-position org-src--beg-marker))
             (org-buffer (marker-buffer org-src--beg-marker)))
        (with-current-buffer org-buffer
          (save-excursion
            (goto-char src-beg)
            (org-babel-execute-maybe))))
    (message "Not in an org-src buffer!")))