From 8d82559ca7cd50de45e1aff0b9f9851f4cb64019 Mon Sep 17 00:00:00 2001
From: Vinay Sajip <vinay_sajip@yahoo.co.uk>
Date: Sun, 11 Sep 2016 12:52:08 +0100
Subject: Fixes #25671: Updated prompt handling in activate.fish.

---
 Lib/venv/scripts/posix/activate.fish | 39 ++++++++++++++++++------------------
 1 file changed, 20 insertions(+), 19 deletions(-)

diff --git a/Lib/venv/scripts/posix/activate.fish b/Lib/venv/scripts/posix/activate.fish
index ca98466..4d4f0bd 100644
--- a/Lib/venv/scripts/posix/activate.fish
+++ b/Lib/venv/scripts/posix/activate.fish
@@ -15,10 +15,7 @@ function deactivate  -d "Exit virtualenv and return to normal shell environment"
     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 @@ if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
     # 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
-        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)
+        if test -n "__VENV_PROMPT__"            
+            printf "%s%s" "__VENV_PROMPT__" (set_color normal)
         else
-            printf "%s(%s)%s%s" (set_color -b blue white) (basename "$VIRTUAL_ENV") (set_color normal) (_old_fish_prompt)
+            # ...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
+
+        # Restore the return status of the previous command.
+        echo "exit $old_status" | .
+        _old_fish_prompt
     end
 
     set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
-- 
cgit v0.12