1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-09-01 09:41:44 +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>
* 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-
local ADB_DEVICE_SPECIFICATION LOG_REDIRECT
_adb() {
# rely on localoptions
setopt nonomatch
ADB_DEVICE_SPECIFICATION=""
local -a ADB_DEVICE_SPECIFICATION
local LOG_REDIRECT
if [[ $1 = -l ]]; then
# Run to load _adb and associated functions but do
@ -23,7 +22,6 @@ _adb() {
(ANDROID_SERIAL)
_adb_device_serial
ADB_DEVICE_SPECIFICATION="-s ${ANDROID_SERIAL}"
;;
(ANDROID_LOG_TAGS)
@ -80,18 +78,18 @@ _adb() {
(( $+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
_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 \
'(-d -e )-s[serial]: :_adb_device_serial' \
'( -e -s)-d[device]' \
'(-d -s)-e[emulator]' \
'-s[serial]: :_adb_device_serial' \
'( -e)-d[device]' \
'(-d )-e[emulator]' \
'1:options:_adb_options_handler' \
'*: : _default'
return;
}
return
fi
(( $+functions[_adb_check_log_redirect] )) && _adb_check_log_redirect
@ -163,27 +161,13 @@ _adb_sanitize_context () {
(( $+functions[_adb_device_specification] )) ||
_adb_device_specification () {
local integer i=1
foreach word ($words)
do
i=$(( ++i ))
case ${words[$i]} in
(-d|-e)
ADB_DEVICE_SPECIFICATION="${words[$i]}"
break
;;
(-s)
ADB_DEVICE_SPECIFICATION="-s ${words[$i + 1]}"
break
;;
(-*)
continue
;;
(*)
break
;;
esac
done
local -a word
word=($words[(R)-[des]])
if [[ $words[(R)-s] == -s ]]; then
local i=$words[(I)-s]
word=($words[i,i+1])
fi
ADB_DEVICE_SPECIFICATION=($word)
}
(( $+functions[_adb_dispatch_shell] )) ||
@ -230,8 +214,10 @@ _adb_pm_list () {
;;
(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
}
@ -319,16 +305,10 @@ _adb_package_manager_handler () {
(( $+functions[_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 \
'-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] )) ||
@ -390,7 +370,7 @@ _adb_dispatch_connection_handling () {
(( $+functions[_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"
}
@ -414,18 +394,27 @@ _adb_trace_opts() {
(( $+functions[_adb_device_serial] )) ||
_adb_device_serial() {
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] )) ||
_adb_logcat_filter_specification() {
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
if _cache_invalid "$cacheid" || ! _retrieve_cache "$cacheid"
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
fi
local expl
@ -466,7 +455,7 @@ _adb_shell_commands_handler() {
(( $+functions[_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
}
@ -480,7 +469,7 @@ _adb_remote_folder () {
pref=${pref%/*}/
fi
# 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:#*/}%/})
files=(${${files:|dirs}:#*\*(/|)})
_adb_device_available && \
@ -495,17 +484,24 @@ _adb_installed_packages() {
zstyle ":completion:${curcontext}:" cache-policy _adb_cache_policy_single_command
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
if _cache_invalid "$cacheid" || ! _retrieve_cache "$cacheid"
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
fi
_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] )) ||
_adb_cache_policy_single_command () {
typeset -a old