From acceccda87c60c76c06bef56a3c5780588473158 Mon Sep 17 00:00:00 2001 From: Pocco81 Date: Tue, 3 Aug 2021 23:09:18 -0500 Subject: [PATCH] accept both args and flags --- install.sh | 173 ++++++++++++++--------------------------------------- 1 file changed, 46 insertions(+), 127 deletions(-) diff --git a/install.sh b/install.sh index 2b340896..7ed3898c 100755 --- a/install.sh +++ b/install.sh @@ -30,75 +30,31 @@ prompt() { _usage() { printf "%s" \ "Usage: sh ${0##*/} [ options ] - -h | --help => Show this help. - -i | --install => Install the config. - -r | --remove => Remove the config. - -u | --update => Update the existing config without removing existing stuff. + -h, --help -> Show this help. + -i, --install -> Install the config. + -r, --remove -> Remove the config. + -u, --update -> Update the existing config without removing existing stuff. " } -_eval_exit() { - status=$1 - suc_msg=$2 - err_msg=$3 - - case $status in - 0) - prompt -s "${suc_msg}" - ;; - *) - prompt -e "${err_msg}" - ;; - esac +skip=0 +_skip_ahead() { + amount=$1 + skip=$((skip + amount)) } -_check_dependencies() { - _error_dependencies() { - prompt -r "Error: Install ${1} before proceeding." - exit 1 - } - command -v git 1>/dev/null || _error_dependencies git - return 0 -} - -_install() { - _check_dependencies -} - -_remove() { - prompt -i "-> Cleaning config ($HOME/.config/nvim/)" - # rm -rf "$HOME/.config/nvim/" - - prompt -i "-> Cleaning miscellaneous ($HOME/.local/share/nvim/)" - # rm -rf "$HOME/.local/share/nvim/" - - prompt -i "-> Cleaning cache ($HOME/.cache/nvim/)" - # rm -rf "$HOME/.cache/nvim/" -} -# _update() {} - -_init_settings() { - no_backup="false" - install="false" - uninstall="false" -} - -_clean_arg() { - arg=$1 - if [[ "$arg" == "--"* ]]; then - echo "${arg:2}" - elif [[ "$arg" == "-"* ]]; then - echo "${arg:1}" - fi -} - - _parse_args() { - local args_func=$1 + local func_args=$1 local argv=("$@") + # local skip=0 + + unset 'argv[0]' # becuase arg1 is $func_arg + for i in "${!argv[@]}"; do new_array+=( "${argv[i]}" ); done + argv=("${new_array[@]}") + unset new_array + local argc=${#argv[@]} - local skip=0 _skip_ahead() { amount=$1 @@ -129,99 +85,62 @@ _parse_args() { break ;; *) - eval "${eval_args}" "$(_clean_arg "${argv[j]}")" "$j" + # eval "${func_args}" "$(_clean_arg "${argv[j]}")" "$j" + eval "${func_args}" "${argv[j]}" "$j" ;; esac ;; -*) - tangled_args=$(_clean_arg "${argv[j]}") - for ((k = 0; k < ${#tangled_args}; k++)); do - eval "${eval_args}" "${tangled_args:$k:1}" "$j" - done + if [[ ${#argv[j]} -le 2 ]]; then + eval "${func_args}" "${argv[j]}" "$j" + else + tangled_args=$(_clean_arg "${argv[j]}") + for ((k = 0; k < ${#tangled_args}; k++)); do + eval "${func_args}" "-${tangled_args:$k:1}" "$j" + done + fi ;; *) - prompt -w "Warning: flag ''${argv[j]}' not recognized" + eval "${func_args}" "${argv[j]}" "$j" ;; esac done } main() { - local argv=("$@") - local argc=${#argv[@]} - local skip=0 + local argvs=("$@") + local argc=${#argvs[@]} assert_arg() { - var=$1 - index=$2 + var=$1 # flag + index=$2 # flag's index case ${var} in - h | help) + -h | --help) _usage ;; - i | install) + -i | --install) prompt -i "installing..." ;; - r | remove) + -r | --remove) prompt -i "removing..." ;; - # p | --path + -a | --action) + action=${argvs[index+1]} + prompt -i "Action to perform -> ${action}" + _skip_ahead 1 + ;; + -p=* | --path=*) + path="${var#*=}" + prompt -i "Path was set to -> ${path}" + ;; *) - prompt -w "Warning: flag '${var}' not recognized" + prompt -w "Warning: unknown command '${var}'" ;; esac } - _skip_ahead() { - amount=$1 - skip=$((skip + amount)) - } - - # works for: - # 1. normal flags (e.g. -h,--help) - # 2. nested flags (e.g. -ivh) - # 3. space sperated flags and args (e.g. --option argument) - # 4. equal separated flags and args (e.g. --option=argument) - - - for j in "${!argv[@]}"; do - if [[ ${skip} -gt 0 ]]; then - left=$((argc - j)) - while [[ ${skip} > ${left} ]]; do ((skip--)); done - skip=$((skip - 1)) - continue - fi - - case ${argv[j]} in - --*) # End of all options. - case ${argv[j]} in - --) # End of all options. - break - ;; - *) - assert_arg "$(_clean_arg "${argv[j]}")" "$j" - ;; - esac - ;; - -*) - tangled_args=$(_clean_arg "${argv[j]}") - for ((k = 0; k < ${#tangled_args}; k++)); do - assert_arg "${tangled_args:$k:1}" "$j" - done - ;; - *) - prompt -w "Warning: flag ''${argv[j]}' not recognized" - ;; - esac - done + _parse_args "assert_arg" "${argvs[@]}" } -init() { - if [ $# -eq 0 ]; then - prompt -e "ERROR: This script needs at least one argument" - else - _init_settings - main "${@}" - fi -} -init "${@}" +main "${@}"