diff options
-rw-r--r-- | ob-visa.el | 27 |
1 files changed, 26 insertions, 1 deletions
@@ -104,6 +104,30 @@ or user `keyboard-quit' during execution of body." (setq string-buffer (substring string-buffer (match-end 0)))) (split-string string-buffer comint-prompt-regexp))))) +(defun org-babel-visa-replace-vars (body vars) + "Expand BODY according to VARS. +Variabes in the BODY need to be prefixed with '$' and followed by +a space or newline." + (let ((old-body "")) + (mapc (lambda (pair) + (setq body (replace-regexp-in-string + (format "\\$%s\\([ ]\\)\\|\\$%s$" (car pair) + (car pair)) + (format "%s\\1" (cdr pair)) + body))) + vars) + body)) + +(defun org-babel-expand-body:visa (body params) + "Expand BODY according to PARAMS, return the expanded body." + (let ((vars (org-babel--get-vars params)) + (prologue (cdr (assq :prologue params))) + (epilogue (cdr (assq :epilogue params)))) + (setq body (org-babel-visa-replace-vars body vars)) + ;; add prologue/epilogue + (when prologue (setq body (concat prologue "\n" body))) + (when epilogue (setq body (concat body "\n" epilogue))) + body)) (defun org-babel-execute:visa (body params) "Execute a block of VISA code with Babel. @@ -114,6 +138,7 @@ This function is called by `org-babel-execute-src-block'." (cdr (assq :session params)))) (comint-prompt-regexp "^(visa\\|open) ") (eoe-string "org-babel-eoe") + (replaced-body (org-babel-expand-body:visa body params))) (mapconcat #'identity (butlast @@ -125,7 +150,7 @@ This function is called by `org-babel-execute-src-block'." (session "(visa) *** Unknown syntax: org-babel-eoe" t) (mapc (lambda (line) (insert (org-babel-chomp line)) (comint-send-input nil t)) - (list body + (list replaced-body eoe-string)) ) "\n") "[\r\n]+")) 2) "\n"))) |