From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25609 invoked by alias); 29 Mar 2018 11:26:04 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: List-Unsubscribe: X-Seq: 42564 Received: (qmail 5348 invoked by uid 1010); 29 Mar 2018 11:26:04 -0000 X-Qmail-Scanner-Diagnostics: from mail-lf0-f49.google.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(209.85.215.49):SA:0(-1.9/5.0):. Processed in 15.228109 secs); 29 Mar 2018 11:26:04 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, SPF_PASS,T_DKIM_INVALID autolearn=ham autolearn_force=no version=3.4.1 X-Envelope-From: mikachu@gmail.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=I7klvoXWWWYT/qTCliiG7NLw3Kw3N9BPfzPqO5UMSn8=; b=otsdPt2b/6wjEyx10mV2aRZUJ6IN/9itYZZDoPlHZ+4ukY5awCCkA9CaWrtjdeeWpP 4zNDzzQP3lz38YYxsLSXUe1FnWsURuCat+PvVJHJ5ihtqOrBlYdOsBbmJ1FffJgaurlj sL8ErHAdaXJkmD6yC7HbZUhm8ge859uz5ac7YJWbY89MoyVqDUd2ovzwL017ZM2Tr8YR x+AWL1sqSxq+YCf2zZJYtcXbrBU1Z5W3q8Es7hFarw0xGIwkkvtVBx7mpj98N7Ic80HS KjjTDNIKDrHg9F2uXN8hHPxbjAZBQ5ZWAxdVpiX/mJanBl6yMZOtPPnfWu4ojXFfxZZn 3NJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=I7klvoXWWWYT/qTCliiG7NLw3Kw3N9BPfzPqO5UMSn8=; b=gyBwgpCVzP56f+zWBC4pp8y1USnrpzgYI5Skm0bYeq7EV5fVTl0E3KIbBbbxQ3ONIu 2rUhPS4Ts+QYRYHyGqrkb1DLysWhUW2uZyvhG3BfOrbxg+tKvLXl3gK+du+0q86LFGci 4GeEuRdATvz1W/cGcD+jg0j9qGEMqb9pQR583XBRsUcWbkPOhwYixmwygksIWhyV5FYL 2VgQq3JXHC+M9hHjPqYoxo3kERj4bW36lpchX6bB1HMct+XEfZryWjxZmPDT6MEqLbIT F3llLJkWnWiaM7WPerFxuiUX+q8Si7XgAIY440TBGYIcy/GYrfQb2I7/sdgY9h/I8DoN V/Lw== X-Gm-Message-State: AElRT7Gn+xF4mQvFjevqKcj0qU12+0qy1XWJT868ZIkJVaI4V8YLSHds BCQPPMXQx6ryQdjaDcO97DInpg== X-Google-Smtp-Source: AIpwx492M4w4vnyYdbNy6PTOtV76wtLxKUTmf6VcZ3gUxRGexPUPQ8aAWHYdWTIE3AtlKBUjg+aKRg== X-Received: by 10.46.156.13 with SMTP id s13mr5059979lji.29.1522322743273; Thu, 29 Mar 2018 04:25:43 -0700 (PDT) From: Mikael Magnusson To: zsh-workers@zsh.org Subject: [PATCH] _adb: Various improvements Date: Thu, 29 Mar 2018 13:25:33 +0200 Message-Id: <20180329112533.28170-1-mikachu@gmail.com> X-Mailer: git-send-email 2.15.1 From: Mikael Magnusson Show product as description by default Add zstyle for naming devices via serial number Add --user to uninstall and other improvements --- Completion/Unix/Command/_adb | 94 +++++++++++++++++++++----------------------- 1 file changed, 45 insertions(+), 49 deletions(-) diff --git a/Completion/Unix/Command/_adb b/Completion/Unix/Command/_adb index 6b56d17484..52f0928d57 100644 --- a/Completion/Unix/Command/_adb +++ b/Completion/Unix/Command/_adb @@ -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 -d 2> /dev/null '$pref'*/ '$pref'*')"}%$'\r'}) + files=(${${(f)"$(adb ${ADB_DEVICE_SPECIFICATION} shell 'ls -d 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 -- 2.15.1