mirror of
https://github.com/python/cpython.git
synced 2025-07-24 03:35:53 +00:00

pythongh-112571: allow using fish venv activation script on windows The fish shell can be used on windows under cygwin or msys2. This change moves the script to the common folder so the venv module will install it on both posix and nt systems (like the bash script).
69 lines
2.2 KiB
Fish
69 lines
2.2 KiB
Fish
# This file must be used with "source <venv>/bin/activate.fish" *from fish*
|
|
# (https://fishshell.com/). You cannot run it directly.
|
|
|
|
function deactivate -d "Exit virtual environment and return to normal shell environment"
|
|
# reset old environment variables
|
|
if test -n "$_OLD_VIRTUAL_PATH"
|
|
set -gx PATH $_OLD_VIRTUAL_PATH
|
|
set -e _OLD_VIRTUAL_PATH
|
|
end
|
|
if test -n "$_OLD_VIRTUAL_PYTHONHOME"
|
|
set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME
|
|
set -e _OLD_VIRTUAL_PYTHONHOME
|
|
end
|
|
|
|
if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
|
|
set -e _OLD_FISH_PROMPT_OVERRIDE
|
|
# prevents error when using nested fish instances (Issue #93858)
|
|
if functions -q _old_fish_prompt
|
|
functions -e fish_prompt
|
|
functions -c _old_fish_prompt fish_prompt
|
|
functions -e _old_fish_prompt
|
|
end
|
|
end
|
|
|
|
set -e VIRTUAL_ENV
|
|
set -e VIRTUAL_ENV_PROMPT
|
|
if test "$argv[1]" != "nondestructive"
|
|
# Self-destruct!
|
|
functions -e deactivate
|
|
end
|
|
end
|
|
|
|
# Unset irrelevant variables.
|
|
deactivate nondestructive
|
|
|
|
set -gx VIRTUAL_ENV "__VENV_DIR__"
|
|
|
|
set -gx _OLD_VIRTUAL_PATH $PATH
|
|
set -gx PATH "$VIRTUAL_ENV/__VENV_BIN_NAME__" $PATH
|
|
set -gx VIRTUAL_ENV_PROMPT "__VENV_PROMPT__"
|
|
|
|
# Unset PYTHONHOME if set.
|
|
if set -q PYTHONHOME
|
|
set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
|
|
set -e PYTHONHOME
|
|
end
|
|
|
|
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.
|
|
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
|
|
|
|
# Output the venv prompt; color taken from the blue of the Python logo.
|
|
printf "%s(%s)%s " (set_color 4B8BBE) "__VENV_PROMPT__" (set_color normal)
|
|
|
|
# Restore the return status of the previous command.
|
|
echo "exit $old_status" | .
|
|
# Output the original/"old" prompt.
|
|
_old_fish_prompt
|
|
end
|
|
|
|
set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
|
|
end
|