8d38feea |
VIRTUAL_ENV_DISABLE_PROMPT='1'
__prompt_venv_rel()
{
__prompt_venv_rel_dir="$PWD"
__prompt_venv_rel_up=''
while [ "${1#$__prompt_venv_rel_dir/}" = "$1" ]
do
__prompt_venv_rel_dir="${__prompt_venv_rel_dir%/*}"
__prompt_venv_rel_up="../$__prompt_venv_rel_up"
done
printf '%s' "$__prompt_venv_rel_up${1#$__prompt_venv_rel_dir/}"
}
__prompt_venv()
{
if [ "${VIRTUAL_ENV:-}" ]
then
printf "$1" "$(__prompt_venv_rel "$VIRTUAL_ENV")"
fi
}
# Ask to activate the first virtual environment found, searching from the
# current directory up to `$HOME` or `/`, whichever comes first.
# https://github.com/python/cpython/blob/master/Lib/venv/scripts/common/activate
__prompt_venv_activate()
{
if [ "${VIRTUAL_ENV:-}" ]
then
deactivate
fi
__prompt_venv_dir="$PWD"
while
[ "$__prompt_venv_dir" != "$HOME" ] &&
[ "$__prompt_venv_dir" != '' ]
do
for __prompt_venv_activate in \
"$__prompt_venv_dir/"*'/bin/activate' \
"$__prompt_venv_dir/."*'/bin/activate'
do
[ -r "$__prompt_venv_activate" ] || continue
grep -q 'VIRTUAL_ENV' "$__prompt_venv_activate" || continue
__prompt_venv="${__prompt_venv_activate%/*/*}"
if [ "$__prompt_venv" != "$__prompt_venv_prev" ]
then
while true
do
printf 'Activate %s? [y/N] ' "$(__prompt_venv_rel "$__prompt_venv")"
read -r __prompt_venv_reply
case "$__prompt_venv_reply" in
'y'|'n'|'') break; ;;
esac
done
fi
case "$__prompt_venv_reply" in
'y') . "$__prompt_venv_activate"; ;;
esac
__prompt_venv_prev="$__prompt_venv"
return 0
done
__prompt_venv_dir="${__prompt_venv_dir%/*}"
done
}
|