mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2024-12-19 02:41:57 +00:00
fix(battery): support acpitool
and multiple batteries under Linux (#9609)
Co-authored-by: Marc Cornellà <hello@mcornella.com>
This commit is contained in:
parent
607d2f1eda
commit
dc83d0b720
1 changed files with 32 additions and 22 deletions
|
@ -12,15 +12,12 @@
|
||||||
###########################################
|
###########################################
|
||||||
|
|
||||||
if [[ "$OSTYPE" = darwin* ]]; then
|
if [[ "$OSTYPE" = darwin* ]]; then
|
||||||
|
|
||||||
function battery_is_charging() {
|
function battery_is_charging() {
|
||||||
ioreg -rc AppleSmartBattery | command grep -q '^.*"ExternalConnected"\ =\ Yes'
|
ioreg -rc AppleSmartBattery | command grep -q '^.*"ExternalConnected"\ =\ Yes'
|
||||||
}
|
}
|
||||||
|
|
||||||
function battery_pct() {
|
function battery_pct() {
|
||||||
pmset -g batt | grep -Eo "\d+%" | cut -d% -f1
|
pmset -g batt | grep -Eo "\d+%" | cut -d% -f1
|
||||||
}
|
}
|
||||||
|
|
||||||
function battery_pct_remaining() {
|
function battery_pct_remaining() {
|
||||||
if battery_is_charging; then
|
if battery_is_charging; then
|
||||||
echo "External Power"
|
echo "External Power"
|
||||||
|
@ -28,7 +25,6 @@ if [[ "$OSTYPE" = darwin* ]]; then
|
||||||
battery_pct
|
battery_pct
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function battery_time_remaining() {
|
function battery_time_remaining() {
|
||||||
local smart_battery_status="$(ioreg -rc "AppleSmartBattery")"
|
local smart_battery_status="$(ioreg -rc "AppleSmartBattery")"
|
||||||
if [[ $(echo $smart_battery_status | command grep -c '^.*"ExternalConnected"\ =\ No') -eq 1 ]]; then
|
if [[ $(echo $smart_battery_status | command grep -c '^.*"ExternalConnected"\ =\ No') -eq 1 ]]; then
|
||||||
|
@ -42,7 +38,6 @@ if [[ "$OSTYPE" = darwin* ]]; then
|
||||||
echo "∞"
|
echo "∞"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function battery_pct_prompt () {
|
function battery_pct_prompt () {
|
||||||
local battery_pct color
|
local battery_pct color
|
||||||
if ioreg -rc AppleSmartBattery | command grep -q '^.*"ExternalConnected"\ =\ No'; then
|
if ioreg -rc AppleSmartBattery | command grep -q '^.*"ExternalConnected"\ =\ No'; then
|
||||||
|
@ -61,17 +56,14 @@ if [[ "$OSTYPE" = darwin* ]]; then
|
||||||
}
|
}
|
||||||
|
|
||||||
elif [[ "$OSTYPE" = freebsd* ]]; then
|
elif [[ "$OSTYPE" = freebsd* ]]; then
|
||||||
|
|
||||||
function battery_is_charging() {
|
function battery_is_charging() {
|
||||||
[[ $(sysctl -n hw.acpi.battery.state) -eq 2 ]]
|
[[ $(sysctl -n hw.acpi.battery.state) -eq 2 ]]
|
||||||
}
|
}
|
||||||
|
|
||||||
function battery_pct() {
|
function battery_pct() {
|
||||||
if (( $+commands[sysctl] )); then
|
if (( $+commands[sysctl] )); then
|
||||||
sysctl -n hw.acpi.battery.life
|
sysctl -n hw.acpi.battery.life
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function battery_pct_remaining() {
|
function battery_pct_remaining() {
|
||||||
if ! battery_is_charging; then
|
if ! battery_is_charging; then
|
||||||
battery_pct
|
battery_pct
|
||||||
|
@ -79,7 +71,6 @@ elif [[ "$OSTYPE" = freebsd* ]]; then
|
||||||
echo "External Power"
|
echo "External Power"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function battery_time_remaining() {
|
function battery_time_remaining() {
|
||||||
local remaining_time
|
local remaining_time
|
||||||
remaining_time=$(sysctl -n hw.acpi.battery.time)
|
remaining_time=$(sysctl -n hw.acpi.battery.time)
|
||||||
|
@ -89,7 +80,6 @@ elif [[ "$OSTYPE" = freebsd* ]]; then
|
||||||
printf %02d:%02d $hour $minute
|
printf %02d:%02d $hour $minute
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function battery_pct_prompt() {
|
function battery_pct_prompt() {
|
||||||
local battery_pct color
|
local battery_pct color
|
||||||
battery_pct=$(battery_pct_remaining)
|
battery_pct=$(battery_pct_remaining)
|
||||||
|
@ -106,19 +96,42 @@ elif [[ "$OSTYPE" = freebsd* ]]; then
|
||||||
echo "%{$fg[$color]%}${battery_pct}%%%{$reset_color%}"
|
echo "%{$fg[$color]%}${battery_pct}%%%{$reset_color%}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
elif [[ "$OSTYPE" = linux* ]]; then
|
elif [[ "$OSTYPE" = linux* ]]; then
|
||||||
|
|
||||||
function battery_is_charging() {
|
function battery_is_charging() {
|
||||||
|
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'
|
! acpi 2>/dev/null | command grep -v "rate information unavailable" | command grep -q '^Battery.*Discharging'
|
||||||
}
|
|
||||||
|
|
||||||
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:]'
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
function battery_pct() {
|
||||||
|
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() {
|
function battery_pct_remaining() {
|
||||||
if ! battery_is_charging; then
|
if ! battery_is_charging; then
|
||||||
battery_pct
|
battery_pct
|
||||||
|
@ -126,13 +139,11 @@ elif [[ "$OSTYPE" = linux* ]]; then
|
||||||
echo "External Power"
|
echo "External Power"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function battery_time_remaining() {
|
function battery_time_remaining() {
|
||||||
if ! battery_is_charging; then
|
if ! battery_is_charging; then
|
||||||
acpi 2>/dev/null | command grep -v "rate information unavailable" | cut -f3 -d ','
|
acpi 2>/dev/null | command grep -v "rate information unavailable" | cut -f3 -d ','
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function battery_pct_prompt() {
|
function battery_pct_prompt() {
|
||||||
local battery_pct color
|
local battery_pct color
|
||||||
battery_pct=$(battery_pct_remaining)
|
battery_pct=$(battery_pct_remaining)
|
||||||
|
@ -149,7 +160,6 @@ elif [[ "$OSTYPE" = linux* ]]; then
|
||||||
echo "%{$fg[$color]%}${battery_pct}%%%{$reset_color%}"
|
echo "%{$fg[$color]%}${battery_pct}%%%{$reset_color%}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
# Empty functions so we don't cause errors in prompts
|
# Empty functions so we don't cause errors in prompts
|
||||||
function battery_is_charging { false }
|
function battery_is_charging { false }
|
||||||
|
|
Loading…
Reference in a new issue