From f142fe6e9578158f3579e9ad65d632bb451ff313 Mon Sep 17 00:00:00 2001 From: Riyyi Date: Sat, 11 Apr 2020 14:04:22 +0200 Subject: [PATCH] Update vim plugin manager script to proper standard --- .scripts/vimplugin.sh | 133 ++++++++++++++++++++++++++---------------- 1 file changed, 84 insertions(+), 49 deletions(-) diff --git a/.scripts/vimplugin.sh b/.scripts/vimplugin.sh index a456922..c42eb7c 100755 --- a/.scripts/vimplugin.sh +++ b/.scripts/vimplugin.sh @@ -1,5 +1,8 @@ #!/bin/sh +# Vim plugin manager +# Depends: git + #---- BASE="$XDG_CONFIG_HOME/vim/pack" #---- @@ -10,34 +13,59 @@ OPT="$DIR/opt" help() { B=$(tput bold) + U=$(tput smul) N=$(tput sgr0) cat << EOF ${B}NAME${N} - vimplugin - vim plugin manager + vimplugin.sh - vim plugin manager ${B}SYNOPSIS${N} - ./vimplugin.sh [ ] + ${B}vimplugin.sh${N} [${U}OPTION${N}] [${U}COMMAND${N}] [<${U}ARG${N}>...] + +${B}OPTIONS${N} + ${B}-h${N} Display usage message and exit. ${B}COMMANDS${N} ${B}init${N} Creates all the required directories/files. - ${B}install ["start"/"opt"]${N} - Install a new plugin, need to be a valid GitHub URL, - start/opt to install the plugin in the start/opt directory - (default: start). + ${B}install${N} ${U}URL${N} <${U}LOCATION${N}> + Install a new plugin from a valid GitHub ${U}URL${N}. + Store this plugin in <${U}LOCATION${N}> (start/opt), default to start. + + ${B}list${N} <${U}NUMBER${N}> + Print all the installed plugins. + If <${U}NUMBER${N}> is provided, print only the plugin in that position. - ${B}list ${N} - Prints all the installed plugins, - prints just the plugin in that position. ${B}remove${N} - Remove plugin, script will prompt a selection menu. + Remove plugin, pick from selection menu. + ${B}update${N} - Installs/updates all plugins from the config file. + Install/update all plugins stored in the config file. EOF } +# Exit if no option is provided +[ "$#" -eq 0 ] && help && exit 1 + +SCRIPT="$(basename "$0")" + +# Option handling +while getopts ':h?' opt; do + case $opt in + h) + help + exit 0 + ;; + \?) + echo "$SCRIPT: invalid option '$OPTARG'" + echo "Try '$SCRIPT -h' for more information." + exit 1 + ;; + esac +done + init() { sudo mkdir -p "$START" sudo mkdir -p "$OPT" @@ -49,30 +77,11 @@ init() { fi } -list() { - if [ -z "$1" ]; then - echo "Listing all installed plugins.." - fi - - PLUGIN="$(find "$DIR" -mindepth 2 -maxdepth 2 \ - | sort | awk -F '/' '{ print $(NF-1)"/"$NF }')" - NUM=0 - for p in $PLUGIN; do - NUM=$(( NUM + 1 )) - - if [ -z "$1" ]; then - echo "$NUM) $p" - elif [ "$NUM" = "$1" ]; then - echo "$p" - fi - done -} - install() { # Check if correct git URL if [ -z "$(echo "$1" | sed -nr \ 's/^https:\/\/github\.com\/(.*\/.*).git$/\1/p')" ]; then - echo "script: url invalid: $1" + echo "$SCRIPT: url invalid: $1" else # cd to correct directory if called from the CLI if [ -z "$2" ]; then @@ -110,26 +119,28 @@ install() { fi } -update() { - echo "Updating.." +list() { + if [ -z "$1" ]; then + echo "Listing all installed plugins.." + fi - init + PLUGIN="$(find "$DIR" -mindepth 2 -maxdepth 2 \ + | sort | awk -F '/' '{ print $(NF-1)"/"$NF }')" + NUM=0 + for p in $PLUGIN; do + NUM=$((NUM + 1)) - cd "$START" || exit - while read -r l; do - if [ "$l" = "start:" ]; then - cd "$START" || exit - elif [ "$l" = "opt:" ]; then - cd "$OPT" || exit - else - install "$l" "script" + if [ -z "$1" ]; then + echo "$NUM) $p" + elif [ "$NUM" = "$1" ]; then + echo "$p" fi - done < "$LIST" + done } remove() { list - echo -n "Enter the number to remove: " + printf "Enter the number to remove: " read -r OPTION if [ -z "$(echo "$OPTION" | sed -nr 's/^([0-9]+)$/\1/p')" ]; then @@ -139,13 +150,37 @@ remove() { if [ -n "$TO_REMOVE" ]; then sudo rm -rf "$DIR/$TO_REMOVE" sudo sed -i '/'"$(basename "$TO_REMOVE")"'\.git/d' "$LIST" + echo "Removed plugin: $TO_REMOVE" fi fi } -if type "$1" 2> /dev/null | grep -q "function"; then - "$@" -else - help -fi +update() { + echo "Updating.." + + init + + cd "$START" || exit + while read -r l; do + if [ "$l" = "start:" ]; then + cd "$START" || exit + elif [ "$l" = "opt:" ]; then + cd "$OPT" || exit + else + install "$l" "script" + fi + done < "$LIST" +} +# Command handling +shift $((OPTIND - 1)) +case "$1" in + init | install | list | remove | update) + "$1" "$2" "$3" + ;; + *) + echo "$SCRIPT: invalid command '$1'" + echo "Try '$SCRIPT -h' for more information." + exit 1 + ;; +esac