浏览代码

sdk: improve sdkman completion (#8854)

Ross Goldberg 4 年之前
父节点
当前提交
373e27d805
共有 1 个文件被更改,包括 50 次插入79 次删除
  1. 50 79
      plugins/sdk/sdk.plugin.zsh

+ 50 - 79
plugins/sdk/sdk.plugin.zsh

@@ -1,84 +1,55 @@
-### SDKMAN Autocomplete for Oh My Zsh
-
-# This is the output from sdkman. All the these options are supported at the
-# moment.
-
-# Usage: sdk <command> [candidate] [version]
-#        sdk offline <enable|disable>
-#
-#    commands:
-#        install   or i    <candidate> [version] [local-path]
-#        uninstall or rm   <candidate> <version>
-#        list      or ls   [candidate]
-#        use       or u    <candidate> <version>
-#        default   or d    <candidate> [version]
-#        current   or c    [candidate]
-#        upgrade   or ug   [candidate]
-#        version   or v
-#        broadcast or b
-#        help      or h
-#        offline           [enable|disable]
-#        selfupdate        [force]
-#        update
-#        flush             <broadcast|archives|temp>
-#
-#    candidate  :  the SDK to install: groovy, scala, grails, gradle, kotlin, etc.
-#                  use list command for comprehensive list of candidates
-#                  eg: $ sdk list
-#    version    :  where optional, defaults to latest stable if not provided
-#                  eg: $ sdk install groovy
-#    local-path :  optional path to an existing local installation
-#                  eg: $ sdk install groovy 2.4.13-local /opt/groovy-2.4.13
-
-local _sdk_commands=(
-    install     i
-    uninstall   rm
-    list        ls
-    use         u
-    default     d
-    current     c
-    upgrade     ug
-    version     v
-    broadcast   b
-    help        h
-    offline
-    selfupdate
-    update
-    flush
-)
-
-_listInstalledVersions() {
-  __sdkman_build_version_csv $1 | sed -e "s/,/ /g"
-}
-
-_listInstallableVersions() {
-  # Remove local (+) and installed (*) versions from the list
-  __sdkman_list_versions $1 | sed -e '/^[^ ]/d;s/[+*] [^ ]\+//g;s/>//g'
-}
+#!/usr/bin/env zsh
 
-_listAllVersion() {
-  # Remove (*), (+), and (>) characters from the list
-  __sdkman_list_versions $1 | sed -e '/^[^ ]/d;s/[*+>] //g'
-}
+### SDKMAN Autocomplete for Oh My Zsh
 
-_sdk () {
-  case $CURRENT in
-    2)  compadd -- $_sdk_commands ;;
-    3)  case "$words[2]" in
-          i|install|rm|uninstall|ls|list|u|use|d|default|c|current|ug|upgrade)
-                      compadd -- $SDKMAN_CANDIDATES ;;
-          offline)    compadd -- enable disable ;;
-          selfupdate) compadd -- force ;;
-          flush)      compadd -- broadcast archives temp ;;
-        esac
-        ;;
-    4)  case "$words[2]" in
-          rm|uninstall|d|default) compadd -- $(_listInstalledVersions $words[3]) ;;
-          i|install)              compadd -- $(_listInstallableVersions $words[3]) ;;
-          u|use)                  compadd -- $(_listAllVersion $words[3]) ;;
-        esac
-        ;;
-  esac
+_sdk() {
+	case "${CURRENT}" in
+	2)
+		compadd -X $'Commands:\n' -- "${${(Mk)functions[@]:#__sdk_*}[@]#__sdk_}"
+		compadd -n rm
+		;;
+	3)
+		case "${words[2]}" in
+		l|ls|list|i|install)
+			compadd -X $'Candidates:\n' -- "${SDKMAN_CANDIDATES[@]}"
+			;;
+		ug|upgrade|c|current|u|use|d|default|rm|uninstall)
+			compadd -X $'Installed Candidates:\n' -- "${${(u)${(f)$(find -L -- "${SDKMAN_CANDIDATES_DIR}" -mindepth 2 -maxdepth 2 -type d)}[@]:h}[@]:t}"
+			;;
+		offline)
+			compadd enable disable
+			;;
+		selfupdate)
+			compadd force
+			;;
+		flush)
+			compadd archives broadcast temp version
+			;;
+		esac
+		;;
+	4)
+		case "${words[2]}" in
+		i|install)
+			setopt localoptions kshglob
+			if [[ "${words[3]}" == 'java' ]]; then
+				compadd -X $'Installable Versions of java:\n' -- "${${${${${(f)$(__sdkman_list_versions "${words[3]}")}[@]:5:-4}[@]:#* | (local only|installed ) | *}[@]##* |            | }[@]%%+( )}"
+			else
+				compadd -X "Installable Versions of ${words[3]}:"$'\n' -- "${${(z)${(M)${(f)${$(__sdkman_list_versions "${words[3]}")//[*+>]+( )/-}}[@]:# *}[@]}[@]:#-*}"
+			fi
+			;;
+		u|use|d|default|rm|uninstall)
+			compadd -X "Installed Versions of ${words[3]}:"$'\n' -- "${${(f)$(find -L -- "${SDKMAN_CANDIDATES_DIR}/${words[3]}" -mindepth 1 -maxdepth 1 -type d -not -name 'current')}[@]:t}"
+			;;
+		esac
+		;;
+	5)
+		case "${words[2]}" in
+		i|install)
+			_files -X "Path to Local Installation of ${words[3]} ${words[4]}:"$'\n' -/
+			;;
+		esac
+		;;
+	esac
 }
 
 compdef _sdk sdk