]> arthur.barton.de Git - ax-zsh.git/blobdiff - bin/axzshctl
axemoji: Use nicer emoji for righthand error notice
[ax-zsh.git] / bin / axzshctl
index 1c41425990e0fb4091d6a2a5bd43a1a97fb5cb9c..4feade120037cebd602eb28ec925f0a8f37eee20 100755 (executable)
@@ -57,7 +57,7 @@ function Usage {
 function UpdatePluginCache {
        [[ -r "$AXZSH/cache" ]] || return 0
 
-       ax_msg - "Updating plugin cache ..."
+       [[ "$1" = "-v" ]] && ax_msg - "Updating plugin cache ..."
        rm -rf \
                $AXZSH/cache/zlogin.cache \
                $AXZSH/cache/zlogout.cache \
@@ -80,7 +80,7 @@ function NormalizedPluginName {
 
 function EnableAXZSH {
        for f (~/.zlogin ~/.zlogout ~/.zprofile ~/.zshrc); do
-               ln -sv "$AXZSH/ax.zsh" "$f" \
+               ln -s "$AXZSH/ax.zsh" "$f" \
                        || ax_error "Failed to create symbolic link for \"$f\"!"
        done
 }
@@ -88,7 +88,7 @@ function EnableAXZSH {
 function DisableAXZSH {
        for f (~/.zlogin ~/.zlogout ~/.zprofile ~/.zshrc); do
                if [ -h "$f" ]; then
-                       rm -v "$f" || ax_msg 2 "Failed to remove \"$f\"!"
+                       rm "$f" || ax_msg 2 "Failed to remove \"$f\"!"
                elif [ -e "$f" ]; then
                        ax_error "Error: Not removing \"$f\", it is not a symbolic link!"
                else
@@ -112,18 +112,19 @@ function EnablePlugin {
                if [[ ! -e "$AXZSH/repos/$plugin" ]]; then
                        ax_msg - "Cloning module from GitHub ..."
                        git clone --depth=1 "https://github.com/$1.git" \
-                        "$AXZSH/repos/$plugin"
+                        "$AXZSH/repos/$plugin" \
+                               || ax_error "Failed to clone repository!"
                fi
                # Try to enable a theme in this "foreign module", but ignore
                # errors: we don't know if this module provides a theme or is
                # a "regular" plugin ...
                if SetTheme "${plugin#*#}" 2>/dev/null; then
-                       ax_msg 1 "Module \"$1\" was enabled as theme \"${plugin#*#}\"."
+                       ax_msg 0 "Module \"$1\" was enabled as theme \"${plugin#*#}\"."
                        # A theme was enabled: So assume that this is a theme
                        # and don't enable it as plugin.
                        return 0
                fi
-               echo "Module \"$1\" will be enabled as plugin ..."
+               echo "Trying to enable \"$1\" as plugin ..."
        fi
 
        for dname (
@@ -138,11 +139,15 @@ function EnablePlugin {
        ); do
                [[ ! -d "$dname" ]] && continue
                mkdir -p "$dir"
-               (
+               if ! (
                        cd "$dir" || exit 9
-                       ln -sv "$dname" "$PWD"
-               )
-               return $?
+                       ln -s "$dname" "$PWD"
+               ); then
+                       ax_error "Failed to create link!"
+                       return 1
+               fi
+               ax_msg 0 "Plugin \"$plugin\" enabled."
+               return 0
        done
 
        ax_error "Plugin \"$1\" not found!"
@@ -152,14 +157,29 @@ function EnablePlugin {
 function DisablePlugin {
        local plugin=$(NormalizedPluginName "$1")
        local dir="$AXZSH/active_plugins"
+       local r=-1
 
-       if [[ ! -h "$dir/$plugin" ]]; then
-               ax_msg 1 "Plugin \"$1\" not active?"
-               return 1
+       # Active theme?
+       if [[ $(readlink "$AXZSH/active_theme") = "$AXZSH/repos/$plugin/"* ]]; then
+               rm "$AXZSH/active_theme"; r=$?
+       fi
+
+       # Active plugin?
+       if [[ -h "$dir/$plugin" ]]; then
+               rm "$dir/$plugin"; r=$?
+       fi
+
+       if [[ $r -eq -1 ]]; then
+               ax_msg 1 "Plugin \"$1\" not active, nothing to do?"
+               r=1
+       fi
+
+       if [[ "$plugin" = *"#"* ]]; then
+               # Name matches a cloned repository, try to clean up!
+               echo "Cleaning up cloned repository ..."
+               rm -fr "$AXZSH/repos/$plugin"
        fi
 
-       rm -v "$dir/$plugin"; r=$?
-       [ $r -eq 0 ] && rm -fr "$AXZSH/repos/$plugin"
        return $r
 }
 
@@ -188,11 +208,11 @@ function ResetPlugins {
 function EnableDefaultPlugins {
        local dir="$AXZSH/active_plugins"
 
-       ax_msg - "Activating (linking) default plugins ..."
+       ax_msg - "Activating default plugins ..."
        mkdir -p "$dir"
        (
                cd "$dir" || exit 9
-               ln -sfv "$AXZSH/default_plugins/"* "$PWD"
+               ln -sf "$AXZSH/default_plugins/"* "$PWD"
        )
        return $?
 }
@@ -232,7 +252,7 @@ function SetTheme {
                        return 1
                fi
        fi
-       ln -fsv "$theme" "$link_name" || return 1
+       ln -fs "$theme" "$link_name" || return 1
        return $?
 }
 
@@ -399,7 +419,7 @@ case "$cmd" in
                ;;
        "update-caches")
                [[ $# -eq 0 ]] || Usage
-               UpdatePluginCache
+               UpdatePluginCache -v
                ;;
        "--help")
                Usage