diff --git a/helper.zsh b/helper.zsh deleted file mode 100644 index 7581873a..00000000 --- a/helper.zsh +++ /dev/null @@ -1,93 +0,0 @@ -# -# Defines helper functions. -# -# Authors: -# Sorin Ionescu -# - -# Checks a boolean variable for "true". -# Case insensitive: "1", "y", "yes", "t", "true", "o", and "on". -function is-true { - [[ -n "$1" && "$1" == (1|[Yy]([Ee][Ss]|)|[Tt]([Rr][Uu][Ee]|)|[Oo]([Nn]|)) ]] -} - -# Checks a name if it is a command, function, or alias. -function is-callable { - (( $+commands[$1] )) || (( $+functions[$1] )) || (( $+aliases[$1] )) -} - -# Prints the first non-empty string in the arguments array. -function coalesce { - for arg in $argv; do - print "$arg" - return 0 - done - return 1 -} - -# Checks if a file can be autoloaded by trying to load it in a subshell. -function autoloadable { - ( unfunction $1 ; autoload -U +X $1 ) &> /dev/null -} - -# Loads Prezto modules. -function pmodload { - local -a pmodules - local pmodule - local pfunction_glob='^([_.]*|prompt_*_setup|README*)(.N:t)' - - # $argv is overridden in the anonymous function. - pmodules=("$argv[@]") - - # Add functions to $fpath. - fpath=(${pmodules:+${ZDOTDIR:-$HOME}/.zprezto/modules/${^pmodules}/functions(/FN)} $fpath) - - function { - local pfunction - - # Extended globbing is needed for listing autoloadable function directories. - setopt LOCAL_OPTIONS EXTENDED_GLOB - - # Load Prezto functions. - for pfunction in ${ZDOTDIR:-$HOME}/.zprezto/modules/${^pmodules}/functions/$~pfunction_glob; do - autoload -Uz "$pfunction" - done - } - - # Load Prezto modules. - for pmodule in "$pmodules[@]"; do - if zstyle -t ":prezto:module:$pmodule" loaded; then - continue - elif [[ ! -d "${ZDOTDIR:-$HOME}/.zprezto/modules/$pmodule" ]]; then - print "$0: no such module: $pmodule" >&2 - continue - else - if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/modules/$pmodule/init.zsh" ]]; then - source "${ZDOTDIR:-$HOME}/.zprezto/modules/$pmodule/init.zsh" - fi - - if (( $? == 0 )); then - zstyle ":prezto:module:$pmodule" loaded 'yes' - else - # Remove the $fpath entry. - fpath[(r)${ZDOTDIR:-$HOME}/.zprezto/modules/${pmodule}/functions]=() - - function { - local pfunction - - # Extended globbing is needed for listing autoloadable function - # directories. - setopt LOCAL_OPTIONS EXTENDED_GLOB - - # Unload Prezto functions. - for pfunction in ${ZDOTDIR:-$HOME}/.zprezto/modules/$pmodule/functions/$~pfunction_glob; do - unfunction "$pfunction" - done - } - - zstyle ":prezto:module:$pmodule" loaded 'no' - fi - fi - done -} - diff --git a/init.zsh b/init.zsh index f1752cbd..4c19daf3 100644 --- a/init.zsh +++ b/init.zsh @@ -5,6 +5,10 @@ # Sorin Ionescu # +# +# Version Check +# + # Check for the minimum supported version. min_zsh_version='4.3.10' if ! autoload -Uz is-at-least || ! is-at-least "$min_zsh_version"; then @@ -13,6 +17,75 @@ if ! autoload -Uz is-at-least || ! is-at-least "$min_zsh_version"; then fi unset min_zsh_version +# +# Module Loader +# + +# Loads Prezto modules. +function pmodload { + local -a pmodules + local pmodule + local pfunction_glob='^([_.]*|prompt_*_setup|README*)(.N:t)' + + # $argv is overridden in the anonymous function. + pmodules=("$argv[@]") + + # Add functions to $fpath. + fpath=(${pmodules:+${ZDOTDIR:-$HOME}/.zprezto/modules/${^pmodules}/functions(/FN)} $fpath) + + function { + local pfunction + + # Extended globbing is needed for listing autoloadable function directories. + setopt LOCAL_OPTIONS EXTENDED_GLOB + + # Load Prezto functions. + for pfunction in ${ZDOTDIR:-$HOME}/.zprezto/modules/${^pmodules}/functions/$~pfunction_glob; do + autoload -Uz "$pfunction" + done + } + + # Load Prezto modules. + for pmodule in "$pmodules[@]"; do + if zstyle -t ":prezto:module:$pmodule" loaded; then + continue + elif [[ ! -d "${ZDOTDIR:-$HOME}/.zprezto/modules/$pmodule" ]]; then + print "$0: no such module: $pmodule" >&2 + continue + else + if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/modules/$pmodule/init.zsh" ]]; then + source "${ZDOTDIR:-$HOME}/.zprezto/modules/$pmodule/init.zsh" + fi + + if (( $? == 0 )); then + zstyle ":prezto:module:$pmodule" loaded 'yes' + else + # Remove the $fpath entry. + fpath[(r)${ZDOTDIR:-$HOME}/.zprezto/modules/${pmodule}/functions]=() + + function { + local pfunction + + # Extended globbing is needed for listing autoloadable function + # directories. + setopt LOCAL_OPTIONS EXTENDED_GLOB + + # Unload Prezto functions. + for pfunction in ${ZDOTDIR:-$HOME}/.zprezto/modules/$pmodule/functions/$~pfunction_glob; do + unfunction "$pfunction" + done + } + + zstyle ":prezto:module:$pmodule" loaded 'no' + fi + fi + done +} + +# +# Prezto Initialization +# + # Source the Prezto configuration file. if [[ -s "${ZDOTDIR:-$HOME}/.zpreztorc" ]]; then source "${ZDOTDIR:-$HOME}/.zpreztorc" @@ -34,9 +107,6 @@ zstyle -a ':prezto:load' zfunction 'zfunctions' for zfunction ("$zfunctions[@]") autoload -Uz "$zfunction" unset zfunction{s,} -# Source files (the order matters). -source "${0:h}/helper.zsh" - # Load Prezto modules. zstyle -a ':prezto:load' pmodule 'pmodules' pmodload "$pmodules[@]" diff --git a/modules/helper/init.zsh b/modules/helper/init.zsh new file mode 100644 index 00000000..3f48852b --- /dev/null +++ b/modules/helper/init.zsh @@ -0,0 +1,32 @@ +# +# Defines helper functions. +# +# Authors: +# Sorin Ionescu +# + +# Checks a boolean variable for "true". +# Case insensitive: "1", "y", "yes", "t", "true", "o", and "on". +function is-true { + [[ -n "$1" && "$1" == (1|[Yy]([Ee][Ss]|)|[Tt]([Rr][Uu][Ee]|)|[Oo]([Nn]|)) ]] +} + +# Checks a name if it is a command, function, or alias. +function is-callable { + (( $+commands[$1] )) || (( $+functions[$1] )) || (( $+aliases[$1] )) +} + +# Prints the first non-empty string in the arguments array. +function coalesce { + for arg in $argv; do + print "$arg" + return 0 + done + return 1 +} + +# Checks if a file can be autoloaded by trying to load it in a subshell. +function autoloadable { + ( unfunction $1 ; autoload -U +X $1 ) &> /dev/null +} + diff --git a/modules/prompt/functions/prompt_sorin_setup b/modules/prompt/functions/prompt_sorin_setup index b4bbc4d3..f4214acc 100644 --- a/modules/prompt/functions/prompt_sorin_setup +++ b/modules/prompt/functions/prompt_sorin_setup @@ -8,6 +8,9 @@ # http://i.imgur.com/4CeOj.png # +# Load dependencies. +pmodload 'helper' + function prompt_sorin_precmd { setopt LOCAL_OPTIONS unsetopt XTRACE KSH_ARRAYS diff --git a/modules/ssh-agent/init.zsh b/modules/ssh-agent/init.zsh index 906c831a..43ca4390 100644 --- a/modules/ssh-agent/init.zsh +++ b/modules/ssh-agent/init.zsh @@ -11,6 +11,9 @@ # Sorin Ionescu # +# Load dependencies. +pmodload 'helper' + # Return if requirements are not found. if (( ! $+commands[ssh-agent] )); then return 1 diff --git a/modules/utility/init.zsh b/modules/utility/init.zsh index dca9d2a8..c7c7084c 100644 --- a/modules/utility/init.zsh +++ b/modules/utility/init.zsh @@ -8,7 +8,7 @@ # # Load dependencies. -pmodload 'spectrum' +pmodload 'helper' 'spectrum' # Correct commands. setopt CORRECT