961190678e
The variables are local now, which makes them being handled correctly when calling `autoenv_source_parent`. Without this, a call to `autoenv_source_parent` overwrites the values in the current scope. |
||
---|---|---|
lib | ||
tests | ||
.gitignore | ||
.travis.yml | ||
autoenv.plugin.zsh | ||
autoenv.zsh | ||
init.zsh | ||
Makefile | ||
README.md |
Autoenv for Zsh
zsh-autoenv automatically sources (known/whitelisted) .autoenv.zsh
files,
typically used in project root directories.
It handles "enter" and leave" events, nesting, and stashing of variables (overwriting and restoring).
Features
- Support for enter and leave events, which can use the same file.
By default
.autoenv.zsh
is used for entering, and.autoenv_leave.zsh
for leaving. - Interactively asks for confirmation / authentication before sourcing an
unknown
.autoenv.zsh
file, and remembers whitelisted files by their hashed content. - Test suite.
- Written in Zsh.
Variable stashing
You can use autostash
in your .autoenv.zsh
files to overwrite some
variable, e.g. $PATH
. When leaving the directory, it will be automatically
restored.
% echo 'echo ENTERED; autostash FOO=changed' > project/.autoenv.zsh
% FOO=orig
% cd project
Attempting to load unauthorized env file!
-rw-rw-r-- 1 user user 36 Mai 6 20:38 /tmp/project/.autoenv.zsh
**********************************************
echo ENTERED; autostash FOO=changed
**********************************************
Would you like to authorize it? (type 'yes') yes
ENTERED
project % echo $FOO
changed
% cd ..
% echo $FOO
orig
There is also stash
, unstash
and autounstash
, in case you want to
have more control.
The varstash library has been taken from smartcd, and was optimized for Zsh.
Writing your .autoenv.zsh file
autoenv_source_parent()
zsh-autoenv will stop looking for .autoenv.zsh
files after the first one has
been found. But you can use the function autoenv_source_parent
to source a
parent .autoenv.zsh
file from there.
Installation
Clone the repository and source it from your ~/.zshrc
file:
% git clone https://github.com/Tarrasch/zsh-autoenv ~/.dotfiles/lib/zsh-autoenv
% echo 'source ~/.dotfiles/lib/zsh-autoenv/autoenv.zsh' >> ~/.zshrc
Using antigen
antigen-bundle Tarrasch/zsh-autoenv
Using zgen
Add the following to your .zshrc
where you are loading your plugins:
zgen load Tarrasch/zsh-autoenv
Configuration
You can use the following variables to control zsh-autoenv's behavior.
Add them to your ~/.zshrc
file, before sourcing/loading zsh-autoenv.
AUTOENV_FILE_ENTER
Name of the file to look for when entering directories.
Default: .autoenv.zsh
AUTOENV_FILE_LEAVE
Name of the file to look for when leaving directories.
Requires AUTOENV_HANDLE_LEAVE=1
.
Default: .autoenv_leave.zsh
AUTOENV_LOOK_UPWARDS
Look for zsh-autoenv "enter" files in parent dirs?
Default: 1
AUTOENV_HANDLE_LEAVE
Handle leave events when changing away from a subtree, where an "enter" event was handled?
Default: 1
AUTOENV_DISABLED
(Temporarily) disable zsh-autoenv. This gets looked at in the chpwd handler.
Default: 0
AUTOENV_DEBUG
Enable debugging. Multiple levels are supported (max 2).
Default: 0
Related projects
History
This started as an optimized version of the bash plugin autoenv but for Zsh, and grew a lot of functionality on top of it (inspired by smartcd).
The code was initially based on @joshuaclayton's dotfiles. In September 2013 @Tarrasch packaged it into a nice antigen-compatible unit with integration tests. Since November 2014, @blueyed took over and added many many nice features, mainly inspired by smartcd.