diff options
author | Eric Schulte <schulte.eric@gmail.com> | 2010-02-07 10:17:20 -0700 |
---|---|---|
committer | Eric Schulte <schulte.eric@gmail.com> | 2010-02-07 10:17:20 -0700 |
commit | a60a83fbb65a368bb96ea6aaf1db20706b3e99c5 (patch) | |
tree | 112106964e8d88a5e622a37a2d4d3c9cb9fb7eb2 | |
parent | 047ac8ab1b0969577a041a05e3df42128ddbb430 (diff) | |
download | org-mode-a60a83fbb65a368bb96ea6aaf1db20706b3e99c5.tar.gz |
babel: better handling of table in shell scripts
-rw-r--r-- | contrib/babel/lisp/langs/org-babel-sh.el | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/contrib/babel/lisp/langs/org-babel-sh.el b/contrib/babel/lisp/langs/org-babel-sh.el index 82b504a..055b564 100644 --- a/contrib/babel/lisp/langs/org-babel-sh.el +++ b/contrib/babel/lisp/langs/org-babel-sh.el @@ -48,12 +48,13 @@ function is called by `org-babel-execute-src-block'." (session (org-babel-sh-initiate-session (first processed-params))) (vars (second processed-params)) (result-type (fourth processed-params)) + (sep (cdr (assoc :separator params))) (full-body (concat (mapconcat ;; define any variables (lambda (pair) (format "%s=%s" (car pair) - (org-babel-sh-var-to-sh (cdr pair)))) + (org-babel-sh-var-to-sh (cdr pair) sep))) vars "\n") "\n" body "\n\n"))) ;; then the source block body (org-babel-sh-evaluate session full-body result-type))) @@ -61,11 +62,12 @@ function is called by `org-babel-execute-src-block'." "Prepare SESSION according to the header arguments specified in PARAMS." (let* ((session (org-babel-sh-initiate-session session)) (vars (org-babel-ref-variables params)) + (sep (cdr (assoc :separator params))) (var-lines (mapcar ;; define any variables (lambda (pair) (format "%s=%s" (car pair) - (org-babel-sh-var-to-sh (cdr pair)))) + (org-babel-sh-var-to-sh (cdr pair) sep))) vars))) (org-babel-comint-in-buffer session (mapc (lambda (var) @@ -84,11 +86,16 @@ function is called by `org-babel-execute-src-block'." ;; helper functions -(defun org-babel-sh-var-to-sh (var) +(defun org-babel-sh-var-to-sh (var &optional sep) "Convert an elisp var into a string of shell commands specifying a var of the same value." (if (listp var) - (concat "[" (mapconcat #'org-babel-sh-var-to-sh var ", ") "]") + (flet ((deep-string (el) + (if (listp el) + (mapcar #'deep-string el) + (format "%S" el)))) + (format "$(cat <<BABEL_TABLE\n%s\nBABEL_TABLE\n)" + (orgtbl-to-generic (deep-string var) (list :sep (or sep "\t"))))) (format "%S" var))) (defun org-babel-sh-table-or-results (results) |