1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
function _pidcat()
{
local cur prev opts cmds c subcommand device_selected
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
prevprev="${COMP_WORDS[COMP_CWORD-2]}"
opts="-d -e -h -l -s -w
--always-display-tags --color-gc --device --emulator --help --min-level
--serial --tag-width"
device_selected=""
# if there are multiple devices plugged in, prompt the user to specify which
# so that the list of installed packaged can be fetched from the device
case "${prev}" in
-d|-e)
device_selected="${prev}"
;;
--device)
device_selected="-d"
;;
--emulator)
device_selected="-e"
;;
esac
# use device set by serial number
case "${prevprev}" in
-s|--serial)
device_selected="-s ${prev}"
;;
esac
if [ -z "$device_selected" ] && [ "$prev" != "-s" ]; then
local num_devices=$(( $(adb devices 2>/dev/null|wc -l) - 2 ))
if [ "$num_devices" -gt "1" ]; then
# With multiple devices, you must choose a device first.
COMPREPLY=( $(compgen -W "-s" -- ${cur}) )
return 0
fi
fi
case "${cur}" in
-*)
COMPREPLY=( $(compgen -W "$opts" -- ${cur}) )
return 0
;;
esac
case "${prev}" in
-l|--min-level)
COMPREPLY=( $(compgen -W "V D I W E F" -- ${cur}) )
return 0;
;;
-s|--serial)
if [ -z "$device_selected" ]; then
# Use 'adb devices' to list serial numbers.
COMPREPLY=( $(compgen -W "$(adb devices|grep 'device$'|cut -f1)" -- ${cur} ) )
return 0
fi
;;
esac
# Try three methods for getting appIDs, at least one should work on all devices.
# Filter stderr on device/emulator to reduce data coming back from adb.
# Filter stderr on this machine to prevent adb errors from showing from tab completion
local apks=$(adb $device_selected shell '(pm package list packages -3; cmd package list packages -3; ps) 2> /dev/null' 2> /dev/null \
| sed -n -e 's,^u[0-9].* \([^/][^/]*$\),\1,p' -e 's,^package:,,p' \
| tr '\n' ' ' \
| tr -d '\r' )
COMPREPLY=( $(compgen -W "$apks" -- ${cur}) )
return 0
}
complete -F _pidcat pidcat
# Local variables:
# mode: shell-script
# sh-basic-offset: 4
# sh-indent-comment: t
# indent-tabs-mode: nil
# End:
# ex: ts=4 sw=4 et filetype=sh
|