Closed mafrosis closed 7 months ago
Thanks.
What is your use case? Doesn't e.g. cd .
work for you to reload a env file?
See https://bitheap.org/cram/ for Cram.
cd .
works for other autoenv-like tools - but not here as the current directory stored in the stack.
@mafrosis It should however reload the env file, if you changed it. I still don't see why you need to manually trigger it.
Since the content of the sourced .autoenv.sh
can be anything you like, there's all kinds of use cases.
My specific file contains this:
export DOCKER_MACHINE_NAME=example
eval $(docker-machine env ${DOCKER_MACHINE_NAME})
echo "Using docker-machine ${DOCKER_MACHINE_NAME} ($(docker-machine ip ${DOCKER_MACHINE_NAME}))"
If the docker-machine isn't running when I cd into the directory, the script fails. I start the docker-machine, and then I need to cd out and back in to trigger the script (or type source .autoenv.sh
)
So the problem here really is that an .autoenv.zsh
file gets not re-sourced when it is in the stack already, right? (Already in stack: /home/user/.autoenv.zsh
)
Just noticed this with the following in ~/.autoenv.zsh
, which was meant to be triggered on every directory change:
# Environment file for all projects.
# - (de)activates Python virtualenvs (.venv) from pipenv
if [[ $autoenv_event == 'enter' ]]; then
autoenv_source_parent
if [[ -z "$VIRTUAL_ENV" ]]; then
venv=(./(../)#.venv(NY1:A))
if (( $#venv )); then
echo "Activating virtualenv: $venv" >&2
source $venv[1]/bin/activate
_ZSH_ACTIVATED_VIRTUALENV=$VIRTUAL_ENV
fi
fi
else
if [[ -n "$_ZSH_ACTIVATED_VIRTUALENV" ]] && \
[[ "$_ZSH_ACTIVATED_VIRTUALENV" == "$VIRTUAL_ENV" ]]; then
echo "De-activating virtualenv: $VIRTUAL_ENV" >&2
deactivate
unset _ZSH_ACTIVATED_VIRTUALENV
fi
fi
I think we could set a flag from the .autoenv.zsh
file to re-source it on every directory change for that use case.. but then it's also possible to add (and remove) a custom chpwd
hook:
# Environment file for all projects.
# - (de)activates Python virtualenvs (.venv) from pipenv
if [[ $autoenv_event == 'enter' ]]; then
autoenv_source_parent
_my_autoenv_venv_chpwd() {
if [[ -z "$_ZSH_ACTIVATED_VIRTUALENV" && -n "$VIRTUAL_ENV" ]]; then
return
fi
local -a venv
venv=(./(../)#.venv(NY1:A))
if [[ -n "$_ZSH_ACTIVATED_VIRTUALENV" ]]; then
if ! (( $#venv )) || [[ "$_ZSH_ACTIVATED_VIRTUALENV" != "$venv[1]" ]]; then
echo "De-activating virtualenv: $VIRTUAL_ENV" >&2
deactivate
unset _ZSH_ACTIVATED_VIRTUALENV
fi
fi
if [[ -z "$VIRTUAL_ENV" ]]; then
if (( $#venv )); then
echo "Activating virtualenv: $venv" >&2
source $venv[1]/bin/activate
_ZSH_ACTIVATED_VIRTUALENV="$venv[1]"
fi
fi
}
autoload -U add-zsh-hook
add-zsh-hook chpwd _my_autoenv_venv_chpwd
_my_autoenv_venv_chpwd
else
add-zsh-hook -d chpwd _my_autoenv_venv_chpwd
fi
(added to README in https://github.com/Tarrasch/zsh-autoenv/pull/58)
I think your PR makes sense, and will merge it after you or me has added a test for it.
@mafrosis ping. (just visitied this repo again myself)
I'm no longer using zsh-autoenv
. Please do with this as you will!
A small patch to add an
autoenv
shell command which triggers_autoenv_chpwd_handler
. I had to add a variable to that function to ignore that we have already entered the directory where it's triggered.I took a look at the tests, but I couldn't see how to run them. What is
cram
?