From f26a1ecdf01185218004dd6d15ce02541e6a2b26 Mon Sep 17 00:00:00 2001 From: Avneet Singh <4151485+kalsi-avneet@users.noreply.github.com> Date: Sun, 21 Mar 2021 00:06:33 +0530 Subject: [PATCH] feat(battery): add support for Android via Termux (#9752) --- plugins/battery/README.md | 19 ++++++++----- plugins/battery/battery.plugin.zsh | 43 ++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 6 deletions(-) diff --git a/plugins/battery/README.md b/plugins/battery/README.md index c2554a36d..18e5bd882 100644 --- a/plugins/battery/README.md +++ b/plugins/battery/README.md @@ -8,15 +8,22 @@ To use, add `battery` to the list of plugins in your `.zshrc` file: Then, add the `battery_pct_prompt` function to your custom theme. For example: -``` +```zsh RPROMPT='$(battery_pct_prompt) ...' ``` ## Requirements -On Linux, you must have the `acpi` tool installed on your operating system. +- On Linux, you must have the `acpi` or `acpitool` commands installed on your operating system. + On Debian/Ubuntu, you can do that with `sudo apt install acpi` or `sudo apt install acpitool`. -Here's an example of how to install with apt: -``` -sudo apt-get install acpi -``` +- On Android (via [Termux](https://play.google.com/store/apps/details?id=com.termux)), you must have: + + 1. The `Termux:API` addon app installed: + [Google Play](https://play.google.com/store/apps/details?id=com.termux.api) | [F-Droid](https://f-droid.org/packages/com.termux.api/) + + 2. The `termux-api` package installed within termux: + + ```sh + pkg install termux-api + ``` diff --git a/plugins/battery/battery.plugin.zsh b/plugins/battery/battery.plugin.zsh index 24bff8ae6..8e6afe65e 100644 --- a/plugins/battery/battery.plugin.zsh +++ b/plugins/battery/battery.plugin.zsh @@ -10,6 +10,9 @@ # Author: J (927589452) # # Modified to add support for FreeBSD # ########################################### +# Author: Avneet Singh (kalsi-avneet) # +# Modified to add support for Android # +########################################### if [[ "$OSTYPE" = darwin* ]]; then function battery_is_charging() { @@ -160,6 +163,46 @@ elif [[ "$OSTYPE" = linux* ]]; then echo "%{$fg[$color]%}${battery_pct}%%%{$reset_color%}" fi } +elif [[ "$OSTYPE" = linux-android ]] && (( ${+commands[termux-battery-status]} )); then + function battery_is_charging() { + termux-battery-status 2>/dev/null | command awk '/status/ { exit ($0 ~ /DISCHARGING/) }' + } + function battery_pct() { + # Sample output: + # { + # "health": "GOOD", + # "percentage": 93, + # "plugged": "UNPLUGGED", + # "status": "DISCHARGING", + # "temperature": 29.0, + # "current": 361816 + # } + termux-battery-status 2>/dev/null | command awk '/percentage/ { gsub(/[,]/,""); print $2}' + } + function battery_pct_remaining() { + if ! battery_is_charging; then + battery_pct + else + echo "External Power" + fi + } + function battery_time_remaining() { } # Not available on android + function battery_pct_prompt() { + local battery_pct color + battery_pct=$(battery_pct_remaining) + if battery_is_charging; then + echo "∞" + else + if [[ $battery_pct -gt 50 ]]; then + color='green' + elif [[ $battery_pct -gt 20 ]]; then + color='yellow' + else + color='red' + fi + echo "%{$fg[$color]%}${battery_pct}%%%{$reset_color%}" + fi + } else # Empty functions so we don't cause errors in prompts function battery_is_charging { false }