Merge branch 'master' of git+ssh://repo.or.cz/srv/git/org-mode
This commit is contained in:
commit
0f85963ae2
|
@ -90,38 +90,18 @@ Emacs-lisp table, otherwise return the results as a string."
|
|||
"'" "\"" results)))))
|
||||
results)))
|
||||
|
||||
(defvar org-babel-sh-buffers '(:default . nil))
|
||||
|
||||
(defun org-babel-sh-session-buffer (session)
|
||||
(cdr (assoc session org-babel-sh-buffers)))
|
||||
|
||||
(defun org-babel-sh-initiate-session-by-key (&optional session)
|
||||
"If there is not a current inferior-process-buffer in SESSION
|
||||
then create. Return the initialized session."
|
||||
(save-window-excursion
|
||||
(let* ((session (if session (intern session) :default))
|
||||
(sh-buffer (org-babel-sh-session-buffer session))
|
||||
(newp (not (org-babel-comint-buffer-livep sh-buffer))))
|
||||
(if (and sh-buffer (get-buffer sh-buffer) (not (buffer-live-p sh-buffer)))
|
||||
(setq sh-buffer nil))
|
||||
(shell sh-buffer)
|
||||
(when newp
|
||||
(setq sh-buffer (current-buffer))
|
||||
(org-babel-comint-wait-for-output sh-buffer))
|
||||
(setq org-babel-sh-buffers (cons (cons session sh-buffer)
|
||||
(assq-delete-all session org-babel-sh-buffers)))
|
||||
session)))
|
||||
|
||||
(defun org-babel-sh-initiate-session (&optional session)
|
||||
(unless (string= session "none")
|
||||
(org-babel-sh-session-buffer (org-babel-sh-initiate-session-by-key session))))
|
||||
(save-window-excursion
|
||||
(or (org-babel-comint-buffer-livep session)
|
||||
(progn (shell session) (get-buffer (current-buffer)))))))
|
||||
|
||||
(defvar org-babel-sh-eoe-indicator "echo 'org_babel_sh_eoe'"
|
||||
"Used to indicate that evaluation is has completed.")
|
||||
(defvar org-babel-sh-eoe-output "org_babel_sh_eoe"
|
||||
"Used to indicate that evaluation is has completed.")
|
||||
|
||||
(defun org-babel-sh-evaluate (buffer body &optional result-type)
|
||||
(defun org-babel-sh-evaluate (session body &optional result-type)
|
||||
"Pass BODY to the Shell process in BUFFER. If RESULT-TYPE equals
|
||||
'output then return a list of the outputs of the statements in
|
||||
BODY, if RESULT-TYPE equals 'value then return the value of the
|
||||
|
@ -141,19 +121,32 @@ last statement in BODY."
|
|||
(with-temp-file tmp-file (insert results))
|
||||
(org-babel-import-elisp-from-file tmp-file))))))
|
||||
;; comint session evaluation
|
||||
(let* ((tmp-file (make-temp-file "org-babel-sh"))
|
||||
(full-body (mapconcat #'org-babel-chomp
|
||||
(list body org-babel-sh-eoe-indicator) "\n"))
|
||||
(raw (org-babel-comint-with-output buffer org-babel-sh-eoe-output nil
|
||||
(insert full-body) (comint-send-input nil t)))
|
||||
(results (cdr (member org-babel-sh-eoe-output
|
||||
(reverse (mapcar #'org-babel-sh-strip-weird-long-prompt
|
||||
(mapcar #'org-babel-trim raw)))))))
|
||||
;; (message (replace-regexp-in-string "%" "%%" (format "processed-results=%S" results))) ;; debugging
|
||||
(or (case result-type
|
||||
(output (org-babel-trim (mapconcat #'org-babel-trim (reverse results) "\n")))
|
||||
(value (with-temp-file tmp-file (insert (car results)))
|
||||
(org-babel-import-elisp-from-file tmp-file)))) "")))
|
||||
(flet ((strip-empty (lst)
|
||||
(delq nil (mapcar (lambda (el) (unless (= (length el) 0) el)) lst))))
|
||||
(let ((tmp-file (make-temp-file "org-babel-sh"))
|
||||
(results
|
||||
(cdr (member
|
||||
org-babel-sh-eoe-output
|
||||
(strip-empty
|
||||
(reverse
|
||||
(mapcar #'org-babel-sh-strip-weird-long-prompt
|
||||
(mapcar #'org-babel-trim
|
||||
(org-babel-comint-with-output
|
||||
session org-babel-sh-eoe-output t
|
||||
(mapc (lambda (line) (insert line) (comint-send-input))
|
||||
(strip-empty (split-string body "\n")))
|
||||
(insert org-babel-sh-eoe-indicator)
|
||||
(comint-send-input))))))))))
|
||||
;; (message (replace-regexp-in-string
|
||||
;; "%" "%%" (format "processed-results=%S" results))) ;; debugging
|
||||
(or (and results
|
||||
(case result-type
|
||||
(output (org-babel-trim (mapconcat #'org-babel-trim
|
||||
(reverse results) "\n")))
|
||||
(value (with-temp-file tmp-file
|
||||
(insert (car results)) (insert "\n"))
|
||||
(org-babel-import-elisp-from-file tmp-file))))
|
||||
"")))))
|
||||
|
||||
(defun org-babel-sh-strip-weird-long-prompt (string)
|
||||
(while (string-match "^% +[\r\n$]+ *" string)
|
||||
|
|
Loading…
Reference in New Issue