From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Schulte Subject: Re: [babel] [PATCH] Fix sh block execution in session Date: Mon, 06 Jun 2011 07:17:51 -0600 Message-ID: <87zklv9k00.fsf@gmail.com> References: <87pqmsux0e.fsf@gmail.com> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([140.186.70.92]:54630) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QTZh5-0001ti-Ac for emacs-orgmode@gnu.org; Mon, 06 Jun 2011 09:18:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QTZh0-0005hO-3r for emacs-orgmode@gnu.org; Mon, 06 Jun 2011 09:18:11 -0400 Received: from mail-yx0-f169.google.com ([209.85.213.169]:41011) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QTZgz-0005hD-Nc for emacs-orgmode@gnu.org; Mon, 06 Jun 2011 09:18:05 -0400 Received: by yxn22 with SMTP id 22so1303587yxn.0 for ; Mon, 06 Jun 2011 06:18:05 -0700 (PDT) List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: julien Barnier Cc: emacs-orgmode@gnu.org Hi julien, julien Barnier writes: > Hi Eric, > >> 1. do you have a minimal example of a shell code block which works after >> your patch but not before? > > Well, in fact it seems that almost any shell block cause problems when > executed in a session. This one, for example : > > #+begin_src sh :session test :results output > echo "foo" > #+end_src > Ah, I see, thanks. > >> 2. I assume that the changes to ob-comit were required for your ob-sh >> changes to work and were not intended to affect other languages? > > Yes, I would have preferred no to touch to ob-comint, but it seems that I was > forced too. > > The changes to ob-sh have only one aim : to be sure that the commands in the > shell block are send one at a time, and that we wait for the previous command > to be completed before sending the following one. The current org-sh code only > uses a "(sleep-for 0.25)" delay, which is not always sufficient. > > The changes to ob-comint modify the way the end of activity indicator is > looking for. The current code is : > > #+begin_src emacs-lisp > (goto-char comint-last-input-end) > (not (save-excursion > (and (re-search-forward > comint-prompt-regexp nil t) > (re-search-forward > (regexp-quote ,eoe-indicator) nil t)))) > #+end_src > > From my initial sh code block, the execution ended with this : > > #+begin_example > julien@L018198:~/org/perso$ echo "foo" > foo > julien@L018198:~/org/perso$ echo 'org_babel_sh_eoe' > org_babel_sh_eoe > julien@L018198:~/org/perso$ > #+end_example > > With the current code, the "(goto-char comint-last-input-end)" would put the > point at the beginning of the "org_babel_sh_eoe" line. Then, the > "(re-search-forward comint-prompt-regexp nil t)" would put the point after the > $ on the last line. So the following "(re-search-forward (regexp-quote > ,eoe-indicator) nil t)" will never find anything, as the eoe-indicator is now > behind the point. > I see, thanks for clearing this up. Knowing the reason behind this change I'm inclined to commit your patch (which I've just done). If anyone runs into problems hopefully we'll hear about them on list and can handle them as they arise. > > That's why I feel that the two searches must be switched. > >> 3. When switching the order of the prompt and eoe check in ob-comint, >> did you try *only* looking for the eoe indicator? It seems to me >> that once that is present the check for a followup prompt may not be >> required and it may make sense to simply remove that code. > > It seems to work if you omit the prompt check (at least for shell blocks), but > this prompt check could be useful, as it ensures that the interpreter is ready > to get another command, and as it places the point at the right place for > that. Moving the cursor forward does seem to be a worthwhile reason to retain this prompt search. > But I'm not sure this check is necessary. > > This change doesn't seem to affect evaluation on R source blocks. I've tried > to test it with ruby, I've tested this patch with ruby sessions and it does work. > but session evaluation seems broken for this language ? > You are probably missing some of the requirements for interactive ruby evaluation (inf-ruby or somesuch). > > > #+begin_src R :results output :session rtest > y <- 2 > for (i in 1:100000) i > y > #+end_src > >> All in all I agree that the ob-sh changes look like an improvement and >> should be applied. I'm less sure of the changes to ob-comint, simply >> because I don't understand the mechanism through which swappineg the >> regexp checks changes behavior. However if the ob-sh changes depend >> upon the ob-comint changes there is no point in applying them piecemeal. > > Well, I can't assure you that the change in ob-comint won't affect any other > language, but I can assure you that the change in ob-sh is dependant from the > one in ob-comint. > > Thanks a lot for your answer, and I'm available for any other question or > testing request. > Thanks for the patch Julien. I've just pushed it up to the core (this is the development version after all, so we're allowed to take risks). Best -- Eric > > Sincerely, > > Julien -- Eric Schulte http://cs.unm.edu/~eschulte/