emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [Orgmode] RE: [babel] evaluating shell commands for side effect


From: Sullivan, Gregory (US SSA)
Subject: RE: [Orgmode] RE: [babel] evaluating shell commands for side effect
Date: Wed, 25 Aug 2010 13:31:26 -0400

Perfect!  Thanks very much.

-- Greg

--
Greg Sullivan,   address@hidden
(781)262-4553 (desk),  (978)430-3461 (cell)


-----Original Message-----
From: Eric Schulte [mailto:address@hidden 
Sent: Wednesday, August 25, 2010 1:30 PM
To: Sullivan, Gregory (US SSA)
Cc: address@hidden
Subject: Re: [Orgmode] RE: [babel] evaluating shell commands for side effect

good question: code blocks in sessions *are evaluated* even if the
results of that particular block are not needed for export.  This is
because those code blocks could make changes to session state, changes
which could be required for other code blocks whose results will be
included in the final export.

You can do the following to inhibit evaluation of the code block.
#+begin_src sh :session *shell* :noeval
  date
#+end_src

which will silently inhibit the evaluation of the code block.  This
:noeval header is not currently document, but it should be.  I'm adding
this to the babel task list.

Thanks -- Eric

"Sullivan, Gregory (US SSA)" <address@hidden> writes:

> Another question related to using babel, shell commands, in a session:
>
> When I try to export a .org file with "begin_src sh :session *shell* :exports 
> code" blocks, I'm prompted whether I want to evaluate the code.  However, I 
> thought ":exports code" would avoid evaluation on export (and that :session 
> is only about evaluation).
>
> Any help appreciated.
> Thanks.
>
> -- Greg
>
> --
> Greg Sullivan,   address@hidden
> (781)262-4553 (desk),  (978)430-3461 (cell)
>
>
> -----Original Message-----
> From: address@hidden [mailto:address@hidden On Behalf Of Sullivan, Gregory 
> (US SSA)
> Sent: Thursday, August 19, 2010 12:51 PM
> To: address@hidden
> Subject: [Orgmode] [babel] evaluating shell commands for side effect
>
> I'm writing "how to" documents that include sequences of shell commands, such 
> as: 
>
> #+begin_src sh :session *shell*
>  cd /home/sullivan/myproj/src
>  ./configure --prefix /home/sullivan/myproj/install
>  make
>  make test
> #+end_src
>
> and simply want C-c C-c to send the lines, one at a time, to the inferior 
> shell process. That is, I want readers to read along, and then execute the 
> code as needed.
>
> Currently, it never returns (until C-g).  It might be related to the issues 
> discussed last November, 
>       http://lists.gnu.org/archive/html/emacs-orgmode/2009-11/msg01166.html
> I have the latest git version of org mode, and I think I've set 
> comint-prompt-regexp correctly.
>
> So: I don't want to filter the output, I don't want to collect the results - 
> just send the commands and go.
>
> Looking at ob-sh.el/org-babel-sh-evaluate, I can't figure out what the Right 
> Thing to do is.  Appended is a cheap hack that checks for "ignore" as a 
> results string (e.g. #+begin_src sh :session *shell* :results ignore) and 
> sends the lines one at a time to the inferior shell buffer.  But I suspect 
> there's a more straightforward way to do it.
>
> Thoughts?
> Thanks.
>
> -- Greg
>
> --
> Greg Sullivan,   address@hidden
> (781)262-4553 (desk),  (978)430-3461 (cell)
>
> --
>
> (defun org-babel-sh-evaluate (session body &optional result-params)
>   "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."
>   ((lambda (results)
>      (if (or (member "scalar" result-params)
>            (member "ignore" result-params)
>            (member "output" result-params))
>        results
>        (let ((tmp-file (make-temp-file "org-babel-sh")))
>        (with-temp-file tmp-file (insert results))
>        (org-babel-import-elisp-from-file tmp-file))))
>    (if (not session)
>        (org-babel-eval org-babel-sh-command (org-babel-trim body))
>      (if (member "ignore" result-params)
>        (progn
>          (save-excursion
>            (set-buffer session)
>            (mapc
>             (lambda (line)
>               (insert line) (comint-send-input nil t) (sleep-for 0.25))
>             (split-string (org-babel-trim body) "\n")))
>          '())
>
>      (let ((tmp-file (make-temp-file "org-babel-sh")))
>        (mapconcat
>       #'org-babel-sh-strip-weird-long-prompt
>       (mapcar
>        #'org-babel-trim
>        (butlast
>         (org-babel-comint-with-output
>             (session org-babel-sh-eoe-output t body)
>           (mapc
>            (lambda (line)
>              (insert line) (comint-send-input nil t) (sleep-for 0.25))
>            (append
>             (split-string (org-babel-trim body) "\n")
>             (list org-babel-sh-eoe-indicator))))
>         2)) "\n")))))
> )
>
> _______________________________________________
> Emacs-orgmode mailing list
> Please use `Reply All' to send replies to the list.
> address@hidden
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode
>
> _______________________________________________
> Emacs-orgmode mailing list
> Please use `Reply All' to send replies to the list.
> address@hidden
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode



reply via email to

[Prev in Thread] Current Thread [Next in Thread]