5db2b66052
that have a slash, as that yields subdirectories. For example: zmodule duration-info -n zimfw/duration-info zmodule git-info -n zimfw/git-info zmodule asciiship -n zimfw/asciiship
171 lines
6.5 KiB
Plaintext
171 lines
6.5 KiB
Plaintext
zmodule() {
|
|
local -r zusage="Usage: %B${0}%b <url> [%B-n%b|%B--name%b <module_name>] [options]
|
|
|
|
Add %Bzmodule%b calls to your %B${ZDOTDIR:-${HOME}}/.zimrc%b file to define the modules to be initialized.
|
|
The modules are initialized in the same order they are defined.
|
|
|
|
<url> Module absolute path or repository URL. The following URL formats
|
|
are equivalent: %Bname%b, %Bzimfw/name%b, %Bhttps://github.com/zimfw/name.git%b.
|
|
%B-n%b|%B--name%b <module_name> Set a custom module name. Default: the last component in the <url>.
|
|
|
|
Repository options:
|
|
%B-b%b|%B--branch%b <branch_name> Use specified branch when installing and updating the module.
|
|
Overrides the tag option. Default: the repository's default branch.
|
|
%B-t%b|%B--tag%b <tag_name> Use specified tag when installing and updating the module.
|
|
Overrides the branch option.
|
|
%B-u%b|%B--use%b <%%Bgit%b|%Bdegit%b> Install and update the module using the defined tool. Default: %Bgit%b
|
|
|
|
Initialization options:
|
|
%B-f%b|%B--fpath%b <path> Add specified path to fpath. The path is relative to the module
|
|
root directory. Default: %Bfunctions%b, if the subdirectory exists.
|
|
%B-a%b|%B--autoload%b <func_name> Autoload specified function. Default: all valid names inside the
|
|
module's specified fpath paths.
|
|
%B-s%b|%B--source%b <file_path> Source specified file. The file path is relative to the module root
|
|
directory. Default: %Binit.zsh%b, if the %Bfunctions%b subdirectory also
|
|
exists, or the file with largest size matching
|
|
%B{init.zsh,module_name.{zsh,plugin.zsh,zsh-theme,sh}}%b, if any exist.
|
|
%B-c%b|%B--cmd%b <command> Execute specified command. Occurrences of the %B{}%b placeholder in the
|
|
command are substituted by the module root directory path.
|
|
%B-s 'script.zsh'%b and %B-c 'source {}/script.zsh'%b are equivalent.
|
|
%B-d%b|%B--disabled%b Don't initialize or uninstall the module.
|
|
"
|
|
if [[ ${${funcfiletrace[1]%:*}:t} != .zimrc ]]; then
|
|
print -u2 -PR "%F{red}${0}: Must be called from %B<%= home %>/.zimrc%b%f"$'\n\n'${zusage}
|
|
return 2
|
|
fi
|
|
if (( ! # )); then
|
|
print -u2 -PR "%F{red}<%= error %>${funcfiletrace[1]}: Missing zmodule url%f"$'\n\n'${zusage}
|
|
_zfailed=1
|
|
return 2
|
|
fi
|
|
setopt LOCAL_OPTIONS CASE_GLOB EXTENDED_GLOB
|
|
local ztool=git
|
|
local zmodule=${1:t} zurl=${1}
|
|
local ztype zrev
|
|
local -i zdisabled=0 zfrozen=0
|
|
local -a zfpaths zfunctions zcmds
|
|
local zarg zdir
|
|
if [[ ${zurl} =~ ^[^:/]+: ]]; then
|
|
zmodule=${zmodule%.git}
|
|
elif [[ ${zurl} != /* ]]; then
|
|
# Count number of slashes
|
|
case ${#zurl//[^\/]/} in
|
|
0) zurl="https://github.com/zimfw/${zurl}.git" ;;
|
|
1) zurl="https://github.com/${zurl}.git" ;;
|
|
esac
|
|
fi
|
|
shift
|
|
if [[ ${1} == (-n|--name) ]]; then
|
|
if (( # < 2 )); then
|
|
print -u2 -PR "%F{red}<%= error %>${funcfiletrace[1]}:%B${zmodule}:%b Missing argument for zmodule option ${1}%f"$'\n\n'${zusage}
|
|
_zfailed=1
|
|
return 2
|
|
fi
|
|
shift
|
|
zmodule=${${1%%/##}##/##}
|
|
shift
|
|
fi
|
|
if [[ ${zurl} == /* ]]; then
|
|
zdir=${zurl%%/##}
|
|
else
|
|
zdir=${ZIM_HOME}/modules/${zmodule}
|
|
fi
|
|
while (( # > 0 )); do
|
|
case ${1} in
|
|
-b|--branch|-t|--tag|-u|--use|-f|--fpath|-a|--autoload|-s|--source|-c|--cmd)
|
|
if (( # < 2 )); then
|
|
print -u2 -PR "%F{red}<%= error %>${funcfiletrace[1]}:%B${zmodule}:%b Missing argument for zmodule option ${1}%f"$'\n\n'${zusage}
|
|
_zfailed=1
|
|
return 2
|
|
fi
|
|
;;
|
|
esac
|
|
case ${1} in
|
|
-b|--branch)
|
|
shift
|
|
ztype=branch
|
|
zrev=${1}
|
|
;;
|
|
-t|--tag)
|
|
shift
|
|
ztype=tag
|
|
zrev=${1}
|
|
;;
|
|
-u|--use)
|
|
shift
|
|
ztool=${1}
|
|
;;
|
|
-z|--frozen) zfrozen=1 ;;
|
|
-f|--fpath)
|
|
shift
|
|
zarg=${1}
|
|
if [[ ${zarg} != /* ]] zarg=${zdir}/${zarg}
|
|
zfpaths+=(${zarg})
|
|
;;
|
|
-a|--autoload)
|
|
shift
|
|
zfunctions+=(${1})
|
|
;;
|
|
-s|--source)
|
|
shift
|
|
zarg=${1}
|
|
if [[ ${zarg} != /* ]] zarg=${zdir}/${zarg}
|
|
zcmds+=("source ${zarg:A}")
|
|
;;
|
|
-c|--cmd)
|
|
shift
|
|
zcmds+=(${1//{}/${zdir:A}})
|
|
;;
|
|
-d|--disabled) zdisabled=1 ;;
|
|
*)
|
|
print -u2 -PR "%F{red}<%= error %>${funcfiletrace[1]}:%B${zmodule}:%b Unknown zmodule option ${1}%f"$'\n\n'${zusage}
|
|
_zfailed=1
|
|
return 2
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
if [[ -n ${_zargs_action} ]]; then
|
|
if (( ! zfrozen )); then
|
|
_zmodules_zargs+=("${ztool}" "${_zargs_action}" "${zmodule}" "${zdir}" "${zurl}" "${ztype}" "${zrev}")
|
|
fi
|
|
else
|
|
if (( zdisabled )); then
|
|
_zdisableds+=(${zmodule})
|
|
else
|
|
if [[ ! -d ${zdir} ]]; then
|
|
print -u2 -PR "%F{red}<%= error %>${funcfiletrace[1]}:%B${zmodule}:%b Not installed. Run %Bzimfw install%b to install.%f"
|
|
_zfailed=1
|
|
return 1
|
|
fi
|
|
local -ra prezto_fpaths=(${zdir}/functions(NF))
|
|
local -ra prezto_scripts=(${zdir}/init.zsh(N))
|
|
if (( ! ${#zfpaths} && ! ${#zcmds} && ${#prezto_fpaths} && ${#prezto_scripts} )); then
|
|
# this follows the prezto module format, no need to check for other scripts
|
|
zfpaths=(${prezto_fpaths})
|
|
zcmds=("source ${^prezto_scripts[@]:A}")
|
|
else
|
|
if (( ! ${#zfpaths} )) zfpaths=(${prezto_fpaths})
|
|
if (( ! ${#zcmds} )); then
|
|
# get script with largest size (descending `O`rder by `L`ength, and return only `[1]` first)
|
|
local -r zscript=(${zdir}/(init.zsh|${zmodule:t}.(zsh|plugin.zsh|zsh-theme|sh))(NOL[1]))
|
|
zcmds=("source ${^zscript[@]:A}")
|
|
fi
|
|
fi
|
|
if (( ! ${#zfunctions} )); then
|
|
# _* functions are autoloaded by compinit
|
|
# prompt_*_setup functions are autoloaded by promptinit
|
|
zfunctions=(${^zfpaths}/^(*~|*.zwc(|.old)|_*|prompt_*_setup)(N-.:t))
|
|
fi
|
|
if (( ! ${#zfpaths} && ! ${#zfunctions} && ! ${#zcmds} )); then
|
|
print -u2 -PR "%F{yellow}<%= warn %>${funcfiletrace[1]}:%B${zmodule}:%b Nothing found to be initialized. Customize the module name or initialization with %Bzmodule%b options.%f"$'\n\n'${zusage}
|
|
fi
|
|
_zmodules+=(${zmodule})
|
|
_zdirs+=(${zdir})
|
|
_zfpaths+=(${zfpaths})
|
|
_zfunctions+=(${zfunctions})
|
|
_zcmds+=(${zcmds})
|
|
fi
|
|
fi
|
|
}
|