From a654876c33a13dafac865fa9ea88176302d810c2 Mon Sep 17 00:00:00 2001 From: "Kenneth D. Mankoff" Date: Mon, 20 Feb 2023 21:40:39 -0800 Subject: [PATCH v4 1/2] ob-screen.el: Support var for screen source blocks * lisp/ob-screen.el (org-babel-execute:screen): Parse header params for `:var', then inject into screen session. * etc/ORG-NEWS: Document as New Feature --- etc/ORG-NEWS | 10 ++++++++++ lisp/ob-screen.el | 8 ++++++++ 2 files changed, 18 insertions(+) diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index 4ca13af17..3f70dc99a 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -131,6 +131,16 @@ selection. TODO state, priority, tags, statistics cookies, and COMMENT keywords are allowed in the tree structure. +*** ob-screen now supports :var header arguments + +The ~:var~ header arg is now supported. + +#+BEGIN_SRC org +,#+BEGIN_SRC screen :var x=42 +,echo $x +,#+END_SRC +#+END_SRC + ** Miscellaneous *** Remove undocumented ~:target~ header parameter in ~ob-clojure~ diff --git a/lisp/ob-screen.el b/lisp/ob-screen.el index 269538e79..6e6a31ea6 100644 --- a/lisp/ob-screen.el +++ b/lisp/ob-screen.el @@ -40,6 +40,10 @@ (org-assert-version) (require 'ob) +;; Reuse the variable assignment code from ob-shell +(defalias 'org-babel-variable-assignments:screen + 'org-babel-variable-assignments:shell) + (defvar org-babel-screen-location "screen" "The command location for screen. In case you want to use a different screen than one selected by your $PATH") @@ -55,8 +59,12 @@ (defun org-babel-execute:screen (body params) (message "Sending source code block to interactive terminal session...") (save-window-excursion (let* ((session (cdr (assq :session params))) + (var-lines (org-babel-variable-assignments:screen params)) (socket (org-babel-screen-session-socketname session))) (unless socket (org-babel-prep-session:screen session params)) + (mapcar (lambda (var) + (org-babel-screen-session-execute-string session var)) + var-lines) (org-babel-screen-session-execute-string session (org-babel-expand-body:generic body params))))) -- 2.25.1