From 8dff766e82cf371cb15be65b78cecceefe6952ec Mon Sep 17 00:00:00 2001 From: Andrzej Zabost Date: Mon, 9 Aug 2021 19:37:07 +0200 Subject: [PATCH 1/9] feat(avd): add avd plugin --- plugins/avd/README.md | 46 ++++++++++++++++++++++ plugins/avd/avd.plugin.zsh | 81 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 127 insertions(+) create mode 100644 plugins/avd/README.md create mode 100644 plugins/avd/avd.plugin.zsh diff --git a/plugins/avd/README.md b/plugins/avd/README.md new file mode 100644 index 000000000..83d189148 --- /dev/null +++ b/plugins/avd/README.md @@ -0,0 +1,46 @@ +# avd plugin + +The avd plugin provides aliases for Android Virtual Device / Android +Emulator commands. + +To use it, add avd to the plugins array of your zshrc file: + +```zsh +plugins=(... avd) +``` + +## Requirements + +In order to make this work, you will need to have the Android `emulator` +tool set up in your path. This plugin will try to find that tool in +`$ANDROID_HOME` as a last resort, however it will make it slower and may +not work as expected. + +## Functions + +- `avds` - Lists all the AVDs +- `avd [-v] ` - Launches n-th AVD from the AVDs list printed by + `avds` + - `-v` will let stdout and stderr print to the console which is + disabled by default to avoid the clutter +- `find_emulator` - Tries to find the `emulator` tool either in your + path or `$ANDROID_HOME` directory + +## Aliases + +- `emus` - Same as `avds` +- `emu [-v] ` - Same as `avd [-v] ` + +## Exemplary usage: +``` +~/ +> avds +Pixel_2_API_30 +Samsung_Tab_A_2019_API_25 +Samsung_Tab_A_2019_API_29 + +~/ +> avd 2 +Starting emulator: Samsung_Tab_A_2019_API_25 +[3] 33463 +``` diff --git a/plugins/avd/avd.plugin.zsh b/plugins/avd/avd.plugin.zsh new file mode 100644 index 000000000..7470d690d --- /dev/null +++ b/plugins/avd/avd.plugin.zsh @@ -0,0 +1,81 @@ +function find_emulator() { + local emulator_found + + if [[ -n $(command -v emulator) ]]; then + emulator_found="emulator" + elif [[ -d "$ANDROID_HOME" ]]; then + # If there is no emulator in the path, try to find it in $ANDROID_HOME if it + # is defined. + emulator_found=$(find "$ANDROID_HOME" -name emulator -type f | head -1) + fi + + if [[ -n $emulator_found ]]; then + echo "$emulator_found" + else + cat <<< "Emulator not found" 1>&2 + + # Use "emulator" even if it's not found just to let the other functions fail + # later. + echo "emulator" + fi +} + +function avds() { + local emulator_path + emulator_path=$(find_emulator) + eval "$emulator_path -list-avds" +} + +function avd() { + help() { + echo "Usage: avd [-v] [AVD position on the list]" + avds + } + + local OPTIND o verbose avd_number avd_name avds_count emulator_path + while getopts ":v" o; do + case "$o" in + v) + verbose=1;; + *) + help; return;; + esac + done + + shift $((OPTIND-1)) + + avd_number="$1" + + if [[ -z $avd_number ]]; then + help + return + fi + + avds_count=$(avds | wc -l | grep -Eo '[0-9]+') || return + + if [[ $avds_count -le 0 ]]; then + echo "No AVDs found" + return + fi + + if [[ ($avd_number -lt 1 || $avd_number -gt $avds_count) ]]; then + echo "The number must be in 1..${avds_count}" + return + fi + + avd_name=$(avds | head -"$avd_number" | tail -1) + echo "Starting emulator: $avd_name" + + emulator_path=$(find_emulator) + cmd_to_execute="$emulator_path -avd $avd_name" + + if [[ $verbose -eq 1 ]]; then + eval "$cmd_to_execute" + else + eval "$cmd_to_execute" > /dev/null 2>&1 + fi +} + +alias emus="avds" +alias emu="avd" + From b536924ac60b06f6b6c984fa00e6f5ca3b21efae Mon Sep 17 00:00:00 2001 From: Andrzej Zabost Date: Tue, 10 Aug 2021 09:50:29 +0200 Subject: [PATCH 2/9] docs(avd): update the plugin description --- plugins/avd/README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/avd/README.md b/plugins/avd/README.md index 83d189148..a47d6c6e7 100644 --- a/plugins/avd/README.md +++ b/plugins/avd/README.md @@ -1,7 +1,8 @@ # avd plugin -The avd plugin provides aliases for Android Virtual Device / Android -Emulator commands. +The avd plugin provides a few functions for Android Virtual Device / +Android Emulator commands to list all the available AVDs and launch them +more easily. To use it, add avd to the plugins array of your zshrc file: From 8aa3dfc5fee64315c61eb57a4aefe8aa19bcd461 Mon Sep 17 00:00:00 2001 From: Andrzej Zabost Date: Tue, 10 Aug 2021 10:53:51 +0200 Subject: [PATCH 3/9] feat(avd): add numbers to AVDs list --- plugins/avd/avd.plugin.zsh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/avd/avd.plugin.zsh b/plugins/avd/avd.plugin.zsh index 7470d690d..9e3b6138e 100644 --- a/plugins/avd/avd.plugin.zsh +++ b/plugins/avd/avd.plugin.zsh @@ -23,7 +23,9 @@ function find_emulator() { function avds() { local emulator_path emulator_path=$(find_emulator) - eval "$emulator_path -list-avds" + + # Print all AVDs and prepend each output line with a number, starting at 1. + eval "$emulator_path -list-avds" | grep -n '^' } function avd() { From 6579eb94ddce1aadb067f25fb5db89d77276dff9 Mon Sep 17 00:00:00 2001 From: Andrzej Zabost Date: Tue, 10 Aug 2021 18:33:25 +0200 Subject: [PATCH 4/9] docs(avd): update exemplary command output in readme --- plugins/avd/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/avd/README.md b/plugins/avd/README.md index a47d6c6e7..197cd7857 100644 --- a/plugins/avd/README.md +++ b/plugins/avd/README.md @@ -36,9 +36,9 @@ not work as expected. ``` ~/ > avds -Pixel_2_API_30 -Samsung_Tab_A_2019_API_25 -Samsung_Tab_A_2019_API_29 +1:Pixel_2_API_30 +2:Samsung_Tab_A_2019_API_25 +3:Samsung_Tab_A_2019_API_29 ~/ > avd 2 From 1cb99a21acb8135d5d7eee713af4c0582cd64790 Mon Sep 17 00:00:00 2001 From: Andrzej Zabost Date: Tue, 10 Aug 2021 19:42:52 +0200 Subject: [PATCH 5/9] fix(avd): fix starting n-th AVD by removing preceding number --- plugins/avd/avd.plugin.zsh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/avd/avd.plugin.zsh b/plugins/avd/avd.plugin.zsh index 9e3b6138e..7fd4feea3 100644 --- a/plugins/avd/avd.plugin.zsh +++ b/plugins/avd/avd.plugin.zsh @@ -65,7 +65,8 @@ function avd() { return fi - avd_name=$(avds | head -"$avd_number" | tail -1) + # Print only the n-th AVD and remove the number prefix added by 'grep -n' + avd_name=$(avds | head -"$avd_number" | tail -1 | sed -E 's/^[0-9]+://') echo "Starting emulator: $avd_name" emulator_path=$(find_emulator) From 7b012f05b879b4612e92daffd4bd582f79f183c7 Mon Sep 17 00:00:00 2001 From: Andrzej Zabost Date: Tue, 10 Aug 2021 19:47:11 +0200 Subject: [PATCH 6/9] fix(avd): make variable local --- plugins/avd/avd.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/avd/avd.plugin.zsh b/plugins/avd/avd.plugin.zsh index 7fd4feea3..95ccbafeb 100644 --- a/plugins/avd/avd.plugin.zsh +++ b/plugins/avd/avd.plugin.zsh @@ -34,7 +34,7 @@ function avd() { avds } - local OPTIND o verbose avd_number avd_name avds_count emulator_path + local OPTIND o verbose avd_number avd_name avds_count emulator_path cmd_to_execute while getopts ":v" o; do case "$o" in v) From e8e8ed713686b0115590d6cd80cc11ed76f6e166 Mon Sep 17 00:00:00 2001 From: Andrzej Zabost Date: Tue, 10 Aug 2021 19:50:31 +0200 Subject: [PATCH 7/9] docs(avd): remove an incorrect line from the exemplary command output in readme --- plugins/avd/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/avd/README.md b/plugins/avd/README.md index 197cd7857..80a600fde 100644 --- a/plugins/avd/README.md +++ b/plugins/avd/README.md @@ -43,5 +43,4 @@ not work as expected. ~/ > avd 2 Starting emulator: Samsung_Tab_A_2019_API_25 -[3] 33463 ``` From 150e98e22cc4ef515fbd431427ddf92328a7c054 Mon Sep 17 00:00:00 2001 From: Andrzej Zabost Date: Tue, 10 Aug 2021 20:22:18 +0200 Subject: [PATCH 8/9] feat(avd): use an explicit parameter to skip the numbering --- plugins/avd/README.md | 3 ++- plugins/avd/avd.plugin.zsh | 42 ++++++++++++++++++++++++++++++-------- 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/plugins/avd/README.md b/plugins/avd/README.md index 80a600fde..67853ffe3 100644 --- a/plugins/avd/README.md +++ b/plugins/avd/README.md @@ -20,6 +20,7 @@ not work as expected. ## Functions - `avds` - Lists all the AVDs + - `-s` will skip the AVD numbers at the beginning of each output line - `avd [-v] ` - Launches n-th AVD from the AVDs list printed by `avds` - `-v` will let stdout and stderr print to the console which is @@ -29,7 +30,7 @@ not work as expected. ## Aliases -- `emus` - Same as `avds` +- `emus [-s]` - Same as `avds [-s]` - `emu [-v] ` - Same as `avd [-v] ` ## Exemplary usage: diff --git a/plugins/avd/avd.plugin.zsh b/plugins/avd/avd.plugin.zsh index 95ccbafeb..9b4fe1a97 100644 --- a/plugins/avd/avd.plugin.zsh +++ b/plugins/avd/avd.plugin.zsh @@ -21,26 +21,50 @@ function find_emulator() { } function avds() { - local emulator_path - emulator_path=$(find_emulator) + _avds_usage() { + echo "Usage: avds [-s]" + } - # Print all AVDs and prepend each output line with a number, starting at 1. - eval "$emulator_path -list-avds" | grep -n '^' + local OPTIND o emulator_path cmd_to_execute skip_numbers + + while getopts ":s" o; do + case "$o" in + s) + skip_numbers=1;; + *) + _avds_usage; return;; + esac + done + + shift $((OPTIND-1)) + + emulator_path=$(find_emulator) + cmd_to_execute="$emulator_path -list-avds" + + if [[ $skip_numbers -eq 1 ]]; then + # Just print all AVDs. + eval "$cmd_to_execute" + else + # Print all AVDs and prepend each output line with a number, starting at 1. + eval "$cmd_to_execute" | grep -n '^' + fi } function avd() { - help() { + _avd_usage() { echo "Usage: avd [-v] [AVD position on the list]" avds } - local OPTIND o verbose avd_number avd_name avds_count emulator_path cmd_to_execute + local OPTIND o verbose avd_number avd_name avds_count emulator_path + local cmd_to_execute + while getopts ":v" o; do case "$o" in v) verbose=1;; *) - help; return;; + _avd_usage; return;; esac done @@ -49,7 +73,7 @@ function avd() { avd_number="$1" if [[ -z $avd_number ]]; then - help + _avd_usage return fi @@ -66,7 +90,7 @@ function avd() { fi # Print only the n-th AVD and remove the number prefix added by 'grep -n' - avd_name=$(avds | head -"$avd_number" | tail -1 | sed -E 's/^[0-9]+://') + avd_name=$(avds -s | head -"$avd_number" | tail -1) echo "Starting emulator: $avd_name" emulator_path=$(find_emulator) From 486318da7103d0b2b65f493bbf68aec71b869d46 Mon Sep 17 00:00:00 2001 From: Andrzej Zabost Date: Tue, 10 Aug 2021 20:28:49 +0200 Subject: [PATCH 9/9] refactor(avd): update the comment after the last change --- plugins/avd/avd.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/avd/avd.plugin.zsh b/plugins/avd/avd.plugin.zsh index 9b4fe1a97..2cb24ffe7 100644 --- a/plugins/avd/avd.plugin.zsh +++ b/plugins/avd/avd.plugin.zsh @@ -89,7 +89,7 @@ function avd() { return fi - # Print only the n-th AVD and remove the number prefix added by 'grep -n' + # Print only the n-th AVD name. avd_name=$(avds -s | head -"$avd_number" | tail -1) echo "Starting emulator: $avd_name"