mirror of
https://git.savannah.gnu.org/git/emacs/org-mode.git
synced 2024-11-26 07:33:39 +00:00
ruby can now be run with NO session
This commit is contained in:
parent
ce1726713a
commit
00365e1fbe
@ -115,10 +115,14 @@ then create. Return the initialized session."
|
||||
"When evaluated by Ruby this returns the return value of the last statement.")
|
||||
(defvar org-babel-ruby-eoe-indicator ":org_babel_ruby_eoe"
|
||||
"Used to indicate that evaluation is has completed.")
|
||||
(defun org-babel-ruby-last-value-writer (file-name)
|
||||
"Return a ruby statement to write the last value out to
|
||||
FILE-NAME."
|
||||
(format "File.open('w', '%s'){|f| f < _}.write" file-name))
|
||||
(defvar org-babel-ruby-wrapper-method
|
||||
"
|
||||
def main()
|
||||
%s
|
||||
end
|
||||
results = main()
|
||||
File.open('%s', 'w'){ |f| f.write((results.class == String) ? results : results.inspect) }
|
||||
")
|
||||
|
||||
(defun org-babel-ruby-evaluate (buffer body &optional result-type)
|
||||
"Pass BODY to the Ruby process in BUFFER. If RESULT-TYPE equals
|
||||
@ -128,22 +132,32 @@ last statement in BODY."
|
||||
(let ((full-body (mapconcat #'org-babel-chomp
|
||||
(list body org-babel-ruby-last-value-eval org-babel-ruby-eoe-indicator) "\n"))
|
||||
raw result)
|
||||
(if (and (stringp buffer) (string= buffer "none"))
|
||||
(if (not session)
|
||||
;; external process evaluation
|
||||
(let ((tmp-file (make-temp-file "ruby-functional-results")))
|
||||
()
|
||||
)
|
||||
;; comint session evaluation
|
||||
(setq raw (org-babel-comint-with-output buffer org-babel-ruby-eoe-indicator t
|
||||
(insert full-body) (comint-send-input nil t)))
|
||||
(save-window-excursion
|
||||
(with-temp-buffer
|
||||
(case result-type
|
||||
(output
|
||||
(insert body)
|
||||
;; (message "buffer=%s" (buffer-string)) ;; debugging
|
||||
(shell-command-on-region (point-min) (point-max) "ruby" 'replace)
|
||||
(buffer-string))
|
||||
(value
|
||||
(let ((tmp-file (make-temp-file "ruby-functional-results")))
|
||||
(insert (format org-babel-ruby-wrapper-method body tmp-file))
|
||||
;; (message "buffer=%s" (buffer-string)) ;; debugging
|
||||
(shell-command-on-region (point-min) (point-max) "ruby")
|
||||
(with-temp-buffer (insert-file-contents tmp-file) (buffer-string)))))))
|
||||
;; comint session evaluation
|
||||
(setq raw (org-babel-comint-with-output buffer org-babel-ruby-eoe-indicator t
|
||||
(insert full-body) (comint-send-input nil t)))
|
||||
(setq results
|
||||
(cdr (member org-babel-ruby-eoe-indicator
|
||||
(reverse (mapcar #'org-babel-ruby-read-string
|
||||
(mapcar #'org-babel-trim raw)))))))
|
||||
(case result-type
|
||||
(output (mapconcat #'identity (reverse (cdr results)) "\n"))
|
||||
(value (car results))
|
||||
(t (reverse results)))))
|
||||
(mapcar #'org-babel-trim raw))))))
|
||||
(case result-type
|
||||
(output (mapconcat #'identity (reverse (cdr results)) "\n"))
|
||||
(value (car results))))))
|
||||
|
||||
(defun org-babel-ruby-read-string (string)
|
||||
"Strip \\\"s from around ruby string"
|
||||
|
@ -497,7 +497,7 @@ tabel
|
||||
|
||||
Another example is in the [[*operations%20in%20on%20tables][grades example]].
|
||||
|
||||
** PROPOSED add =:none= session argument (for purely functional execution) [0/4]
|
||||
** PROPOSED add =:none= session argument (for purely functional execution) [1/4]
|
||||
This would allow source blocks to be run in their own new process
|
||||
|
||||
- These blocks could then also be run in the background (since we can
|
||||
@ -519,15 +519,21 @@ Down-sides to sessions
|
||||
- can't run in background
|
||||
- litter emacs with session buffers
|
||||
|
||||
*** TODO ruby
|
||||
*** DONE ruby
|
||||
|
||||
#+srcname: ruby-task-no-session
|
||||
#+begin_src ruby :session none
|
||||
#+begin_src ruby :results replace value
|
||||
puts :eric
|
||||
puts :schulte
|
||||
[1, 2, 3]
|
||||
#+end_src
|
||||
|
||||
#+resname: ruby-task-no-session
|
||||
| 1 | 2 | 3 |
|
||||
|
||||
*** TODO R
|
||||
|
||||
|
||||
*** TODO python
|
||||
*** TODO sh
|
||||
** PROPOSED Are we happy with current behaviour regarding vector/scalar output?
|
||||
|
Loading…
Reference in New Issue
Block a user