#!/bin/zsh # relative history relative_histfile() { searchdir="$(readlink -f $PWD)"; # default values if [ -z "$HISTDIR" ]; then HISTDIR="$HOME/.histfiles/"; fi if [ -z "$HISTFILE_DEFAULT" ]; then HISTFILE_DEFAULT="$HOME/.histfile" fi; # find first histfile starting from pwd up to / while true; do histtarget="${HISTDIR}/${searchdir//\//%}" if [ -e "$histtarget" ] || [ "$searchdir" = "/" ]; then break; fi; searchdir="$(readlink -f "$searchdir/..")"; done; # load relative history or default one if [ "$searchdir" = "/" ]; then if [ "$HISTFILE" != "$HISTFILE_DEFAULT" ]; then echo "> load default history"; fc -Pp "$HISTFILE_DEFAULT"; fi; else echo "> load history for $searchdir"; fc -Pp "$histtarget"; fi; } chpwd_functions+=(relative_histfile); relative_histfile;