From 1781c8986346a7ea894269f827cce80bfd5cfa70 Mon Sep 17 00:00:00 2001 From: Max Nikulin Date: Thu, 16 Mar 2023 21:50:24 +0700 Subject: [PATCH v4 2/2] ob-screen.el: Do not rely on `org-babel-variable-assignments:shell' * lisp/ob-screen.el (org-babel-variable-assignments:screen): Use `defun' instead of `defalias' to call variable assignment function specific to language obtained from the `:cmd' header argument. `org-babel-variable-assignments:shell' might be considered as implementation detail, see Ihor Radchenko to emacs-orgmode. Re: [PATCH] lisp/ob-screen.el: Support ~:var~ header args for babel blocks. Sun, 26 Feb 2023 12:18:14 +0000. The implemented approach is not optimal since it does not allow to decouple interpreter executable (for example python3) and babel language (for example python). --- lisp/ob-screen.el | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/lisp/ob-screen.el b/lisp/ob-screen.el index 6e6a31ea6..5d09fe585 100644 --- a/lisp/ob-screen.el +++ b/lisp/ob-screen.el @@ -39,10 +39,23 @@ (require 'org-macs) (org-assert-version) (require 'ob) - -;; Reuse the variable assignment code from ob-shell -(defalias 'org-babel-variable-assignments:screen - 'org-babel-variable-assignments:shell) +(require 'ob-shell) + +(defun org-babel-variable-assignments:screen (params) + "Return list of statements to assign block variables. + +This is an experimental feature, `:cmd' property from PARAMS +treated as language while actually it is command (executable) name. +It works at least for shell interpreters." + (and + (alist-get :var params) + (let* ((cmd (alist-get :cmd params)) + (lang (and cmd (file-name-base cmd))) + (func (and lang (intern + (concat "org-babel-variable-assignments:" lang))))) + (if (not (fboundp func)) + (error "Babel language support for %s is not loaded" lang) + (funcall func params))))) (defvar org-babel-screen-location "screen" "The command location for screen. -- 2.25.1