From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Eric Schulte" Subject: Re: [babel] evaluating shell commands for side effect Date: Wed, 25 Aug 2010 11:24:03 -0600 Message-ID: <871v9mbo7g.fsf@gmail.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from [140.186.70.92] (port=36779 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OoJhq-0002p5-7f for emacs-orgmode@gnu.org; Wed, 25 Aug 2010 13:24:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OoJho-0005oe-Qg for emacs-orgmode@gnu.org; Wed, 25 Aug 2010 13:24:10 -0400 Received: from mail-pv0-f169.google.com ([74.125.83.169]:44907) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OoJho-0005oV-Fc for emacs-orgmode@gnu.org; Wed, 25 Aug 2010 13:24:08 -0400 Received: by pvc30 with SMTP id 30so565321pvc.0 for ; Wed, 25 Aug 2010 10:24:07 -0700 (PDT) In-Reply-To: (Gregory Sullivan's message of "Thu, 19 Aug 2010 12:51:18 -0400") 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: "Sullivan, Gregory (US SSA)" Cc: "emacs-orgmode@gnu.org" Hi Gregory, "Sullivan, Gregory (US SSA)" writes: > 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. > I'm not sure why this is hanging when a session is used. Could you remove the session argument? If so then it should execute fine, the following works for me (but the same block fails to complete with a session argument) --8<---------------cut here---------------start------------->8--- #+begin_src sh :results silent cd ~/src/org/ make #+end_src --8<---------------cut here---------------end--------------->8--- > > 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. > I believe you're right, I've added this as a bug, and I hope to look into it soon. > > So: I don't want to filter the output, I don't want to collect the >results - just send the commands and go. > Using the ":results silent" argument as shown in the above code block. See http://orgmode.org/manual/results.html#results > > 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. > We can't simply send the results and go, as there is still the more common case where the results of the shell evaluation are required. I think the issue here is that for some reason the shell session is not inserting results into the session buffer, and that's where the fix should lie. Thanks -- Eric > > 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