From b6d797f87f00f507dc0f1527fd3a5baaa0c0e37f Mon Sep 17 00:00:00 2001 From: rxwen Date: Thu, 13 Aug 2015 07:56:25 +0800 Subject: [PATCH] add pidcat --- src/_pidcat | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 src/_pidcat diff --git a/src/_pidcat b/src/_pidcat new file mode 100644 index 0000000..fecb2a2 --- /dev/null +++ b/src/_pidcat @@ -0,0 +1,140 @@ +#compdef pidcat +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for pidcat +# (https://github.com/JakeWharton/pidcat/) +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Raymond Wen +# +# ------------------------------------------------------------------------------ + + +_pidcat() { + typeset -A opt_args + local context state line curcontext="$curcontext" pidcat_args + fullcmd=$words + local ret=1 + + _arguments -C \ + '(-e -s)-d[Use first device for log input (adb -d option)]' \ + '(-d -s)-e[Use first emulator for log input (adb -e option)]' \ + '(-d -e)-s[directs command to the USB device or emulator with the given serial number]: :_pidcat_serial_numbers' \ + '-w[Width of log tag]' \ + '-c[Clear the entire log before running]' \ + '-t[Filter output by specified tag(s)]: :_pidcat_tags' \ + '-i[Filter output by ignoring specified tag(s)]: :_pidcat_tags' \ + '-v[Print the version number and exit]' \ + '-l[Minimum level to be displayed]: :_pidcat_log_levels' \ + '-a[Print all log messages]' \ + '--color-gc[Color garbage collection]' \ + '--always-display-tags[Always display the tag name]' \ + '--current[Filter logcat by current running app]' \ + '*:: :_pidcat_processes' \ + && ret=0 + + #pidcat_args="${(fkv)words[(I)-d|-e|-s]}" + + return ret +} + +(( $+functions[_pidcat_log_levels] )) || +_pidcat_log_levels() { + local levels; levels=( + 'V:verbose (lowest priority)' + 'D:debug' + 'I:info' + 'W:warning' + 'E:error' + 'F:fatal' + 'S:silent (highest priority, on which nothing is ever printed)' + ) + _describe -t log-levels 'log level' levels "$@" +} + +device="" +get_device_from_cmd() { + if [[ $fullcmd =~ '.*-d.*' ]]; + then + device=$device" -d " + fi + if [[ $fullcmd =~ '.*-e.*' ]]; + then + device=$device" -e " + fi + if [[ $fullcmd =~ '.*[[:space:]]*(-s[[:space:]]*[[:alnum:]|.|:]*).*' ]]; + then + device=" "$device${match[1]}" " + fi +} + +(( $+functions[__pidcat_serial_numbers] )) || +_pidcat_serial_numbers() { + local serial_numbers; serial_numbers=(${${(M)${(f)"$(_call_program devices adb devices)"/:/\\:}:#*device}%%[[:space:]]*}":connected device") + [[ -n "$ANDROID_SERIAL" ]] && serial_numbers+=("$ANDROID_SERIAL:default value set in ANDROID_SERIAL environment variable") + _describe -t serial-numbers 'serial number' serial_numbers "$@" && ret=0 +} + +(( $+functions[_pidcat_processes] )) || +_pidcat_processes() { + get_device_from_cmd + local proclist; proclist=(${${${(ps:\r:)"$(_call_program proclist adb $device shell ps 2>/dev/null)"}##*\ [S|D|R]\ }:#USER\ *}) + _multi_parts "$@" / proclist +} + +(( $+functions[_pidcat_tags] )) || +_pidcat_tags() { + get_device_from_cmd + local tags; tags=(${(u)${${${(f)"$(_call_program tags adb $device logcat -d 2>/dev/null)"}%%[[:space:]]#\(*}##*\/}:#\**\*}) + _describe -t log-tags 'log tag' tags -qS: "$@" && ret=0 +} + +(( $+functions[_pidcat_buffers] )) || +_pidcat_buffers() { + local buffers; buffers=( + 'main:view the main log buffer (default)' + 'radio:view the buffer that contains radio/telephony related messages' + 'events:view the buffer containing events-related messages' + ) + _describe -t log-buffers 'log buffer' buffers "$@" && ret=0 +} + +_pidcat "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et