From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ken Mankoff Subject: [PATCH] Add :eval only-manual to babel blocks Date: Mon, 14 Oct 2019 09:10:01 +0200 Message-ID: <87v9srdcqe.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:470:142:3::10]:43805) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iJuUY-0005AU-Ax for emacs-orgmode@gnu.org; Mon, 14 Oct 2019 03:10:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iJuUX-0002Ra-0T for emacs-orgmode@gnu.org; Mon, 14 Oct 2019 03:10:06 -0400 Received: from mail-lj1-x231.google.com ([2a00:1450:4864:20::231]:37501) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iJuUW-0002RG-O0 for emacs-orgmode@gnu.org; Mon, 14 Oct 2019 03:10:04 -0400 Received: by mail-lj1-x231.google.com with SMTP id l21so15521081lje.4 for ; Mon, 14 Oct 2019 00:10:04 -0700 (PDT) Received: from geus3064linuxwsm (0187900733.0.fullrate.ninja. [2.110.49.174]) by smtp.gmail.com with ESMTPSA id n12sm4116109lfh.86.2019.10.14.00.10.01 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 14 Oct 2019 00:10:02 -0700 (PDT) List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: Org Mailing List --=-=-= Content-Type: text/plain With this patch and ":eval only-manual" in a babel header, 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. This is my first contribution to Org core. I've signed FSF papers. -k. --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=org-babel-only-manual.patch 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 --=-=-=--