Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve sdk completion #8854

Merged
merged 2 commits into from
Apr 30, 2020
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Improve sdk completion
 - Complete commands from __sdk_ function names instead of from static array
 - Don't display command aliases in command completion list
 - Support l alias for list
 - Only list installed candidates for sdk upgrade, current, use, default & uninstall
 - Only list installed versions for sdk use
 - Properly parse version completions
 - Parse versions using zsh expansions instead of using sed
 - Support local_path argument for sdk install
 - Display header above completions
 - Added version completion for sdk flush
 - Inlined helper methods
 - Formatted code
 - Added zsh shebang
  • Loading branch information
rgoldberg committed Apr 26, 2020
commit 619326354eb50f74eefc590d6772f0c485366957
127 changes: 49 additions & 78 deletions plugins/sdk/sdk.plugin.zsh
Original file line number Diff line number Diff line change
@@ -1,83 +1,54 @@
### 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
;;
_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
}

Expand Down