From 2ef20860c47893beed4e4cbaff649232b922c836 Mon Sep 17 00:00:00 2001 From: yage Date: Thu, 9 May 2024 16:33:16 -0600 Subject: [PATCH] v4.4.1 ===================================================================== --- Bug Fixes ---------------------------- - scwrypts now run when using --group and --type options without --name - fixed spacing issues in scwrypts --help - added missing = sign in config --- New Features ------------------------- - zsh completion now loads with scwrypts.plugin.zsh (requires compdef) --- .config/env.template | 4 +- scwrypts | 30 +++++------ scwrypts.plugin.zsh | 126 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 142 insertions(+), 18 deletions(-) diff --git a/.config/env.template b/.config/env.template index 04e6dba..14364cf 100644 --- a/.config/env.template +++ b/.config/env.template @@ -13,8 +13,8 @@ export DISCORD__DEFAULT_CHANNEL_ID= export DISCORD__DEFAULT_USERNAME= export DISCORD__DEFAULT_WEBHOOK= export LINEAR__API_TOKEN= -export MEDIA_SYNC__S3_BUCKET -export MEDIA_SYNC__TARGETS +export MEDIA_SYNC__S3_BUCKET= +export MEDIA_SYNC__TARGETS= export REDIS_AUTH= export REDIS_HOST= export REDIS_PORT= diff --git a/scwrypts b/scwrypts index 7c4fcf3..8840e3d 100755 --- a/scwrypts +++ b/scwrypts @@ -23,17 +23,15 @@ source "$(dirname $(readlink -f "$0"))/zsh/lib/import.driver.zsh" || exit 42 -y, --yes auto-accept all [yn] prompts through current scwrypt -e, --env set environment; overwrites SCWRYPTS_ENV - -n shorthand for "--log-level 0" - -v, --log-level [0-4] set incremental scwrypts log level to one of the following: - 0 : only command output and critical failures; skips logfile - 1 : include success / failure messages - 2 : include status update messages - 3 : (default) include warning messages - 4 : include debug messages - - -o, --output specify output format; one of: - pretty (default) - json (experimental) + -n shorthand for "--log-level 0" + -v, --log-level <0-4> set incremental scwrypts log level to one of the following: + 0 : only command output and critical failures; skips logfile + 1 : include success / failure messages + 2 : include status update messages + 3 : (default) include warning messages + 4 : include debug messages + + -o, --output specify output format; one of: pretty,json (default: pretty) alternate commands -h, --help display this message and exit @@ -119,7 +117,7 @@ source "$(dirname $(readlink -f "$0"))/zsh/lib/import.driver.zsh" || exit 42 --update ) case $SCWRYPTS_INSTALLATION_TYPE in aur ) - SCWRYPTS_LOG_LEVEL=3 REMINDER " + SCWRYPTS_LOG_LEVEL=3 REMINDER " This installation is built from the AUR. Update through 'makepkg' or use your preferred AUR package management tool (e.g. 'yay -Syu scwrypts') " @@ -152,7 +150,7 @@ source "$(dirname $(readlink -f "$0"))/zsh/lib/import.driver.zsh" || exit 42 ;; * ) - SCWRYPTS_LOG_LEVEL=3 REMINDER " + SCWRYPTS_LOG_LEVEL=3 REMINDER " This is a managed installation of scwrypts. Please update through your system package manager. " @@ -173,12 +171,14 @@ source "$(dirname $(readlink -f "$0"))/zsh/lib/import.driver.zsh" || exit 42 ((SHIFT_COUNT+=1)) [ $2 ] || { ERROR "missing value for argument $1"; break; } SEARCH_GROUP=$2 + GROUP=$2 ;; -t | --type ) ((SHIFT_COUNT+=1)) [ $2 ] || { ERROR "missing value for argument $1"; break; } SEARCH_TYPE=$2 + TYPE=$2 ;; ### runtime settings ##################### @@ -249,7 +249,6 @@ source "$(dirname $(readlink -f "$0"))/zsh/lib/import.driver.zsh" || exit 42 echo $SCWRYPTS_AVAILABLE | head -n1 echo $SCWRYPTS_AVAILABLE | grep ' [^/]*'$SEARCH_TYPE'[^/]* ' } \ - | awk '{$2=""; print $0;}' \ | sed 's/ \+$/'$(printf $__COLOR_RESET)'/; s/ \+/^/g' \ | column -ts '^' ) @@ -259,9 +258,8 @@ source "$(dirname $(readlink -f "$0"))/zsh/lib/import.driver.zsh" || exit 42 SCWRYPTS_AVAILABLE=$( { echo $SCWRYPTS_AVAILABLE | head -n1 - echo $SCWRYPTS_AVAILABLE | grep "$SEARCH_GROUP"'[^/]*$' + echo $SCWRYPTS_AVAILABLE | grep "$SEARCH_GROUP"'[^/ ]*$' } \ - | awk '{$NF=""; print $0;}' \ | sed 's/ \+$/'$(printf $__COLOR_RESET)'/; s/ \+/^/g' \ | column -ts '^' ) diff --git a/scwrypts.plugin.zsh b/scwrypts.plugin.zsh index e4e52de..5eb96fa 100644 --- a/scwrypts.plugin.zsh +++ b/scwrypts.plugin.zsh @@ -94,4 +94,130 @@ __SCWRYPTS_PARSE() { ##################################################################### +# badass(/terrifying?) zsh autocompletion +command -v compdef &>/dev/null && { + _scwrypts() { + echo $words | grep -q "\s--\s" && _arguments && return 0 + eval "_arguments $( + { + HELP=$(scwrypts --help 2>&1 | sed -n 's/^\s\+\(-.* .\)/\1/p' | sed 's/[[]/(/g; s/[]]/)/g') + echo $HELP \ + | sed 's/^\(\(-[^-\s]\),*\s*\|\)\(\(--[-a-z0-9A-Z\]*\)\s\(<\([^>]*\)>\|\)\|\)\s\+\(.*\)/\2[\7]:\6:->\2/' \ + | grep -v '^[[]' \ + ; + + echo $HELP \ + | sed 's/^\(\(-[^-\s]\),*\s*\|\)\(\(--[-a-z0-9A-Z\]*\)\s\(<\([^>]*\)>\|\)\|\)\s\+\(.*\)/\4[\7]:\6:->\4/' \ + | grep -v '^[[]' \ + ; + + echo ":pattern:->pattern" + echo ":pattern:->pattern" + echo ":pattern:->pattern" + echo ":pattern:->pattern" + echo ":pattern:->pattern" + + } | sed 's/::->.*$//g' | sed "s/\\(^\\|$\\)/'/g" | tr '\n' ' ' + )" + + local _group='' + echo $words | grep -q ' -g [^\s]' \ + && _group=$(echo $words | sed 's/.*-g \([^ ]\+\)\s*.*/\1/') + echo $words | grep -q ' --group .' \ + && _group=$(echo $words | sed 's/.*--group \([^ ]\+\)\s*.*/\1/') + + local _type='' + echo $words | grep -q ' -t [^\s]' \ + && _type=$(echo $words | sed 's/.*-t \([^ ]\+\)\s*.*/\1/') + echo $words | grep -q ' --type .' \ + && _type=$(echo $words | sed 's/.*--type \([^ ]\+\)\s*.*/\1/') + + local _name='' + echo $words | grep -q ' -m [^\s]' \ + && _name=$(echo $words | sed 's/.*-m \([^ ]\+\)\s*.*/\1/') + echo $words | grep -q ' --name .' \ + && _name=$(echo $words | sed 's/.*--name \([^ ]\+\)\s*.*/\1/') + + local _pattern _patterns=() + [ ! $_name ] \ + && _patterns=($(echo "${words[@]:1}" | sed 's/\s\+/\n/g' | grep -v '^-')) + + _get_remaining_scwrypts() { + [ $_name ] || local _name='[^ ]\+' + [ $_type ] || local _type='[^ ]\+' + [ $_group ] || local _group='[^ ]\+' + + local remaining=$(\ + scwrypts --list \ + | sed "1d; s,\x1B\[[0-9;]*[a-zA-Z],,g" \ + | grep "^$_name\s" \ + | grep "\s$_group$" \ + | grep "\s$_type\s" \ + ) + + for _pattern in ${_patterns[@]} + do + remaining=$(echo "$remaining" | grep "$_pattern") + done + + echo "$remaining" + } + + case $state in + ( -m | --name ) + compadd $(_get_remaining_scwrypts | awk '{print $1;}' | sort -u) + ;; + + ( -t | --type ) + compadd $(_get_remaining_scwrypts | awk '{print $2;}' | sort -u) + ;; + + ( -g | --group ) + [[ $_name$_type$_group =~ ^$ ]] \ + && compadd $(scwrypts --list-groups) \ + || compadd $(_get_remaining_scwrypts | awk '{print $3;}' | sort -u) \ + ;; + + ( -e | --env ) + compadd $(scwrypts --list-envs) + ;; + + ( -v | --log-level ) + local _help="$(\ + scwrypts --help 2>&1 \ + | sed -n '/-v, --log-level/,/^$/p' \ + | sed -n 's/\s\+\([0-9]\) : \(.*\)/\1 -- \2/p' \ + )" + + eval "local _descriptions=($(echo "$_help" | sed "s/\\(^\|$\\)/'/g"))" + local _values=($(echo "$_help" | sed 's/ --.*//')) + compadd -d _descriptions -a _values + ;; + + ( -o | --output ) + compadd pretty json + ;; + + ( pattern ) + [[ $_name =~ ^$ ]] && { + local _remaining_scwrypts="$(_get_remaining_scwrypts)" + # stop providing suggestions if your pattern is sufficient + [[ $(echo $_remaining_scwrypts | wc -l) -le 1 ]] && return 0 + + local _remaining_patterns="$(echo "$_remaining_scwrypts" | sed 's/\s\+/\n/g; s|/|\n|g;' | sort -u)" + + for _pattern in ${_patterns[@]} + do + _remaining_patterns="$(echo "$_remaining_patterns" | grep -v "^$_pattern$")" + done + compadd $(echo $_remaining_patterns) + } + ;; + + ( * ) ;; + esac + } + compdef _scwrypts scwrypts +} + __SCWRYPTS_PLUGIN_LOADED=true