diff -r 312a2220100c Lib/venv/scripts/posix/activate.fish --- a/Lib/venv/scripts/posix/activate.fish Wed Nov 18 21:19:18 2015 -0800 +++ b/Lib/venv/scripts/posix/activate.fish Fri Nov 20 13:47:46 2015 -0500 @@ -15,10 +15,7 @@ if test -n "$_OLD_FISH_PROMPT_OVERRIDE" functions -e fish_prompt set -e _OLD_FISH_PROMPT_OVERRIDE - . ( begin - printf "function fish_prompt\n\t#" - functions _old_fish_prompt - end | psub ) + functions -c _old_fish_prompt fish_prompt functions -e _old_fish_prompt end @@ -47,27 +44,31 @@ # fish uses a function instead of an env var to generate the prompt. # save the current fish_prompt function as the function _old_fish_prompt - . ( begin - printf "function _old_fish_prompt\n\t#" - functions fish_prompt - end | psub ) + functions -c fish_prompt _old_fish_prompt # with the original prompt function renamed, we can override with our own. function fish_prompt + # Save the return status of the last command + set -l old_status $status + # Prompt override? - if test -n "__VENV_PROMPT__" - printf "%s%s%s" "__VENV_PROMPT__" (set_color normal) (_old_fish_prompt) - return + if test -n "__VENV_PROMPT__" + printf "%s%s" "__VENV_PROMPT__" (set_color normal) + else + # ...Otherwise, prepend env + set -l _checkbase (basename "$VIRTUAL_ENV") + if test $_checkbase = "__" + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + printf "%s[%s]%s " (set_color -b blue white) (basename (dirname "$VIRTUAL_ENV")) (set_color normal) + else + printf "%s(%s)%s" (set_color -b blue white) (basename "$VIRTUAL_ENV") (set_color normal) + end end - # ...Otherwise, prepend env - set -l _checkbase (basename "$VIRTUAL_ENV") - if test $_checkbase = "__" - # special case for Aspen magic directories - # see http://www.zetadev.com/software/aspen/ - printf "%s[%s]%s %s" (set_color -b blue white) (basename (dirname "$VIRTUAL_ENV")) (set_color normal) (_old_fish_prompt) - else - printf "%s(%s)%s%s" (set_color -b blue white) (basename "$VIRTUAL_ENV") (set_color normal) (_old_fish_prompt) - end + + # Restore the return status of the previous command. + echo "exit $old_status" | . + _old_fish_prompt end set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"