From: Ken Mankoff <mankoff@gmail.com>
To: Org Mailing List <emacs-orgmode@gnu.org>
Subject: [PATCH] Add :eval only-manual to babel blocks
Date: Mon, 14 Oct 2019 09:10:01 +0200 [thread overview]
Message-ID: <87v9srdcqe.fsf@gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 302 bytes --]
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.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: org-babel-only-manual.patch --]
[-- Type: text/x-diff, Size: 2077 bytes --]
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
next reply other threads:[~2019-10-14 7:10 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-14 7:10 Ken Mankoff [this message]
2019-10-16 6:05 ` [PATCH] Add :eval only-manual to babel blocks Ken Mankoff
2019-10-16 10:38 ` Nicolas Goaziou
2019-10-16 11:36 ` Ken Mankoff
2019-10-16 16:07 ` Nicolas Goaziou
2019-10-16 21:10 ` Ken Mankoff
2019-10-17 12:17 ` Nicolas Goaziou
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87v9srdcqe.fsf@gmail.com \
--to=mankoff@gmail.com \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).