emacs-orgmode
[Top][All Lists]
Advanced

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

[Orgmode] Re: [babel] Executing sh-code


From: Sébastien Vauban
Subject: [Orgmode] Re: [babel] Executing sh-code
Date: Sun, 29 Nov 2009 22:03:50 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (gnu/linux)

Hi Eric and Dan,

Dan Davison wrote:
> Sébastien Vauban <address@hidden> writes:
>> Torsten Wagner wrote:
>>> This works for me (I changed the folder name). There is a error line in my
>>> message buffer:
>>>
>>> executing Shell source code block
>>> ~/babel 
>>> save-current-buffer: Wrong type argument: char-or-string-p, nil
>>>
>>> but the relevent part runs ok. My shell buffer depict to the new folder
>>> after execution:
>>>
>>> address@hidden ~ % 
>>> cd ~/babel
>>> echo 'org_babel_sh_eoe'
>>> address@hidden ~ % cd ~/babel
>>> address@hidden ~/babel (git)-[master] %
>
>> It stops working only when I add `:session "whatever"' after the `sh'
>> specification.
>>
>> That's the only difference between when it works and when it doesn't.
>
> You discovered a tricky bug in the session-based evaluation of shell blocks.

Just for my information (maybe being able to be more accurate next time, or
even finding a solution myself), how do you debug such a problem?

With which debugger, with tracing/stepping?  With stack trace?


> I've just pushed up a fix which fixes this bug and generally cleans up the
> code executing sh blocks inside of interactive sessions. Please try the
> latest and see if the problem persists.

Just did: git pull && make clean && make.


> I'm also seeing problems with shell session evaluation but having
> trouble debugging. My current suspicion is that the prompt characters
> are the problem here (something which differs between you and Torsten)
> Could you try using a prompt that ends in '% '? E.g. on ubuntu at least
> I can set the prompt in emacs shell sessions with a line like
>
> PS1='\w % '
>
> in ~/.emacs_bash.

I did this in my .bashrc:

--8<---------------cut here---------------start------------->8---
# my format of the prompt
function my_prompt_command ()
{
    # colorful prompt, based on whether the previous command succeeded or not
    if [[ $? -eq 0 ]]; then
        HILIT=${GREEN}
    else
        HILIT=${RED}
    fi

    # replace the $HOME prefix by ~ in the current directory
    if [[ $HOME == ${PWD:0:${#HOME}} ]]; then
        NEWPWD="~${PWD:${#HOME}}"
    else
        NEWPWD=$PWD
    fi

    # how many characters of the $PWD should be kept
    local pwd_max_length=15

    if [[ ${#NEWPWD} -gt $pwd_max_length ]]; then
        local pwd_offset=$(( ${#NEWPWD} - $pwd_max_length ))
        NEWPWD="...${NEWPWD:$pwd_offset:$pwd_max_length}"
    fi

    # prompt character
    if [[ $(whoami) = "root" ]]; then
        local PROMPTCHAR="#"
    else
        local PROMPTCHAR=">"
    fi

    case $TERM in
        # TODO use `date' instead of escape characters...
        dumb)
            # Emacs shell mode and Tramp among others
            setenv PS1 "address@hidden ${NEWPWD}${PROMPTCHAR}"
            ;;
        emacs | *)
            # Emacs is handled in the same way as other terminals, if it's
            # configured to use `ansi-color' to translate ANSI escape
            # sequences into colored faces
            setenv PS1 "\w % "  ;; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
            ;;
    esac
}
--8<---------------cut here---------------end--------------->8---


> Also, please pull latest git as we have just fixed an unrelated bug in
> shell session-based evaluation.

Now, with the new version and the prompt change, what's the result?

Let's assume the following Org file:

--8<---------------cut here---------------start------------->8---
#+begin_src sh :session "ecm"
cd ~/Personal
#+end_src

#+begin_src sh :session "ecm"
ls *.org
#+end_src
--8<---------------cut here---------------end--------------->8---

I C-c C-c the first snippet. Nothing special, except it doesn't hang anymore.
So, it already looks much better.

Second snippet. C-c C-c. There, it still hangs ;-((

Though, C-x C-b shows me the contents of the "ecm" buffer:

--8<---------------cut here---------------start------------->8---
cd ~/Personal

~ % ~/Personal % ls *.org
echo 'org_babel_sh_eoe'
Bookmarks.org  Scorpios.org    Tickler.org                          
Voice-over-IP.org*
Home.org*      Succession.org  Using-startx-for-Remote-Display.org  refile.org
~/Personal % org_babel_sh_eoe
~/Personal % 
--8<---------------cut here---------------end--------------->8---

Looks closer to what it should...

Still a little problem, though, as explained above.

BTW, what's the impact of specifying "sh" or "bash" for the snippet?

Best regards,
  Seb

-- 
Sébastien Vauban





reply via email to

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