diff --git a/README.md b/README.md index 7137a18..6e4b6b1 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ Provides auto-completion for [SDKMAN!] and adds installed binaries to the PATH. +Tested with fish 2.7.1 and SDKMAN! 5.6.5. + ## Install With [fisherman] (install separately): diff --git a/completions/sdk.fish b/completions/sdk.fish new file mode 100644 index 0000000..b0c128a --- /dev/null +++ b/completions/sdk.fish @@ -0,0 +1,120 @@ +# sdkman autocompletion + +function __fish_sdkman_no_command --description 'Test if there is no command' + set cmd (commandline -opc) + + if [ (count $cmd) -eq 1 ] + return 0 + end + return 1 +end + +function __fish_sdkman_using_command --description 'Test if the main command matches one of the parameters' + set cmd (commandline -opc) + + if [ (count $cmd) -eq 2 ] + if contains $cmd[2] $argv + return 0 + end + end + return 1 +end + +function __fish_sdkman_specifying_candidate + set cmd (commandline -opc) + + if [ (count $cmd) -eq 3 ] # currently, sdk does not support multiple versions + if contains $cmd[2] $argv ] + return 0 + end + end + return 1 +end + +function __fish_sdkman_command_has_enough_parameters + set cmd (commandline -opc) + + if [ (count $cmd) -ge (math $argv[1] + 2) ]; and contains $cmd[2] $argv[2..-1] + return 0 + end + return 1 +end + +function __fish_sdkman_candidates + cat ~/.sdkman/var/candidates | tr ',' '\n' +end + +function __fish_sdkman_installed_versions + set cmd (commandline -opc) + ls -v1 ~/.sdkman/candidates/$cmd[3] | grep -v current +end + +# install +complete -c sdk -f -n '__fish_sdkman_no_command' -a 'i install' -d 'Install new version' +complete -c sdk -f -n '__fish_sdkman_using_command i install' -a "(__fish_sdkman_candidates)" +# TODO complete available versions --> #4 +complete -c sdk -f -n '__fish_sdkman_command_has_enough_parameters 2 i install' # block + +# uninstall +complete -c sdk -f -n '__fish_sdkman_no_command' -a 'rm uninstall' -d 'Uninstall version' +complete -c sdk -f -n '__fish_sdkman_using_command rm uninstall' -a "(__fish_sdkman_candidates)" +complete -c sdk -f -n '__fish_sdkman_specifying_candidate rm uninstall' -a "(__fish_sdkman_installed_versions)" +complete -c sdk -f -n '__fish_sdkman_command_has_enough_parameters 2 rm uninstall' # block + +# list +complete -c sdk -f -n '__fish_sdkman_no_command' -a 'ls list' -d 'List versions' +complete -c sdk -f -n '__fish_sdkman_using_command ls list' -a "(__fish_sdkman_candidates)" +complete -c sdk -f -n '__fish_sdkman_command_has_enough_parameters 1 ls list' # block + +# use +complete -c sdk -f -n '__fish_sdkman_no_command' -a 'u use' -d 'Use specific version' +complete -c sdk -f -n '__fish_sdkman_using_command u use' -a "(__fish_sdkman_candidates)" +complete -c sdk -f -n '__fish_sdkman_specifying_candidate u use' -a "(__fish_sdkman_installed_versions)" +complete -c sdk -f -n '__fish_sdkman_command_has_enough_parameters 2 u use' # block + +# default +complete -c sdk -f -n '__fish_sdkman_no_command' -a 'd default' -d 'Set default version' +complete -c sdk -f -n '__fish_sdkman_using_command d default' -a "(__fish_sdkman_candidates)" +complete -c sdk -f -n '__fish_sdkman_specifying_candidate d default' -a "(__fish_sdkman_installed_versions)" +complete -c sdk -f -n '__fish_sdkman_command_has_enough_parameters 2 d default' # block + +# current +complete -c sdk -f -n '__fish_sdkman_no_command' -a 'c current' -d 'Display current version' +complete -c sdk -f -n '__fish_sdkman_using_command c current' -a "(__fish_sdkman_candidates)" +complete -c sdk -f -n '__fish_sdkman_command_has_enough_parameters 1 c current' # block + +# upgrade +complete -c sdk -f -n '__fish_sdkman_no_command' -a 'ug upgrade' -d 'Display what is outdated' +complete -c sdk -f -n '__fish_sdkman_using_command ug upgrade' -a "(__fish_sdkman_candidates)" +complete -c sdk -f -n '__fish_sdkman_command_has_enough_parameters 1 ug upgrade' # block + +# version +complete -c sdk -f -n '__fish_sdkman_no_command' -a 'v version' -d 'Display version' +complete -c sdk -f -n '__fish_sdkman_command_has_enough_parameters 0 v version' # block + +# broadcast +complete -c sdk -f -n '__fish_sdkman_no_command' -a 'b broadcast' -d 'Display broadcast message' +complete -c sdk -f -n '__fish_sdkman_command_has_enough_parameters 0 b broadcast' # block + +# help +complete -c sdk -f -n '__fish_sdkman_no_command' -a 'h help' -d 'Display help message' +complete -c sdk -f -n '__fish_sdkman_command_has_enough_parameters 0 h help' # block + +# offline +complete -c sdk -f -n '__fish_sdkman_no_command' -a 'offline' -d 'Set offline status' +complete -c sdk -f -n '__fish_sdkman_using_command offline' -a 'enable disable' +complete -c sdk -f -n '__fish_sdkman_command_has_enough_parameters 1 offline' # block + +# selfupdate +complete -c sdk -f -n '__fish_sdkman_no_command' -a 'selfupdate' -d 'Update sdkman' +complete -c sdk -f -n '__fish_sdkman_using_command selfupdate' -a 'force' # TODO: add description +complete -c sdk -f -n '__fish_sdkman_command_has_enough_parameters 1 selfupdate' # block + +# update +complete -c sdk -f -n '__fish_sdkman_no_command' -a 'update' -d 'Reload the candidate list' +complete -c sdk -f -n '__fish_sdkman_command_has_enough_parameters 0 update' # block + +# flush +complete -c sdk -f -n '__fish_sdkman_no_command' -a 'flush' -d 'Clear out cache' +complete -c sdk -f -n '__fish_sdkman_using_command flush' -a 'broadcast archives temp' +complete -c sdk -f -n '__fish_sdkman_command_has_enough_parameters 1 flush' # block \ No newline at end of file diff --git a/completions/sdkman.fish b/completions/sdkman.fish deleted file mode 100644 index 415c687..0000000 --- a/completions/sdkman.fish +++ /dev/null @@ -1,134 +0,0 @@ -# sdkman autocompletion - -function __fish_sdkman_no_command --description 'Test if sdkman has yet to be given the main command' - set cmd (commandline -opc) - if [ (count $cmd) -eq 1 ] - return 0 - end - return 1 -end - -function __fish_sdkman_using_command - set cmd (commandline -opc) - if [ (count $cmd) -eq 2 ] - if [ $argv[1] = $cmd[2] ] - return 0 - end - end - return 1 -end - -function __fish_sdkman_using_subcommand - set cmd (commandline -opc) - set cmd_main $argv[1] - set cmd_sub $argv[2] - - if [ (count $cmd) -gt 2 ] - if [ $cmd_main = $cmd[2] ]; and [ $cmd_sub = $cmd[3] ] - return 0 - end - end - return 1 -end - -function __fish_sdkman_specifying_candidate - set cmd (commandline -opc) - - if [ (count $cmd) -gt 2 ] - if [ $argv[1] = $cmd[2] ] - return 0 - end - end - return 1 -end - -function __fish_sdkman_candidates - cat ~/.sdkman/var/candidates | tr ',' '\n' -end - -function __fish_sdkman_installed_versions - set cmd (commandline -opc) - ls -v1 ~/.sdkman/candidates/$cmd[3] | grep -v current -end - -# install -complete -c sdk -f -n '__fish_sdkman_no_command' -a 'install' -d 'Install new version' -complete -c sdk -f -n '__fish_sdkman_no_command' -a 'i' -d 'Install new version' -complete -c sdk -f -n '__fish_sdkman_using_command install' -a "(__fish_sdkman_candidates)" -complete -c sdk -f -n '__fish_sdkman_using_command i' -a "(__fish_sdkman_candidates)" - -# uninstall -complete -c sdk -f -n '__fish_sdkman_no_command' -a 'uninstall' -d 'Uninstall version' -complete -c sdk -f -n '__fish_sdkman_no_command' -a 'rm' -d 'Uninstall version' -complete -c sdk -f -n '__fish_sdkman_using_command uninstall' -a "(__fish_sdkman_candidates)" -complete -c sdk -f -n '__fish_sdkman_using_command rm' -a "(__fish_sdkman_candidates)" -complete -c sdk -f -n '__fish_sdkman_specifying_candidate uninstall' -a "(__fish_sdkman_installed_versions)" -complete -c sdk -f -n '__fish_sdkman_specifying_candidate rm' -a "(__fish_sdkman_installed_versions)" - -# list -complete -c sdk -f -n '__fish_sdkman_no_command' -a 'list' -d 'List versions' -complete -c sdk -f -n '__fish_sdkman_no_command' -a 'ls' -d 'List versions' -complete -c sdk -f -n '__fish_sdkman_using_command list' -a "(__fish_sdkman_candidates)" -complete -c sdk -f -n '__fish_sdkman_using_command ls' -a "(__fish_sdkman_candidates)" -complete -c sdk -f -n '__fish_sdkman_specifying_candidate list' -a "(__fish_sdkman_installed_versions)" -complete -c sdk -f -n '__fish_sdkman_specifying_candidate ls' -a "(__fish_sdkman_installed_versions)" - -# use -complete -c sdk -f -n '__fish_sdkman_no_command' -a 'use' -d 'Use specific version' -complete -c sdk -f -n '__fish_sdkman_no_command' -a 'u' -d 'Use specific version' -complete -c sdk -f -n '__fish_sdkman_using_command use' -a "(__fish_sdkman_candidates)" -complete -c sdk -f -n '__fish_sdkman_using_command u' -a "(__fish_sdkman_candidates)" -complete -c sdk -f -n '__fish_sdkman_specifying_candidate use' -a "(__fish_sdkman_installed_versions)" -complete -c sdk -f -n '__fish_sdkman_specifying_candidate u' -a "(__fish_sdkman_installed_versions)" - -# default -complete -c sdk -f -n '__fish_sdkman_no_command' -a 'default' -d 'Set default version' -complete -c sdk -f -n '__fish_sdkman_no_command' -a 'd' -d 'Set default version' -complete -c sdk -f -n '__fish_sdkman_using_command default' -a "(__fish_sdkman_candidates)" -complete -c sdk -f -n '__fish_sdkman_using_command d' -a "(__fish_sdkman_candidates)" -complete -c sdk -f -n '__fish_sdkman_specifying_candidate default' -a "(__fish_sdkman_installed_versions)" -complete -c sdk -f -n '__fish_sdkman_specifying_candidate d' -a "(__fish_sdkman_installed_versions)" - -# current -complete -c sdk -f -n '__fish_sdkman_no_command' -a 'current' -d 'Display current version' -complete -c sdk -f -n '__fish_sdkman_no_command' -a 'c' -d 'Display current version' -complete -c sdk -f -n '__fish_sdkman_using_command current' -a "(__fish_sdkman_candidates)" -complete -c sdk -f -n '__fish_sdkman_using_command c' -a "(__fish_sdkman_candidates)" -complete -c sdk -f -n '__fish_sdkman_specifying_candidate current' -a "(__fish_sdkman_installed_versions)" -complete -c sdk -f -n '__fish_sdkman_specifying_candidate c' -a "(__fish_sdkman_installed_versions)" - -# upgrade -# TODO - -# version -complete -c sdk -f -n '__fish_sdkman_no_command' -a 'version' -d 'Display version' -complete -c sdk -f -n '__fish_sdkman_no_command' -a 'v' -d 'Display version' -complete -c sdk -f -n '__fish_sdkman_using_command version' -complete -c sdk -f -n '__fish_sdkman_using_command v' - -# broadcast -complete -c sdk -f -n '__fish_sdkman_no_command' -a 'broadcast' -d 'Display broadcast message' -complete -c sdk -f -n '__fish_sdkman_no_command' -a 'b' -d 'Display broadcast message' -complete -c sdk -f -n '__fish_sdkman_using_command broadcast' -complete -c sdk -f -n '__fish_sdkman_using_command b' - -# help -complete -c sdk -f -n '__fish_sdkman_no_command' -a 'help' -d 'Display help message' -complete -c sdk -f -n '__fish_sdkman_no_command' -a 'h' -d 'Display help message' -complete -c sdk -f -n '__fish_sdkman_using_command help' -complete -c sdk -f -n '__fish_sdkman_using_command h' - -# offline -complete -c sdk -f -n '__fish_sdkman_no_command' -a 'offline' -d 'Set offline status' -complete -c sdk -f -n '__fish_sdkman_using_command offline' -a 'enable disable' - -# selfupdate -complete -c sdk -f -n '__fish_sdkman_no_command' -a 'selfupdate' -d 'Update sdkman' -complete -c sdk -f -n '__fish_sdkman_using_command selfupdate' -a 'force' - -# update -# TODO - -# flush -complete -c sdk -f -n '__fish_sdkman_no_command' -a 'flush' -d 'Clear out cache' -complete -c sdk -f -n '__fish_sdkman_using_command flush' -a 'candidates broadcast archives temp' diff --git a/conf.d/sdkman.fish b/conf.d/sdk.fish similarity index 100% rename from conf.d/sdkman.fish rename to conf.d/sdk.fish