Last active
July 29, 2024 10:11
-
-
Save lessmost/380f2d16ebc67c71a0aadb9925736b47 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Based on https://gist.github.com/bastibe/c0950e463ffdfdfada7adf149ae77c6f | |
# Changes: | |
# * Instead of overriding cd, we detect directory change. This allows the script to work | |
# for other means of cd, such as z. | |
# * Update syntax to work with new versions of fish. | |
# * Handle virtualenvs that are not located in the root of a git directory. | |
function __auto_source_venv --on-variable PWD --on-event fish_prompt --description "Activate/Deactivate virtualenv on directory change" | |
status --is-command-substitution; and return | |
# Check if we are inside a git directory | |
if git rev-parse --show-toplevel &>/dev/null | |
set gitdir (realpath (git rev-parse --show-toplevel)) | |
set cwd (pwd) | |
# While we are still inside the git directory, find the closest | |
# virtualenv starting from the current directory. | |
while string match "$gitdir*" "$cwd" &>/dev/null | |
if test -n "$VIRTUAL_ENV" | |
set -e _OLD_FISH_PROMPT_OVERRIDE | |
set -e _OLD_VIRTUAL_PYTHONHOME | |
set -e _OLD_VIRTUAL_PATH | |
end | |
if test -e "$cwd/.venv/bin/activate.fish" | |
source "$cwd/.venv/bin/activate.fish" &>/dev/null | |
return | |
else if test -e "$cwd/venv/bin/activate.fish" | |
source "$cwd/venv/bin/activate.fish" &>/dev/null | |
return | |
else | |
set cwd (path dirname "$cwd") | |
end | |
end | |
end | |
# If virtualenv activated but we are not in a git directory, deactivate. | |
if test -n "$VIRTUAL_ENV" | |
deactivate | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment