X-Git-Url: https://arthur.barton.de/gitweb/?a=blobdiff_plain;f=ax.zsh;h=7755f7e1ae9f60aff433d4c69bd41310b11d8789;hb=2e6c1a7c3d962deef3487044c8729f22760c4c24;hp=63c2b830994b0e69761486f80f6651d682bb7617;hpb=23f0f61d7227124e73b14cff56113aefe97ddf61;p=ax-zsh.git diff --git a/ax.zsh b/ax.zsh index 63c2b83..7755f7e 100644 --- a/ax.zsh +++ b/ax.zsh @@ -1,86 +1,75 @@ # AX-ZSH: Alex' Modular ZSH Configuration # Copyright (c) 2015 Alexander Barton +script_name="$(basename -- "${(%):-%N}")" +script_type="$script_name[2,-1]" + +[[ -f "$HOME/.axzsh.debug" ]] && echo "» $script_name:" + # Load plugin code of a given type. # - $1: plugin name # - $2: plugin type (optional; defaults to "zshrc") function axzsh_load_plugin { - plugin="$1" + dname="$(readlink "$1")" || dname="$1" + plugin="$(basename "$dname")" [[ -z "$2" ]] && type="zshrc" || type="$2" + fname="$dname/$plugin.$type" - for dname in \ - "$AXZSH_PLUGIN_D/$plugin" \ - "$AXZSH/plugins/$plugin" \ - "$AXZSH/core/$plugin" \ - ; do - [[ ! -d "$dname" ]] && continue - - fname="$dname/$plugin.$type" - if [[ ! -r "$fname" && "$type" == "zshrc" ]]; then - if [[ -r "$dname/$plugin.plugin.zsh" ]]; then - # Oh My ZSH plugin - type="plugin.zsh" - fname="$dname/$plugin.plugin.zsh" - elif [[ -r "$dname/init.zsh" ]]; then - # Prezto module - type="init.zsh" - fname="$dname/init.zsh" - fi + if [[ ! -d "$dname" ]]; then + # Plugin not found! + if [[ -f "$HOME/.axzsh.debug" ]]; then + # Show error message for all stages in "debug mode": + echo "AX-ZSH plugin \"$plugin\" not found (type \"$type\")!" >&2 + elif [[ "$type" == "zshrc" ]]; then + # Show error message for the "zshrc" stage: + echo "AX-ZSH plugin \"$plugin\" not found, skipped!" >&2 fi + return 1 + fi - if [[ -r "$fname" ]]; then - [[ -f "$HOME/.axzsh.debug" ]] \ - && echo " - $plugin ($type) ..." - source "$fname" - return 0 + if [[ ! -r "$fname" && "$type" == "zshrc" ]]; then + if [[ -r "$dname/$plugin.plugin.zsh" ]]; then + # Oh My ZSH plugin + type="plugin.zsh" + fname="$dname/$plugin.plugin.zsh" + elif [[ -r "$dname/init.zsh" ]]; then + # Prezto module + type="init.zsh" + fname="$dname/init.zsh" fi - return 0 - done - [[ -f "$HOME/.axzsh.debug" ]] \ - && echo "Plugin \"$plugin\" not found (type \"$type\")!" >/dev/stderr - return 1 + fi + + if [[ -r "$fname" ]]; then + [[ -f "$HOME/.axzsh.debug" ]] \ + && echo " - $plugin ($type) ..." + source "$fname" + fi + + # It is a success, even if only the plugin directory (and no script!) + # exists at all! Rationale: The script could be of an other type ... + return 0 } # Make sure that "AXZSH" variable is set and exported if [[ -z "$AXZSH" ]]; then export AXZSH="$HOME/.axzsh" - [[ -f "$HOME/.axzsh.debug" ]] && echo "AXZSH=$AXZSH" -fi - -# Setup list of default plugins if not set already. This allows users to -# overwrite this list in their "~/.zshrnv" file, for example. -typeset -U axzsh_default_plugins -if ! typeset +m axzsh_default_plugins | fgrep array >/dev/null 2>&1; then - axzsh_default_plugins=( - byebye - completion - correction - git - history - homebrew - ls - prompt - ssh - std_aliases - ) + if [[ -f "$HOME/.axzsh.debug" ]]; then + echo "AXZSH=$AXZSH" + echo "AXZSH_PLUGIN_D=$AXZSH_PLUGIN_D" + fi fi # Setup list of plugins to load: typeset -U plugin_list plugin_list=( - $AXZSH/core/[0-5]* - $axzsh_default_plugins - $axzsh_plugins - $plugins - $AXZSH/core/[6-9]* + "$AXZSH/core/"[0-5]* + "$AXZSH/active_plugins/"*(N) + "$AXZSH/core/"[6-9]* ) # Read in all the plugins for the current "type": -script_name="$(basename -- "${(%):-%N}")" -script_type="$script_name[2,-1]" -[[ -f "$HOME/.axzsh.debug" ]] && echo "» $script_name:" for plugin ($plugin_list); do - axzsh_load_plugin "$(basename "$plugin")" "$script_type" + axzsh_load_plugin "$plugin" "$script_type" done unset script_name script_type plugin unset plugin_list