fish-shell/share/completions/java_home.fish

46 lines
2.3 KiB
Fish
Raw Normal View History

2023-08-31 22:35:14 +08:00
function __fish_complete_macos_java_version
set -l json (/usr/libexec/java_home -X|plutil -convert json -o - -)
osascript -l JavaScript -s o -e "JSON.parse('$json').forEach(e => console.log(`\${e.JVMVersion}\t\${e.JVMArch} \${e.JVMName} by--exec \${e.JVMVendor}`))"
end
function __fish_complete_macos_java_home_exec
# seperate the buffer into two parts
# where the first used to get the JAVA_HOME
# and the second is the subcommand to complete
set -l cmds (string replace -a -r ' *java_home *' '' (commandline) )
set -l cmds (string replace -r ' *--exec *' \n -- "$cmds")
# parse the java_home argv to get $JAVA_HOME/bin
argparse v/version= a/arch= -- "$cmds[1]"
set -l get_java_home /usr/libexec/java_home
if test -n "$_flag_v"
set get_java_home "$get_java_home -v $_flag_v"
end
if test -n "$_flag_a"
set get_java_home "$get_java_home -a $_flag_a"
end
set -l java_bin_dir (eval $get_java_home)"/bin"
# if such $binary in $JAVA_HOME/bin
# complete the subcommand
# else
# complete using $binary as prefix
set -l binary (string match -r '^.*?(?= )' $cmds[2])
if test -f "$java_bin_dir/$binary"
complete -C $cmds[2]
else
command ls $java_bin_dir | string match -r ^"$binary.*"
end
end
complete -ec java_home
complete -xc java_home -n "__fish_not_contain_opt -s h exec " -l exec
complete -xc java_home -n "__fish_contains_opt exec " -a "(__fish_complete_macos_java_home_exec)"
complete -xc java_home -n "__fish_not_contain_opt -s h exec " -s v -l version -a '(__fish_complete_macos_java_version)' -d 'Filter versions (as if JAVA_VERSION had been set in the environment).'
complete -xc java_home -n "__fish_not_contain_opt -s h exec " -s a -l arch -a "arm64 x86_64" -d 'Filter architecture (as if JAVA_ARCH had been set in the environment).'
complete -xc java_home -n "__fish_not_contain_opt -s h exec " -s h -l help -d 'Usage information.'
complete -fc java_home -n "__fish_not_contain_opt -s h exec " -s F -l failfast -d 'Fail when filters return no JVMs, do not continue with default.'
complete -fc java_home -n "__fish_not_contain_opt -s h exec " -s X -l xml -d 'Print full JVM list and additional data as XML plist.'
complete -fc java_home -n "__fish_not_contain_opt -s h exec " -s V -l verbose -d 'Print full JVM list with architectures.'