ob-sh: add :hlines processing and :hline-string header arg

* lisp/ob-sh.el (org-babel-variable-assignments:sh): Check for
  ":hlines yes" and use header arg :hlines-string if
  defined (default to "hline") and add this to the call of
  `org-babel-sh-var-to-sh'.
  (org-babel-sh-var-to-sh, org-babel-sh-var-to-string): Add additional
  optional string argument `hline' and use it for the :hline parameter
  in the call to `orgtbl-to-generic'.
This commit is contained in:
Achim Gratz 2013-05-19 06:55:38 +02:00
parent cd1fcb6837
commit 539b89451c

View file

@ -108,26 +108,30 @@ This function is called by `org-babel-execute-src-block'."
(defun org-babel-variable-assignments:sh (params) (defun org-babel-variable-assignments:sh (params)
"Return list of shell statements assigning the block's variables." "Return list of shell statements assigning the block's variables."
(let ((sep (cdr (assoc :separator params)))) (let ((sep (cdr (assoc :separator params)))
(hline (when (string= "yes" (cdr (assoc :hlines params)))
(or (cdr (assoc :hline-string params))
"hline"))))
(mapcar (mapcar
(lambda (pair) (lambda (pair)
(format "%s=%s" (format "%s=%s"
(car pair) (car pair)
(org-babel-sh-var-to-sh (cdr pair) sep))) (org-babel-sh-var-to-sh (cdr pair) sep hline)))
(mapcar #'cdr (org-babel-get-header params :var))))) (mapcar #'cdr (org-babel-get-header params :var)))))
(defun org-babel-sh-var-to-sh (var &optional sep) (defun org-babel-sh-var-to-sh (var &optional sep hline)
"Convert an elisp value to a shell variable. "Convert an elisp value to a shell variable.
Convert an elisp var into a string of shell commands specifying a Convert an elisp var into a string of shell commands specifying a
var of the same value." var of the same value."
(format org-babel-sh-var-quote-fmt (org-babel-sh-var-to-string var sep))) (format org-babel-sh-var-quote-fmt (org-babel-sh-var-to-string var sep hline)))
(defun org-babel-sh-var-to-string (var &optional sep) (defun org-babel-sh-var-to-string (var &optional sep hline)
"Convert an elisp value to a string." "Convert an elisp value to a string."
(let ((echo-var (lambda (v) (if (stringp v) v (format "%S" v))))) (let ((echo-var (lambda (v) (if (stringp v) v (format "%S" v)))))
(cond (cond
((and (listp var) (or (listp (car var)) (equal (car var) 'hline))) ((and (listp var) (or (listp (car var)) (equal (car var) 'hline)))
(orgtbl-to-generic var (list :sep (or sep "\t") :fmt echo-var))) (orgtbl-to-generic var (list :sep (or sep "\t") :fmt echo-var
:hline hline)))
((listp var) ((listp var)
(mapconcat echo-var var "\n")) (mapconcat echo-var var "\n"))
(t (funcall echo-var var))))) (t (funcall echo-var var)))))