1# This file must be used with "source <venv>/bin/activate.fish" *from fish*
2# (https://fishshell.com/); you cannot run it directly.
3
4function deactivate  -d "Exit virtual environment and return to normal shell environment"
5    # reset old environment variables
6    if test -n "$_OLD_VIRTUAL_PATH"
7        set -gx PATH $_OLD_VIRTUAL_PATH
8        set -e _OLD_VIRTUAL_PATH
9    end
10    if test -n "$_OLD_VIRTUAL_PYTHONHOME"
11        set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME
12        set -e _OLD_VIRTUAL_PYTHONHOME
13    end
14
15    if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
16        set -e _OLD_FISH_PROMPT_OVERRIDE
17        # prevents error when using nested fish instances (Issue #93858)
18        if functions -q _old_fish_prompt
19            functions -e fish_prompt
20            functions -c _old_fish_prompt fish_prompt
21            functions -e _old_fish_prompt
22        end
23    end
24
25    set -e VIRTUAL_ENV
26    set -e VIRTUAL_ENV_PROMPT
27    if test "$argv[1]" != "nondestructive"
28        # Self-destruct!
29        functions -e deactivate
30    end
31end
32
33# Unset irrelevant variables.
34deactivate nondestructive
35
36set -gx VIRTUAL_ENV "__VENV_DIR__"
37
38set -gx _OLD_VIRTUAL_PATH $PATH
39set -gx PATH "$VIRTUAL_ENV/__VENV_BIN_NAME__" $PATH
40
41# Unset PYTHONHOME if set.
42if set -q PYTHONHOME
43    set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
44    set -e PYTHONHOME
45end
46
47if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
48    # fish uses a function instead of an env var to generate the prompt.
49
50    # Save the current fish_prompt function as the function _old_fish_prompt.
51    functions -c fish_prompt _old_fish_prompt
52
53    # With the original prompt function renamed, we can override with our own.
54    function fish_prompt
55        # Save the return status of the last command.
56        set -l old_status $status
57
58        # Output the venv prompt; color taken from the blue of the Python logo.
59        printf "%s%s%s" (set_color 4B8BBE) "__VENV_PROMPT__" (set_color normal)
60
61        # Restore the return status of the previous command.
62        echo "exit $old_status" | .
63        # Output the original/"old" prompt.
64        _old_fish_prompt
65    end
66
67    set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
68    set -gx VIRTUAL_ENV_PROMPT "__VENV_PROMPT__"
69end
70