Merge pull request #980 from zsh-users/add-android-commands

Add avdmanager and sdkmanager completion
This commit is contained in:
Shohei YOSHIDA 2023-01-10 10:31:02 +09:00 committed by GitHub
commit 45d07f79b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 258 additions and 0 deletions

197
src/_avdmanager Normal file
View File

@ -0,0 +1,197 @@
#compdef avdmanager
# ------------------------------------------------------------------------------
# Copyright (c) 2023 Github zsh-users - https://github.com/zsh-users
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.
# ------------------------------------------------------------------------------
# Description
# -----------
#
# Completion script for avdmanager(https://developer.android.com/studio/command-line/avdmanager)
#
# ------------------------------------------------------------------------------
# Authors
# -------
#
# * Shohei Yoshida (https://github.com/syohex) <syohex@gmail.com>
#
# ------------------------------------------------------------------------------
_avdmanager() {
typeset -A opt_args
local context state line
local curcontext="$curcontext"
local ret=1
_arguments -C -A "-*" \
'(- *)'{-h,--help}'[Print help message]' \
'(-s --silent)'{-s,--silent}'[Silent mode, shows error only]' \
'(-v --verbose)'{-v,--verbose}'[Verbose mode, shows errors, warnings and all messages]' \
'--clear-cache[Clear the SDK Manager repository manifest cache]' \
'1: :_avdmanager_subcommands' \
'*::arg:->args' \
&& ret=0
case "$state" in
(args)
if (( $+functions[_avdmanager_${words[1]}] )); then
_avdmanager_${words[1]} && ret=0
else
ret=0
fi
;;
esac
return ret
}
(( $+functions[_avdmanager_list] )) ||
_avdmanager_list() {
local ret=1
_arguments -C \
'1: :(avd target device)' \
'*:: :->arg' \
&& ret=0
case $state in
(arg)
case $words[1] in
(avd|target|device)
_arguments \
'(-0 --null)'{-0,--null}'[Terminate lines with \0 instead of \n]' \
'(-c --compact)'{-c,--compact}'[Compact output]' \
&& ret=0
;;
esac
;;
esac
return $ret
}
(( $+functions[_avdmanager_create] )) ||
_avdmanager_create() {
local ret=1
_arguments -C \
'1: :(avd)' \
'*:: :->arg' \
&& ret=0
case $state in
(arg)
case $words[1] in
(avd)
_arguments \
'(-c --sdcard)'{-c,--sdcard}'[Path to a shared SD card image]: :_files' \
'(-g --tag)'{-g,--tag}'[The sys-img tag to use for the AVD]:tag' \
'(-p --path)'{-p,--path}'[Directory where the new AVD will be created]' \
'(-k --package)'{-k,--package}'[Package path of the system image for this AVD]:package' \
'(-n --name)'{-n,--name}'[Name of the new AVD]:name' \
'--skin[The optional name of a skin to use with this device]' \
'(-f --force)'{-f,--force}'[Forces creation]' \
'(-b --abi)'{-b,--abi}'[The ABI to use for the AVD]:abi' \
'(-d --device)'{-d,--device}'[The optional device definition to use]' \
&& ret=0
;;
esac
;;
esac
return $ret
}
(( $+functions[_avdmanager_move] )) ||
_avdmanager_move() {
local ret=1
_arguments -C \
'1: :(avd)' \
'*:: :->arg' \
&& ret=0
case $state in
(arg)
case $words[1] in
(avd)
_arguments \
'(-p --path)'{-p,--path}"[Path to the AVD's new directory]: :_files -/" \
'(-n --name)'{-n,--name}'[Name of the AVD to delete]: :_avdmanager_avds' \
'(-r --rename)'{-r,--rename}'[New name of the AVD]' \
&& ret=0
;;
esac
;;
esac
return $ret
}
(( $+functions[_avdmanager_delete] )) ||
_avdmanager_delete() {
local ret=1
_arguments -C \
'1: :(avd)' \
'*:: :->arg' \
&& ret=0
case $state in
(arg)
case $words[1] in
(avd)
_arguments \
'(-n --name)'{-n,--name}'[Name of the AVD to delete]: :_avdmanager_avds' \
&& ret=0
;;
esac
;;
esac
return $ret
}
(( $+functions[_avdmanager_subcommands] )) ||
_avdmanager_subcommands() {
local -a commands=(
"list:Lists existing targets or virtual devices"
"create:Creates a new Android Virtual Device"
"move:Moves or renames an Android Virtual Device"
"delete:Deletes an Android Virtual Device"
)
_describe -t commands 'subcommand' commands
}
(( $+functions[_avdmanager_avds] )) ||
_avdmanager_avds() {
local -a avds=(${(@f)"$(avdmanager list avd -c)"})
_values 'android virtual devices' $avds
}
_avdmanager "$@"
# Local Variables:
# mode: Shell-Script
# sh-indentation: 2
# indent-tabs-mode: nil
# sh-basic-offset: 2
# End:
# vim: ft=zsh sw=2 ts=2 et

61
src/_sdkmanager Normal file
View File

@ -0,0 +1,61 @@
#compdef sdkmanager
# ------------------------------------------------------------------------------
# Copyright (c) 2023 Github zsh-users - https://github.com/zsh-users
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.
# ------------------------------------------------------------------------------
# Description
# -----------
#
# Completion script for sdkmanager(https://developer.android.com/studio/command-line/sdkmanager)
#
# ------------------------------------------------------------------------------
# Authors
# -------
#
# * Shohei Yoshida (https://github.com/syohex) <syohex@gmail.com>
#
# ------------------------------------------------------------------------------
_arguments \
'(- *)--help[show help message]' \
'(- *)--version[print the current version of sdkmanager]' \
'--install[install or update package]' \
'--uninstall[uninstall the listed packages]' \
'--update[all installed packages are updated to the latest version]' \
'--list_installed[all installed packages are printed out]' \
'--licenses[show and offer the option to accept licenses for all available packages]' \
'--sdk_root=[use the specified SDK root instead of the SDK containing this tool]: :_files -/' \
'--channel=[include packages in channels up to channel ID]: :((0\:Stable 1\:Beta 2\:Dev 3\:Canary))' \
'--include_obsolete[show/update obsolete packages in the package listing]' \
'--newer[show only new and/or updatable packages]' \
'--no_https[force all connections to use http rather than https]' \
'--proxy=[connect via a proxy of the given type]: :(http socks)' \
'--proxy_host=[IP or DNS address of the proxy to use]:address' \
'--proxy_port=[proxy port to connect to]:port' \
'--verbose[enable verbose output]'
# Local Variables:
# mode: Shell-Script
# sh-indentation: 2
# indent-tabs-mode: nil
# sh-basic-offset: 2
# End:
# vim: ft=zsh sw=2 ts=2 et