--- Completion/Unix/Command/_adb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Completion/Unix/Command/_adb b/Completion/Unix/Command/_adb index 1375813bb2..9c0118bb72 100644 --- a/Completion/Unix/Command/_adb +++ b/Completion/Unix/Command/_adb @@ -43,6 +43,7 @@ _adb() { "disconnect" "emu" "enable-verity" + "exec-out" "forward" "get-devpath" "get-serialno" @@ -109,7 +110,7 @@ _adb_dispatch_command () { fi case ${curcontext} in - (*:adb-shell:) + (*:adb-shell:|*:adb-exec-out:) (( $+functions[_adb_dispatch_shell] )) && _adb_dispatch_shell ;; (*:adb-backup:) -- 2.15.1
From: Mikael Magnusson <mikael.magnusson@sony.com> --- Completion/Unix/Command/_adb | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/Completion/Unix/Command/_adb b/Completion/Unix/Command/_adb index 9c0118bb72..c86f9cbd0d 100644 --- a/Completion/Unix/Command/_adb +++ b/Completion/Unix/Command/_adb @@ -189,6 +189,12 @@ _adb_dispatch_shell () { (pm) (( $+functions[_adb_package_manager_handler] )) && _adb_package_manager_handler ;; + (cmd) + (( $+functions[_adb_cmd_handler] )) && _adb_cmd_handler + ;; + (dumpsys) + (( $+functions[_adb_dumpsys_handler] )) && _adb_dumpsys_handler + ;; (*) _arguments '*: :_adb_remote_folder' ;; @@ -319,6 +325,20 @@ _adb_package_manager_handler () { esac } +(( $+functions[_adb_cmd_handler] )) || +_adb_cmd_handler () { + local -a cmds + cmds=(${${${(f)"$(adb ${ADB_DEVICE_SPECIFICATION} exec-out cmd -l)"}[2,-1]}##[[:space:]]##}) + _wanted dumpsys expl 'cmd command' compadd ${cmds%$'\r'} +} + +(( $+functions[_adb_dumpsys_handler] )) || +_adb_dumpsys_handler () { + local -a services + services=(${${${(f)"$(adb ${ADB_DEVICE_SPECIFICATION} exec-out dumpsys -l)"}[2,-1]}##[[:space:]]##}) + _wanted dumpsys expl 'dumpsys service' compadd ${services%$'\r'} +} + (( $+functions[_adb_dispatch_uninstall] )) || _adb_dispatch_uninstall () { _arguments \ @@ -466,7 +486,7 @@ _adb_options_handler() { (( $+functions[_adb_shell_commands_handler] )) || _adb_shell_commands_handler() { local expl - _wanted adb_shell_commands expl 'adb shell command' compadd ls pm am mkdir rmdir rm cat + _wanted adb_shell_commands expl 'adb shell command' compadd ls pm am mkdir rmdir rm cat cmd dumpsys } (( $+functions[_adb_device_available] )) || -- 2.15.1
From: Mikael Magnusson <mikael.magnusson@sony.com> --- Completion/Unix/Command/_adb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Completion/Unix/Command/_adb b/Completion/Unix/Command/_adb index c86f9cbd0d..a429954a88 100644 --- a/Completion/Unix/Command/_adb +++ b/Completion/Unix/Command/_adb @@ -432,7 +432,7 @@ _adb_device_serial() { local expl local -a devices device_desc local device - devices=( $(adb devices -l | sed -n 's/^\([^[:space:]]*\)[[:space:]]*.*product:\([^[:space:]]*\).*$/\1:\2/p') ) + devices=( $(adb devices -l | sed -n -e 's/:/\\:/' -e '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 -- 2.15.1
From: Mikael Magnusson <mikael.magnusson@sony.com> --- Completion/Unix/Command/_adb | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/Completion/Unix/Command/_adb b/Completion/Unix/Command/_adb index a429954a88..8d3eec5427 100644 --- a/Completion/Unix/Command/_adb +++ b/Completion/Unix/Command/_adb @@ -195,6 +195,9 @@ _adb_dispatch_shell () { (dumpsys) (( $+functions[_adb_dumpsys_handler] )) && _adb_dumpsys_handler ;; + (start|stop) + (( $+functions[_adb_startstop] )) && _adb_startstop ${words[2]} + ;; (*) _arguments '*: :_adb_remote_folder' ;; @@ -339,6 +342,17 @@ _adb_dumpsys_handler () { _wanted dumpsys expl 'dumpsys service' compadd ${services%$'\r'} } +(( $+functions[_adb_startstop] )) || +_adb_startstop () { + local -a services + local -A service_status + services=(${(f)"$(adb ${ADB_DEVICE_SPECIFICATION} exec-out getprop)"}) + service_status=( ${(s,: ,)${(j,: ,)${(M)services:#\[init.svc.*}}} ) + local -A map=(start stopped stop running) + services=( ${(k)service_status[(R)*$map[$1]*]} ) + _wanted services expl "$map[$1] services" compadd - ${${${services#\[}%\]}#init.svc.} +} + (( $+functions[_adb_dispatch_uninstall] )) || _adb_dispatch_uninstall () { _arguments \ @@ -486,7 +500,7 @@ _adb_options_handler() { (( $+functions[_adb_shell_commands_handler] )) || _adb_shell_commands_handler() { local expl - _wanted adb_shell_commands expl 'adb shell command' compadd ls pm am mkdir rmdir rm cat cmd dumpsys + _wanted adb_shell_commands expl 'adb shell command' compadd ls pm am mkdir rmdir rm cat cmd dumpsys start stop } (( $+functions[_adb_device_available] )) || -- 2.15.1
From: Mikael Magnusson <mikael.magnusson@sony.com> --- Completion/Unix/Command/_adb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Completion/Unix/Command/_adb b/Completion/Unix/Command/_adb index 8d3eec5427..b8b2470a65 100644 --- a/Completion/Unix/Command/_adb +++ b/Completion/Unix/Command/_adb @@ -176,7 +176,7 @@ _adb_device_specification () { (( $+functions[_adb_dispatch_shell] )) || _adb_dispatch_shell () { - if [[ ${#words} -le 2 ]] + if [[ $CURRENT -le 2 ]] then (( $+functions[_adb_shell_commands_handler] )) && _adb_shell_commands_handler return @@ -272,7 +272,7 @@ _adb_intent_handler () { (( $+functions[_adb_activity_manager_handler] )) || _adb_activity_manager_handler () { - if [[ ${#words} -le 3 ]] + if [[ $CURRENT -le 3 ]] then _wanted am_argument expl 'am argument' compadd start startservice broadcast instrument profile return @@ -379,12 +379,12 @@ _adb_dispatch_install () { (( $+functions[_adb_dispatch_push] )) || _adb_dispatch_push () { - if [[ ${#words} -gt 3 ]] + if [[ $CURRENT -gt 3 ]] then _message -r "Notice: you can only push a single item at a time" return fi - if [[ ${#words} -gt 2 ]] + if [[ $CURRENT -gt 2 ]] then _arguments '*: :_adb_remote_folder' else @@ -394,12 +394,12 @@ _adb_dispatch_push () { (( $+functions[_adb_dispatch_pull] )) || _adb_dispatch_pull () { - if [[ ${#words} -gt 3 ]] + if [[ $CURRENT -gt 3 ]] then _message -r "Notice: you can only pull a single item at a time" return fi - if [[ ${#words} -gt 2 ]] + if [[ $CURRENT -gt 2 ]] then _arguments '*:local file/folder:_files' else -- 2.15.1
From: Mikael Magnusson <mikael.magnusson@sony.com> This was particularly annoying when trying to complete logtags after adb logcat -s --- Completion/Unix/Command/_adb | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Completion/Unix/Command/_adb b/Completion/Unix/Command/_adb index b8b2470a65..b31b84c892 100644 --- a/Completion/Unix/Command/_adb +++ b/Completion/Unix/Command/_adb @@ -82,6 +82,7 @@ _adb() { 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 [[ $words[CURRENT-1] = -s ]] || _message -r "No (started) device specified, completions do not yet work" + #TODO handle -t transport-id _arguments \ '-s[serial]: :_adb_device_serial' \ '( -e)-d[device]' \ @@ -165,13 +166,11 @@ _adb_sanitize_context () { (( $+functions[_adb_device_specification] )) || _adb_device_specification () { - local -a word - word=($words[(R)-[des]]) - if [[ $words[(R)-s] == -s ]]; then - local i=$words[(I)-s] - word=($words[i,i+1]) + if [[ $words[2] == -[de] ]]; then + ADB_DEVICE_SPECIFICATION=($words[2]) + elif [[ $words[2] == -[st] ]]; then + ADB_DEVICE_SPECIFICATION=($words[2,3]) fi - ADB_DEVICE_SPECIFICATION=($word) } (( $+functions[_adb_dispatch_shell] )) || -- 2.15.1
From: Mikael Magnusson <mikael.magnusson@sony.com> --- Completion/Unix/Command/_adb | 54 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 3 deletions(-) diff --git a/Completion/Unix/Command/_adb b/Completion/Unix/Command/_adb index b31b84c892..5e7fbf8d0f 100644 --- a/Completion/Unix/Command/_adb +++ b/Completion/Unix/Command/_adb @@ -336,9 +336,57 @@ _adb_cmd_handler () { (( $+functions[_adb_dumpsys_handler] )) || _adb_dumpsys_handler () { - local -a services - services=(${${${(f)"$(adb ${ADB_DEVICE_SPECIFICATION} exec-out dumpsys -l)"}[2,-1]}##[[:space:]]##}) - _wanted dumpsys expl 'dumpsys service' compadd ${services%$'\r'} + if [[ $CURRENT -eq 3 ]]; then + local -a services + services=(${${${(f)"$(adb ${ADB_DEVICE_SPECIFICATION} exec-out dumpsys -l)"}[2,-1]}##[[:space:]]##}) + _wanted dumpsys expl 'dumpsys service' compadd - ${services%$'\r'} + elif [[ $CURRENT -ge 4 && $words[3] == SurfaceFlinger ]]; then + (( CURRENT -= 2 )) + shift 2 words + typeset -A opt_args + local context state state_descr line + _arguments -R \ + '--file[start/stop continuous dumpsys to file]' \ + '--no-limit[disable wrapping around continuous dumpsys at ~20MB]' \ + '--full-dump[set fullDump = true]' \ + '--allocated_buffers[show allocated buffers dump]' \ + '--display-id[show display id dump]' \ + '--dispsync[show dispsync dump]' \ + '--edid[raw edid dump for specified hwc display (binary output)]:*:hwc display:->hwcdisplay' \ + '--latency[show latency stats]:*:layer:->layer' \ + '--latency-clear[clear latency stats]:*:layer:->layer' \ + '--list[list all layers]' \ + '--planner[pass planner dump arguments]:*:planner arguments:->planner' \ + '--static-screen[show static screen stats]' \ + '--timestats[pass time stats arguments]:*:timestats arguments:->timestats' \ + '--vsync[show vsync dump]' \ + '--wide-color[show wide color info]' \ + '--frametimeline[pass frametimeline arguments]:*:frametimeline arguments:->frametimeline' \ + '--mini[show mini dump]' + if [[ $? == 300 ]]; then + case $state in + layer) + typeset -a layers + layers=(${${(f)"$(adb ${ADB_DEVICE_SPECIFICATION} exec-out dumpsys SurfaceFlinger --list)"}[2,-1]}) + _wanted dumpsys expl 'layers' compadd - ${layers%$'\r'} + ;; + planner) + _arguments \ + {--compare,-c}'[compare predictions of two hashes]:left: :right: :' \ + {--describe,-d}'[describe hash]:hash: :' \ + {--help,-h}'[help]' \ + {--similar,-s}'[show similar stacks matching given plan]:plan: :' \ + {--layers,-l}'[show current layers]' + ;; + timestats) + _arguments -disable -enable -clear -dump -maxlayers'[only with -dump]:int:' + ;; + frametimeline) + _arguments -jank -all + ;; + esac + fi + fi } (( $+functions[_adb_startstop] )) || -- 2.15.1
--- Completion/Unix/Command/_adb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Completion/Unix/Command/_adb b/Completion/Unix/Command/_adb index 5e7fbf8d0f..8a071fa8ee 100644 --- a/Completion/Unix/Command/_adb +++ b/Completion/Unix/Command/_adb @@ -498,6 +498,8 @@ _adb_device_serial() { for device in $device_desc; do if [[ -n $devices[(r)${device%:*}:*] ]]; then devices[(i)${device%:*}:*]=$device + elif [[ -n $devices[(r)*:${device%:*}] ]]; then + devices[(i)*:${device%:*}]=${${devices[(r)*:${device%:*}]}%:*}:${device#*:} fi done _describe -t dev_serial 'available device' devices -- 2.15.1