From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Sullivan, Gregory (US SSA)" Subject: RE: RE: [babel] evaluating shell commands for side effect Date: Wed, 25 Aug 2010 13:31:26 -0400 Message-ID: References: <87wrrea9cc.fsf@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Return-path: Received: from [140.186.70.92] (port=50532 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OoJpI-0005sy-5v for emacs-orgmode@gnu.org; Wed, 25 Aug 2010 13:31:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OoJpG-00079O-Kr for emacs-orgmode@gnu.org; Wed, 25 Aug 2010 13:31:51 -0400 Received: from dmzms99902.na.baesystems.com ([149.32.200.66]:35017) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OoJpG-00079A-II for emacs-orgmode@gnu.org; Wed, 25 Aug 2010 13:31:50 -0400 In-Reply-To: <87wrrea9cc.fsf@gmail.com> Content-Language: en-US List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Eric Schulte Cc: "emacs-orgmode@gnu.org" Perfect! Thanks very much. -- Greg -- Greg Sullivan, gregory.sullivan@baesystems.com (781)262-4553 (desk), (978)430-3461 (cell) -----Original Message----- From: Eric Schulte [mailto:schulte.eric@gmail.com]=20 Sent: Wednesday, August 25, 2010 1:30 PM To: Sullivan, Gregory (US SSA) Cc: emacs-orgmode@gnu.org Subject: Re: [Orgmode] RE: [babel] evaluating shell commands for side effec= t 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)" 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* :exp= orts code" blocks, I'm prompted whether I want to evaluate the code. Howev= er, I thought ":exports code" would avoid evaluation on export (and that :s= ession is only about evaluation). > > Any help appreciated. > Thanks. > > -- Greg > > -- > Greg Sullivan, gregory.sullivan@baesystems.com > (781)262-4553 (desk), (978)430-3461 (cell) > > > -----Original Message----- > From: emacs-orgmode-bounces+gregory.sullivan=3Dbaesystems.com@gnu.org [ma= ilto:emacs-orgmode-bounces+gregory.sullivan=3Dbaesystems.com@gnu.org] On Be= half Of Sullivan, Gregory (US SSA) > Sent: Thursday, August 19, 2010 12:51 PM > To: emacs-orgmode@gnu.org > Subject: [Orgmode] [babel] evaluating shell commands for side effect > > I'm writing "how to" documents that include sequences of shell commands, = such as:=20 > > #+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 issu= es discussed last November,=20 > 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-pr= ompt-regexp correctly. > > So: I don't want to filter the output, I don't want to collect the result= s - just send the commands and go. > > Looking at ob-sh.el/org-babel-sh-evaluate, I can't figure out what the Ri= ght 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, gregory.sullivan@baesystems.com > (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. > Emacs-orgmode@gnu.org > http://lists.gnu.org/mailman/listinfo/emacs-orgmode > > _______________________________________________ > Emacs-orgmode mailing list > Please use `Reply All' to send replies to the list. > Emacs-orgmode@gnu.org > http://lists.gnu.org/mailman/listinfo/emacs-orgmode