From 63a275bc2e292f6e0d7af6d30ffcbc2776245a7e Mon Sep 17 00:00:00 2001 From: Shohei YOSHIDA Date: Wed, 16 Nov 2022 16:09:14 +0900 Subject: [PATCH] Update thor completion --- src/_thor | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 89 insertions(+), 5 deletions(-) diff --git a/src/_thor b/src/_thor index 081de1f..aadaef2 100644 --- a/src/_thor +++ b/src/_thor @@ -24,21 +24,105 @@ # Description # ----------- # -# Completion script for thor (https://github.com/wycats/thor). -# -# Source: https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/thor +# Completion script for thor 1.2.1 (https://github.com/rails/thor). # # ------------------------------------------------------------------------------ # Authors # ------- # # * Andrew Hodges (https://github.com/betawaffle) +# * Shohei Yoshida (https://github.com/syohex) # # ------------------------------------------------------------------------------ +_thor_subcommands() { + local -a commands=( + 'help:Describe available commands or one specific command' + ) -# FIXME This should be rewritten using up-to-date ZSH completion API. -compadd `thor list | grep thor | cut -d " " -f 2` + if [[ -e Thorfile ]]; then + commands=(${(@f)"$(thor list 2>/dev/null | awk '/^thor/{sub(/^thor /,"\\"); sub(/[ ]*#[ ]*/,":");print}')"} $commands) + else + commands=( + $commands + 'install:Install an optionally named Thor file into your system commands' + 'installed:List the installed Thor modules and commands' + 'list:List the available thor commands' + 'uninstall:Uninstall a named Thor module' + 'update:Update a Thor file from its original location' + 'version:Show Thor version' + ) + fi + + _describe -t commands 'command' commands "$@" +} + +_thor_help() { + local -a commands + + if [[ -e Thorfile ]]; then + commands=(${(@f)"$(thor list 2>/dev/null | awk "/^thor/{ printf \"\\\\%s\\n\", \$2 }")"}) + else + commands=(help install installed list uninstall update version) + fi + + _values 'help' $commands +} + +_thor() { + typeset -A opt_args + local context state line + local curcontext="$curcontext" + local ret=1 + + _arguments -C -A "-*" \ + '1: :_thor_subcommands' \ + '*::arg:->args' \ + && ret=0 + + case "$state" in + (args) + case $words[1] in + (help) + _arguments \ + '1: :_thor_help' \ + && ret=0 + ;; + (install) + _arguments \ + '--as=[specify the name]:name' \ + '--relative[use relative path]' \ + '--force[force install]' \ + '*: :_files' \ + && ret=0 + ;; + (installed) + _arguments \ + '--internal[show internal]' \ + && ret=0 + ;; + (list) + _arguments \ + '--substring[use search keyword as substring]' \ + '--group=[specify the group name]' \ + '--all[search from all groups]' \ + '--debug[show all back trace if error raises]' \ + '*::' \ + && ret=0 + ;; + (*) + _arguments \ + '*::_files' \ + && ret=0 + ;; + esac + ;; + esac + + return ret +} + +_thor "$@" # Local Variables: # mode: Shell-Script