Browse Source

*** DONE function to bring up inferior-process buffer [4/4]

Eric Schulte 16 years ago
parent
commit
a85cadced8
3 changed files with 37 additions and 37 deletions
  1. 33 32
      lisp/langs/org-babel-sh.el
  2. 1 1
      lisp/org-babel-init.el
  3. 3 4
      org-babel.org

+ 33 - 32
lisp/langs/org-babel-sh.el

@@ -1,4 +1,4 @@
-;;; org-babel-shell.el --- org-babel functions for shell evaluation
+;;; org-babel-sh.el --- org-babel functions for shell evaluation
 
 ;; Copyright (C) 2009 Eric Schulte
 
@@ -48,10 +48,10 @@ function is called by `org-babel-execute-src-block'."
                       (lambda (pair)
                         (format "%s=%s"
                                 (car pair)
-                                (org-babel-shell-var-to-shell (cdr pair))))
+                                (org-babel-sh-var-to-sh (cdr pair))))
                       vars "\n") "\n" body "\n\n")) ;; then the source block body
-         (session (org-babel-shell-initiate-session (cdr (assoc :session params))))
-         (results (org-babel-shell-evaluate session full-body result-type)))
+         (session (org-babel-sh-initiate-session (cdr (assoc :session params))))
+         (results (org-babel-sh-evaluate session full-body result-type)))
     (if (member "scalar" result-params)
         results
       (setq results (let ((tmp-file (make-temp-file "org-babel-ruby")))
@@ -63,13 +63,13 @@ function is called by `org-babel-execute-src-block'."
 
 (defun org-babel-prep-session:sh (session params)
   "Prepare SESSION according to the header arguments specified in PARAMS."
-  (let* ((session (org-babel-shell-initiate-session session))
+  (let* ((session (org-babel-sh-initiate-session session))
          (vars (org-babel-ref-variables params))
          (var-lines (mapcar ;; define any variables
                      (lambda (pair)
                        (format "%s=%s"
                                (car pair)
-                               (org-babel-shell-var-to-shell (cdr pair))))
+                               (org-babel-sh-var-to-sh (cdr pair))))
                      vars)))
     (org-babel-comint-in-buffer session
       (mapc (lambda (var)
@@ -78,14 +78,14 @@ function is called by `org-babel-execute-src-block'."
 
 ;; helper functions
 
-(defun org-babel-shell-var-to-shell (var)
+(defun org-babel-sh-var-to-sh (var)
   "Convert an elisp var into a string of shell commands
 specifying a var of the same value."
   (if (listp var)
-      (concat "[" (mapconcat #'org-babel-shell-var-to-shell var ", ") "]")
+      (concat "[" (mapconcat #'org-babel-sh-var-to-sh var ", ") "]")
     (format "%S" var)))
 
-(defun org-babel-shell-table-or-results (results)
+(defun org-babel-sh-table-or-results (results)
   "If the results look like a table, then convert them into an
 Emacs-lisp table, otherwise return the results as a string."
   (org-babel-read
@@ -98,45 +98,46 @@ Emacs-lisp table, otherwise return the results as a string."
                                          "'" "\"" results)))))
      results)))
 
-(defvar org-babel-shell-buffers '(:default . nil))
+(defvar org-babel-sh-buffers '(:default . nil))
 
-(defun org-babel-shell-session-buffer (session)
-  (cdr (assoc session org-babel-shell-buffers)))
+(defun org-babel-sh-session-buffer (session)
+  (cdr (assoc session org-babel-sh-buffers)))
 
-(defun org-babel-shell-initiate-session-by-key (&optional session)
+(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))
-           (shell-buffer (org-babel-shell-session-buffer session))
-           (newp (not (org-babel-comint-buffer-livep shell-buffer))))
-      (message "initiating shell buffer %S" shell-buffer)
-      (shell shell-buffer)
+           (sh-buffer (org-babel-sh-session-buffer session))
+           (newp (not (org-babel-comint-buffer-livep sh-buffer))))
+      (if (and (get-buffer sh-buffer) (not (buffer-live-p sh-buffer)))
+          (setq sh-buffer nil))
+      (shell sh-buffer)
       (when newp
-        (setq shell-buffer (current-buffer))
-        (org-babel-comint-wait-for-output shell-buffer))
-      (setq org-babel-shell-buffers (cons (cons session shell-buffer) (assq-delete-all session org-babel-shell-buffers)))
+        (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-python-shell-initiate-session (&optional session)
-  (org-babel-shell-session-buffer (org-babel-shell-initiate-session-by-key session)))
+(defun org-babel-sh-initiate-session (&optional session)
+  (org-babel-sh-session-buffer (org-babel-sh-initiate-session-by-key session)))
 
-(defvar org-babel-shell-eoe-indicator "echo 'org_babel_shell_eoe'"
+(defvar org-babel-sh-eoe-indicator "echo 'org_babel_sh_eoe'"
   "Used to indicate that evaluation is has completed.")
-(defvar org-babel-shell-eoe-output "org_babel_shell_eoe"
+(defvar org-babel-sh-eoe-output "org_babel_sh_eoe"
   "Used to indicate that evaluation is has completed.")
 
-(defun org-babel-shell-evaluate (buffer body &optional result-type)
+(defun org-babel-sh-evaluate (buffer 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
 last statement in BODY."
   (let* ((full-body (mapconcat #'org-babel-chomp
-                               (list body org-babel-shell-eoe-indicator) "\n"))
-         (raw (org-babel-comint-with-output buffer org-babel-shell-eoe-output nil
+                               (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-shell-eoe-output
-                                    (reverse (mapcar #'org-babel-shell-strip-weird-long-prompt
+         (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
@@ -144,10 +145,10 @@ last statement in BODY."
           (value (car results))
           (t (reverse results))) "")))
 
-(defun org-babel-shell-strip-weird-long-prompt (string)
+(defun org-babel-sh-strip-weird-long-prompt (string)
   (while (string-match "^% +[\r\n$]+ *" string)
     (setq string (substring string (match-end 0))))
   string)
 
-(provide 'org-babel-shell)
-;;; org-babel-shell.el ends here
+(provide 'org-babel-sh)
+;;; org-babel-sh.el ends here

+ 1 - 1
lisp/org-babel-init.el

@@ -42,7 +42,7 @@
 (add-to-list 'load-path (expand-file-name "langs" (file-name-directory (or load-file-name buffer-file-name))))
 (require 'org-babel-ruby)
 (require 'org-babel-python)
-(require 'org-babel-shell)
+(require 'org-babel-sh)
 (require 'org-babel-lisp)
 (require 'org-babel-R)
 

+ 3 - 4
org-babel.org

@@ -122,7 +122,7 @@ and the results to be collected in the same table.
    At the same time I introduced org-babel-named-src-block-regexp, to
    match src-blocks with srcname.
 
-** TODO Create objects in top level (global) environment [3/9]
+** TODO Create objects in top level (global) environment [4/5]
 *sessions*
 
 *** initial requirement statement [DED]
@@ -664,7 +664,7 @@ a + b
 a + b
 #+end_src
 
-*** TODO function to bring up inferior-process buffer [3/4]
+*** DONE function to bring up inferior-process buffer [4/4]
 
 This should be callable from inside of a source-code block in an
 org-mode buffer.  It should evaluate the header arguments, then bring
@@ -693,14 +693,13 @@ another * num
 a * b
 #+end_src
 
-**** TODO shell
+**** DONE shell
 
 #+srcname: task-shell-pop-sessions
 #+begin_src sh :var NAME="eric"
 echo $NAME
 #+end_src
 
-
 *** TODO function to dump last N lines from inf-proc buffer into the current source block
 
 Callable with a prefix argument to specify how many lines should be