Skip to content

Commit

Permalink
feat(battery): add support for Android via Termux (ohmyzsh#9752)
Browse files Browse the repository at this point in the history
  • Loading branch information
kalsi-avneet authored and kareefardi committed Oct 27, 2021
1 parent 52e1539 commit 9d3b90c
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 6 deletions.
19 changes: 13 additions & 6 deletions plugins/battery/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
```
43 changes: 43 additions & 0 deletions plugins/battery/battery.plugin.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down Expand Up @@ -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 }
Expand Down

0 comments on commit 9d3b90c

Please sign in to comment.