don't ignore your own plugin

This commit is contained in:
Daylin Morgan 2023-02-20 12:55:32 -06:00
parent 4a72ea26b4
commit 95f20a9ae3
2 changed files with 103 additions and 1 deletions

1
.gitignore vendored
View file

@ -158,5 +158,4 @@ cython_debug/
# End of https://www.toptal.com/developers/gitignore/api/python # End of https://www.toptal.com/developers/gitignore/api/python
.task.mk .task.mk
plugins/

View file

@ -0,0 +1,103 @@
function source-zshcmdd {
setopt extended_glob
# glob search for the zshcmd.d dir
local -a zshcmdd=()
[[ -n "$ZSHCMDD" ]] && zshcmdd+=($ZSHCMDD(N))
[[ -n "$ZDOTDIR" ]] && zshcmdd+=(
$ZDOTDIR/exists.d/cmd(N)
)
zshcmdd+=(${ZDOTDIR:-$HOME}/zexists.d/cmd(N))
if ! (( $#zshcmdd )); then
echo >&2 "zexists: dir not found '${ZSHCMDD:-${ZDOTDIR:-$HOME}/zexists.d/cmd}'"
return 1
fi
local -a conf_files=("$zshcmdd[1]"/*.{sh,zsh}(N))
local rcfile
local antircfile
# sort and source conf files
for rcfile in ${(o)conf_files}; do
# ignore files that begin with a tilde and antircfiles
case ${rcfile:t} in 'anti'*|'~'*) continue;; esac
# source files only if exe with that name exists
if (( ! $+commands[{rcfile:t:r}] )); then
source "$rcfile"
else
# if it doesn't exist try the anti version
antircfile=${rcfile:h}/anti-${rcfile:t}
[ -f $antircfile ] && source $antircfile
fi
done
}
source-zshcmdd
function zshdir-decode {
# echo ${${1//--DOLLAR--/$}//--SLASH--/\/} | envsubst
# for now just remove the 'dir' part
# :3 for 'dir'
echo ${${1//-DOLLAR-/$}//-SLASH-/\/} | envsubst
}
function zshdir-encode {
# dir is hardcoded...
echo dir${${1//${HOME}/\-DOLLAR-HOME}//\//-SLASH-}
}
function source-zshpathd {
setopt extended_glob
# glob search for the zshcmd.d dir
local -a zshpathd=()
[[ -n "$ZSHPATHD" ]] && zshpathd+=($ZSHPATH(N))
[[ -n "$ZDOTDIR" ]] && zshpathd+=(
$ZDOTDIR/zexists/path(N)
)
zshpathd+=(${ZDOTDIR:-$HOME}/zexists.d/path(N))
if ! (( $#zshpathd )); then
echo >&2 "zexists: dir not found '${ZSHPATHD:-${ZDOTDIR:-$HOME}/zexists.d/path}'"
return 1
fi
local -a conf_files=("$zshpathd[1]"/*(N))
local rcfile
local name
local pathtype
local directory
local antircfile # sort and source conf files
for rcfile in ${(o)conf_files}; do
if [[ ${rcfile:t} == "dir"* ]];then
pathtype='dir'
elif [[ ${rcfile:t} == "file"* ]];then
pathtype='file'
echo >&2 "zexists: file type not yet supported"
else
echo >&2 "zexists: unknown path type for ${rcfile}"
return 1
fi
# ignore files that begin with a tilde
case ${rcfile:t} in '~'*) continue;; esac
# remove 'dir' from name
name=${${rcfile:t}/$pathtype/}
directory=$(zshdir-decode ${name})
# source files only if exe with that name exists
if [[ -d $directory ]]; then
source $rcfile
else
# if it doesn't exist try the anti version
antircfile=${rcfile:h}/anti-${pathtype}-${rcfile:t}
[[ -f $antircfile ]] && source $antircfile
fi
done
}
source-zshpathd