About once a year or so, I go through my dotfiles and do some clean up. Usually around spring time, but also, usually after I discover some new hotness that I had not known about that I want to leverage.
This year, it’s both. Spring is nearly in the air, and I’ve been wanting to port my stuff to use GNU stow
as well as take advantage of zsh
hooks.
My interest in zsh
hooks is because of a little trick that I implemented years ago, to automatically display the contents of a directory with ls
after changing into the directory, using cd
.
The route I took initially, which does work in both bash
and zsh
and probably other shells, is to create a function that replaces cd
that runs both cd
and ls
as such:
# `ls` after `cd`
function cd {
builtin cd "$@" && ls
}
ZshMy recent discovery of zsh
hooks got me excited enough to rethink my previous solution. The hooks work more like a side effect instead of munging with the original command.
The same solution using the zsh
hook that gets executed after the you change a directory looks like this:
autoload -U add-zsh-hook
ls_after_cd() {
ls
}
add-zsh-hook chpwd ls_after_cd
ZshDefinitely a bit wordier, but I’d argue that this is “the Z shell way” to go about this. Obviously, this wouldn’t work in other shells and is zsh
specific.
In all honesty, I wasn’t very happy with the syntax and also came to realize that neither my original solution nor the zsh
hook solution allowed me the option to run cd
without running ls
.
This got me to ask myself “self, why did you opt to write a function instead of creating a new alias?”
Well I went ahead and tried that, and turns out, it didn’t quite work the way I expected it to.
Interestingly enough, it would seemingly change to the directory, would list the contents of the destination directory, but then I would still be in the same directory that I had started with.
Figuring out how to create an alias for this would have been nice, but I didn’t want to spend all day trying to figure it out, as I still had more spring cleaning to do for my dotfiles
!