#!/bin/sh

cd() {
    __docapn "$FUNCNAME" "$@"
}

pushd() {
    __docapn "$FUNCNAME" "$@"
}

popd() {
    __docapn "$FUNCNAME" "$@"
}

__docapn() {
    local old=$PWD
    # call the original builtin with original arguments
    builtin "$1" "${@:2}"
    eval "$(__capn exit "$old" "$PWD")"
    eval "$(__capn enter "$old" "$PWD")"
}

unhook() {
    unset cd
    unset pushd
    unset popd
    unset __docapn
    unset unhook
}
