1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-09-11 13:01:28 +02:00

42564: _adb: Various improvements

Show product as description by default
    Add zstyle for naming devices via serial number
    Add --user to uninstall
    and other improvements
This commit is contained in:
Mikael Magnusson 2018-03-29 21:27:11 +02:00
parent de7c06a3df
commit 1ee82c5903
2 changed files with 49 additions and 49 deletions

View file

@ -1,3 +1,7 @@
2018-03-29 Mikael Magnusson <mikachu@gmail.com>
* 42564: Completion/Unix/Command/_adb: Various improvements
2018-03-28 Oliver Kiddle <okiddle@yahoo.co.uk> 2018-03-28 Oliver Kiddle <okiddle@yahoo.co.uk>
* 42548: Completion/Unix/Command/_pwgen: new pwgen completion * 42548: Completion/Unix/Command/_pwgen: new pwgen completion

View file

@ -1,12 +1,11 @@
#compdef adb -value-,ADB_TRACE,-default- -value-,ANDROID_SERIAL,-default- -value-,ANDROID_LOG_TAGS,-default- #compdef adb -value-,ADB_TRACE,-default- -value-,ANDROID_SERIAL,-default- -value-,ANDROID_LOG_TAGS,-default-
local ADB_DEVICE_SPECIFICATION LOG_REDIRECT
_adb() { _adb() {
# rely on localoptions # rely on localoptions
setopt nonomatch setopt nonomatch
ADB_DEVICE_SPECIFICATION="" local -a ADB_DEVICE_SPECIFICATION
local LOG_REDIRECT
if [[ $1 = -l ]]; then if [[ $1 = -l ]]; then
# Run to load _adb and associated functions but do # Run to load _adb and associated functions but do
@ -23,7 +22,6 @@ _adb() {
(ANDROID_SERIAL) (ANDROID_SERIAL)
_adb_device_serial _adb_device_serial
ADB_DEVICE_SPECIFICATION="-s ${ANDROID_SERIAL}"
;; ;;
(ANDROID_LOG_TAGS) (ANDROID_LOG_TAGS)
@ -80,18 +78,18 @@ _adb() {
(( $+functions[_adb_device_specification] )) && _adb_device_specification (( $+functions[_adb_device_specification] )) && _adb_device_specification
adb ${=ADB_DEVICE_SPECIFICATION} shell exit 2>/dev/null || { if ! adb ${ADB_DEVICE_SPECIFICATION} shell exit 2>/dev/null; then
# early bail-out until a single valid device/emulator is specified and up-and-running # early bail-out until a single valid device/emulator is specified and up-and-running
_message -r "No (started) device specified, completions do not yet work" [[ $words[CURRENT-1] = -s ]] || _message -r "No (started) device specified, completions do not yet work"
_arguments \ _arguments \
'(-d -e )-s[serial]: :_adb_device_serial' \ '-s[serial]: :_adb_device_serial' \
'( -e -s)-d[device]' \ '( -e)-d[device]' \
'(-d -s)-e[emulator]' \ '(-d )-e[emulator]' \
'1:options:_adb_options_handler' \ '1:options:_adb_options_handler' \
'*: : _default' '*: : _default'
return; return
} fi
(( $+functions[_adb_check_log_redirect] )) && _adb_check_log_redirect (( $+functions[_adb_check_log_redirect] )) && _adb_check_log_redirect
@ -163,27 +161,13 @@ _adb_sanitize_context () {
(( $+functions[_adb_device_specification] )) || (( $+functions[_adb_device_specification] )) ||
_adb_device_specification () { _adb_device_specification () {
local integer i=1 local -a word
foreach word ($words) word=($words[(R)-[des]])
do if [[ $words[(R)-s] == -s ]]; then
i=$(( ++i )) local i=$words[(I)-s]
case ${words[$i]} in word=($words[i,i+1])
(-d|-e) fi
ADB_DEVICE_SPECIFICATION="${words[$i]}" ADB_DEVICE_SPECIFICATION=($word)
break
;;
(-s)
ADB_DEVICE_SPECIFICATION="-s ${words[$i + 1]}"
break
;;
(-*)
continue
;;
(*)
break
;;
esac
done
} }
(( $+functions[_adb_dispatch_shell] )) || (( $+functions[_adb_dispatch_shell] )) ||
@ -230,8 +214,10 @@ _adb_pm_list () {
;; ;;
(features) (features)
;; ;;
(users)
;;
(*) (*)
_wanted pm_list_argument expl 'pm list argument' compadd packages permission-groups permissions instrumentation features _wanted pm_list_argument expl 'pm list argument' compadd packages permission-groups permissions instrumentation features users
;; ;;
esac esac
} }
@ -319,16 +305,10 @@ _adb_package_manager_handler () {
(( $+functions[_adb_dispatch_uninstall] )) || (( $+functions[_adb_dispatch_uninstall] )) ||
_adb_dispatch_uninstall () { _adb_dispatch_uninstall () {
argcount=${#${(M)words#-*}}
if [[ $CURRENT -gt (( argcount + 2 )) ]]
then
_message -r "Notice: you can only uninstall one package at a time"
return
fi
_arguments \ _arguments \
'-k[keep data and cache]' \ '-k[keep data and cache]' \
'*:installed package:_adb_installed_packages' '--user[uninstall for user id]:user id:_adb_users' \
'1:installed package:_adb_installed_packages'
} }
(( $+functions[_adb_dispatch_install] )) || (( $+functions[_adb_dispatch_install] )) ||
@ -390,7 +370,7 @@ _adb_dispatch_connection_handling () {
(( $+functions[_adb_check_log_redirect] )) || (( $+functions[_adb_check_log_redirect] )) ||
_adb_check_log_redirect () { _adb_check_log_redirect () {
LOG_REDIRECT=${$(adb ${=ADB_DEVICE_SPECIFICATION} shell getprop log.redirect-stdio 2>/dev/null)// LOG_REDIRECT=${$(adb ${ADB_DEVICE_SPECIFICATION} shell getprop log.redirect-stdio 2>/dev/null)//
/} /}
[[ ${LOG_REDIRECT[1,4]} == "true" ]] && _message -r "Notice: stdio log redirection enabled on the device, so some completions will not work" [[ ${LOG_REDIRECT[1,4]} == "true" ]] && _message -r "Notice: stdio log redirection enabled on the device, so some completions will not work"
} }
@ -414,18 +394,27 @@ _adb_trace_opts() {
(( $+functions[_adb_device_serial] )) || (( $+functions[_adb_device_serial] )) ||
_adb_device_serial() { _adb_device_serial() {
local expl local expl
_wanted dev_serial expl 'available devices' compadd $(command adb devices | sed -n 's/^\([^[:space:]]*\)\t.*$/\1/p') local -a devices device_desc
local device
devices=( $(adb devices -l | sed -n 's/^\([^[:space:]]*\)[[:space:]]*.*product:\([^[:space:]]*\).*$/\1:\2/p') )
zstyle -a :completion:${curcontext} device-names device_desc
for device in $device_desc; do
if [[ -n $devices[(r)${device%:*}:*] ]]; then
devices[(i)${device%:*}:*]=$device
fi
done
_describe -t dev_serial 'available devices' devices
} }
(( $+functions[_adb_logcat_filter_specification] )) || (( $+functions[_adb_logcat_filter_specification] )) ||
_adb_logcat_filter_specification() { _adb_logcat_filter_specification() {
zstyle ":completion:${curcontext}:" cache-policy _adb_cache_policy_single_command zstyle ":completion:${curcontext}:" cache-policy _adb_cache_policy_single_command
local cacheid=logcat_filter_cache_${$(adb ${=ADB_DEVICE_SPECIFICATION} get-serialno)} local cacheid=logcat_filter_cache_${$(adb ${ADB_DEVICE_SPECIFICATION} get-serialno)}
typeset -a logcat_filter_tags typeset -a logcat_filter_tags
if _cache_invalid "$cacheid" || ! _retrieve_cache "$cacheid" if _cache_invalid "$cacheid" || ! _retrieve_cache "$cacheid"
then then
logcat_filter_tags=( $(command adb ${=ADB_DEVICE_SPECIFICATION} logcat -d | sed -n 's#^[VDIWEF]/\([^[:space:](]*\).*#\1#p' |sort | uniq) ) logcat_filter_tags=( $(command adb ${ADB_DEVICE_SPECIFICATION} logcat -d -v brief | sed -n 's#^[VDIWEF]/\([^[:space:](]*\).*#\1#p' |sort | uniq) )
_store_cache "$cacheid" logcat_filter_tags _store_cache "$cacheid" logcat_filter_tags
fi fi
local expl local expl
@ -466,7 +455,7 @@ _adb_shell_commands_handler() {
(( $+functions[_adb_device_available] )) || (( $+functions[_adb_device_available] )) ||
_adb_device_available() { _adb_device_available() {
[[ $(adb ${=ADB_DEVICE_SPECIFICATION} get-state 2>&1) == "device" ]] && return 0 [[ $(adb ${ADB_DEVICE_SPECIFICATION} get-state 2>&1) == "device" ]] && return 0
return 1 return 1
} }
@ -480,7 +469,7 @@ _adb_remote_folder () {
pref=${pref%/*}/ pref=${pref%/*}/
fi fi
# yes, this ls is sickening to look at, but android doesn't have printf or find # yes, this ls is sickening to look at, but android doesn't have printf or find
files=(${${(f)"$(adb ${=ADB_DEVICE_SPECIFICATION} shell 'ls -1d 2> /dev/null '$pref'*/ '$pref'*')"}%$'\r'}) files=(${${(f)"$(adb ${ADB_DEVICE_SPECIFICATION} shell 'ls -1d 2> /dev/null '$pref'*/ '$pref'*')"}%$'\r'})
dirs=(${${(M)files:#*/}%/}) dirs=(${${(M)files:#*/}%/})
files=(${${files:|dirs}:#*\*(/|)}) files=(${${files:|dirs}:#*\*(/|)})
_adb_device_available && \ _adb_device_available && \
@ -495,17 +484,24 @@ _adb_installed_packages() {
zstyle ":completion:${curcontext}:" cache-policy _adb_cache_policy_single_command zstyle ":completion:${curcontext}:" cache-policy _adb_cache_policy_single_command
fi fi
local cacheid=package_cache_${$(adb ${=ADB_DEVICE_SPECIFICATION} get-serialno)} local cacheid=package_cache_${$(adb ${ADB_DEVICE_SPECIFICATION} get-serialno)}
typeset -a installed_packages typeset -a installed_packages
if _cache_invalid "$cacheid" || ! _retrieve_cache "$cacheid" if _cache_invalid "$cacheid" || ! _retrieve_cache "$cacheid"
then then
installed_packages=(${$( adb ${=ADB_DEVICE_SPECIFICATION} shell pm list packages )//#package:/}) installed_packages=(${$( adb ${ADB_DEVICE_SPECIFICATION} shell pm list packages )//#package:/})
_store_cache "$cacheid" installed_packages _store_cache "$cacheid" installed_packages
fi fi
_wanted adb_installed_packages expl 'packages that are installed' compadd ${installed_packages} _wanted adb_installed_packages expl 'packages that are installed' compadd ${installed_packages}
} }
(( $+functions[_adb_users] )) ||
_adb_users() {
local -a users
users=( ${${${(M)${(f)"$(adb shell pm list users)"}:#*UserInfo*}#*UserInfo\{}%:*} )
_describe -t users 'users' users
}
(( $+functions[_adb_cache_policy_single_command] )) || (( $+functions[_adb_cache_policy_single_command] )) ||
_adb_cache_policy_single_command () { _adb_cache_policy_single_command () {
typeset -a old typeset -a old