summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Schulte <schulte.eric@gmail.com>2010-02-07 10:17:20 -0700
committerEric Schulte <schulte.eric@gmail.com>2010-02-07 10:17:20 -0700
commita60a83fbb65a368bb96ea6aaf1db20706b3e99c5 (patch)
tree112106964e8d88a5e622a37a2d4d3c9cb9fb7eb2
parent047ac8ab1b0969577a041a05e3df42128ddbb430 (diff)
downloadorg-mode-a60a83fbb65a368bb96ea6aaf1db20706b3e99c5.tar.gz
babel: better handling of table in shell scripts
-rw-r--r--contrib/babel/lisp/langs/org-babel-sh.el15
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)