diff --git a/doc/org-manual.org b/doc/org-manual.org index 59591894d..aa72c642c 100644 --- a/doc/org-manual.org +++ b/doc/org-manual.org @@ -17051,6 +17051,12 @@ evaluating untrusted code blocks by prompting for a confirmation. Org does not evaluate the source code when exporting, yet the user can evaluate it interactively. +- =only-manual= :: + + Org evaluates the source code if it is run via ~org-ctrl-c-ctrl-c~ + (e.g. =C-c C-c= in the babel block), but not if run via the + ~org-babel-execute-buffer~ function. + - =query-export= :: Org prompts the user for permission to evaluate the source code diff --git a/lisp/ob-core.el b/lisp/ob-core.el index 572f97919..15fadadf0 100644 --- a/lisp/ob-core.el +++ b/lisp/ob-core.el @@ -228,7 +228,9 @@ should be asked whether to allow evaluation." (let* ((headers (nth 2 info)) (eval (or (cdr (assq :eval headers)) (when (assq :noeval headers) "no"))) - (eval-no (member eval '("no" "never"))) + (manual (and (not (eq nil (member 'org-ctrl-c-ctrl-c (org--function-stack)))) + (not (eq nil (member eval '("only-manual")))))) + (eval-no (member eval '("no" "never" "only-manual"))) (export org-babel-exp-reference-buffer) (eval-no-export (and export (member eval '("no-export" "never-export")))) (noeval (or eval-no eval-no-export)) @@ -240,10 +242,24 @@ should be asked whether to allow evaluation." (nth 0 info) (nth 1 info)) org-confirm-babel-evaluate)))) (cond + (manual t) (noeval nil) (query 'query) (t t)))) +(defun org--function-stack () + "Return the current call stack function names." + ;; https://emacs.stackexchange.com/questions/7396/ + (butlast (mapcar 'cl-second + (let ((frames) + (frame) + (index 5)) + (while (setq frame (backtrace-frame index)) + (push frame frames) + (incf index)) + (remove-if-not 'car frames))))) + + (defun org-babel-check-evaluate (info) "Check if code block INFO should be evaluated. Do not query the user, but do display an informative message if