summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Voots <simcop2387@simcop2387.info>2021-10-07 15:16:30 -0400
committerGitHub <noreply@github.com>2021-10-07 21:16:30 +0200
commitdc83d0b7204cf66315471e980729490813b7d915 (patch)
treede9d39b0e204bf0a61e5fa41f730a8a68adb6211
parent607d2f1eda6f7a8a8036a6608e99c512db75c602 (diff)
downloadzsh-dc83d0b7204cf66315471e980729490813b7d915.tar.gz
zsh-dc83d0b7204cf66315471e980729490813b7d915.tar.bz2
zsh-dc83d0b7204cf66315471e980729490813b7d915.zip
fix(battery): support `acpitool` and multiple batteries under Linux (#9609)
Co-authored-by: Marc Cornellà <hello@mcornella.com>
-rw-r--r--plugins/battery/battery.plugin.zsh50
1 files changed, 30 insertions, 20 deletions
diff --git a/plugins/battery/battery.plugin.zsh b/plugins/battery/battery.plugin.zsh
index a525fd7da..24bff8ae6 100644
--- a/plugins/battery/battery.plugin.zsh
+++ b/plugins/battery/battery.plugin.zsh
@@ -12,15 +12,12 @@
###########################################
if [[ "$OSTYPE" = darwin* ]]; then
-
function battery_is_charging() {
ioreg -rc AppleSmartBattery | command grep -q '^.*"ExternalConnected"\ =\ Yes'
}
-
function battery_pct() {
pmset -g batt | grep -Eo "\d+%" | cut -d% -f1
}
-
function battery_pct_remaining() {
if battery_is_charging; then
echo "External Power"
@@ -28,7 +25,6 @@ if [[ "$OSTYPE" = darwin* ]]; then
battery_pct
fi
}
-
function battery_time_remaining() {
local smart_battery_status="$(ioreg -rc "AppleSmartBattery")"
if [[ $(echo $smart_battery_status | command grep -c '^.*"ExternalConnected"\ =\ No') -eq 1 ]]; then
@@ -42,7 +38,6 @@ if [[ "$OSTYPE" = darwin* ]]; then
echo "∞"
fi
}
-
function battery_pct_prompt () {
local battery_pct color
if ioreg -rc AppleSmartBattery | command grep -q '^.*"ExternalConnected"\ =\ No'; then
@@ -61,17 +56,14 @@ if [[ "$OSTYPE" = darwin* ]]; then
}
elif [[ "$OSTYPE" = freebsd* ]]; then
-
function battery_is_charging() {
[[ $(sysctl -n hw.acpi.battery.state) -eq 2 ]]
}
-
function battery_pct() {
if (( $+commands[sysctl] )); then
sysctl -n hw.acpi.battery.life
fi
}
-
function battery_pct_remaining() {
if ! battery_is_charging; then
battery_pct
@@ -79,7 +71,6 @@ elif [[ "$OSTYPE" = freebsd* ]]; then
echo "External Power"
fi
}
-
function battery_time_remaining() {
local remaining_time
remaining_time=$(sysctl -n hw.acpi.battery.time)
@@ -89,7 +80,6 @@ elif [[ "$OSTYPE" = freebsd* ]]; then
printf %02d:%02d $hour $minute
fi
}
-
function battery_pct_prompt() {
local battery_pct color
battery_pct=$(battery_pct_remaining)
@@ -106,19 +96,42 @@ elif [[ "$OSTYPE" = freebsd* ]]; then
echo "%{$fg[$color]%}${battery_pct}%%%{$reset_color%}"
fi
}
-
elif [[ "$OSTYPE" = linux* ]]; then
-
function battery_is_charging() {
- ! acpi 2>/dev/null | command grep -v "rate information unavailable" | command grep -q '^Battery.*Discharging'
+ if (( $+commands[acpitool] )); then
+ ! acpitool 2>/dev/null | command grep -qE '^\s+Battery.*Discharging'
+ elif (( $+commands[acpi] )); then
+ ! acpi 2>/dev/null | command grep -v "rate information unavailable" | command grep -q '^Battery.*Discharging'
+ fi
}
-
function battery_pct() {
- if (( $+commands[acpi] )); then
- acpi 2>/dev/null | command grep -v "rate information unavailable" | command grep -E '^Battery.*(Full|(Disc|C)harging)' | cut -f2 -d ',' | tr -cd '[:digit:]'
+ if (( $+commands[acpitool] )); then
+ # Sample output:
+ # Battery #1 : Unknown, 99.55%
+ # Battery #2 : Discharging, 49.58%, 01:12:05
+ # All batteries : 62.60%, 02:03:03
+ acpitool 2>/dev/null | command awk -F, '
+ /^\s+All batteries/ {
+ gsub(/[^0-9.]/, "", $1)
+ pct=$1
+ exit
+ }
+ !pct && /^\s+Battery/ {
+ gsub(/[^0-9.]/, "", $2)
+ pct=$2
+ }
+ END { print pct }
+ '
+ elif (( $+commands[acpi] )); then
+ # Sample output:
+ # Battery 0: Discharging, 0%, rate information unavailable
+ # Battery 1: Full, 100%
+ acpi 2>/dev/null | command awk -F, '
+ /rate information unavailable/ { next }
+ /^Battery.*: /{ gsub(/[^0-9]/, "", $2); print $2; exit }
+ '
fi
}
-
function battery_pct_remaining() {
if ! battery_is_charging; then
battery_pct
@@ -126,13 +139,11 @@ elif [[ "$OSTYPE" = linux* ]]; then
echo "External Power"
fi
}
-
function battery_time_remaining() {
if ! battery_is_charging; then
acpi 2>/dev/null | command grep -v "rate information unavailable" | cut -f3 -d ','
fi
}
-
function battery_pct_prompt() {
local battery_pct color
battery_pct=$(battery_pct_remaining)
@@ -149,7 +160,6 @@ elif [[ "$OSTYPE" = linux* ]]; then
echo "%{$fg[$color]%}${battery_pct}%%%{$reset_color%}"
fi
}
-
else
# Empty functions so we don't cause errors in prompts
function battery_is_charging { false }