Files
dotfiles/tmux/.tmux/plugins/tmux-battery/scripts/battery_remain.sh
Christian Nieves 76a6480b62 Populate repo
2022-04-19 15:50:47 +00:00

131 lines
2.9 KiB
Bash
Executable File

#!/usr/bin/env bash
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
source "$CURRENT_DIR/helpers.sh"
short=false
get_remain_settings() {
short=$(get_tmux_option "@batt_remain_short" false)
}
battery_discharging() {
local status="$(battery_status)"
[[ $status =~ (discharging) ]]
}
battery_charged() {
local status="$(battery_status)"
[[ $status =~ (charged) || $status =~ (full) ]]
}
convertmins() {
((h=${1}/60))
((m=${1}%60))
printf "%02d:%02d\n" $h $m $s
}
apm_battery_remaining_time() {
local remaining_time="$(convertmins $(apm -m))"
if battery_discharging; then
if $short; then
echo $remaining_time | awk '{printf "~%s", $1}'
else
echo $remaining_time | awk '{printf "- %s left", $1}'
fi
elif battery_charged; then
if $short; then
echo $remaining_time | awk '{printf "charged", $1}'
else
echo $remaining_time | awk '{printf "fully charged", $1}'
fi
else
echo "charging"
fi
}
pmset_battery_remaining_time() {
local status="$(pmset -g batt)"
if echo $status | grep 'no estimate' >/dev/null 2>&1; then
if $short; then
echo '~?:??'
else
echo '- Calculating estimate...'
fi
else
local remaining_time="$(echo $status | grep -o '[0-9]\{1,2\}:[0-9]\{1,2\}')"
if battery_discharging; then
if $short; then
echo $remaining_time | awk '{printf "~%s", $1}'
else
echo $remaining_time | awk '{printf "- %s left", $1}'
fi
elif battery_charged; then
if $short; then
echo $remaining_time | awk '{printf "charged", $1}'
else
echo $remaining_time | awk '{printf "fully charged", $1}'
fi
else
if $short; then
echo $remaining_time | awk '{printf "~%s", $1}'
else
echo $remaining_time | awk '{printf "- %s till full", $1}'
fi
fi
fi
}
upower_battery_remaining_time() {
battery=$(upower -e | grep -E 'battery|DisplayDevice'| tail -n1)
if battery_discharging; then
local remaining_time
remaining_time=$(upower -i "$battery" | grep -E '(remain|time to empty)')
if $short; then
echo "$remaining_time" | awk '{printf "%s %s", $(NF-1), $(NF)}'
else
echo "$remaining_time" | awk '{printf "%s %s left", $(NF-1), $(NF)}'
fi
elif battery_charged; then
if $short; then
echo ""
else
echo "charged"
fi
else
local remaining_time
remaining_time=$(upower -i "$battery" | grep -E 'time to full')
if $short; then
echo "$remaining_time" | awk '{printf "%s %s", $(NF-1), $(NF)}'
else
echo "$remaining_time" | awk '{printf "%s %s to full", $(NF-1), $(NF)}'
fi
fi
}
acpi_battery_remaining_time() {
acpi -b | grep -m 1 -Eo "[0-9]+:[0-9]+:[0-9]+"
}
print_battery_remain() {
if is_wsl; then
echo "?" # currently unsupported on WSL
elif command_exists "pmset"; then
pmset_battery_remaining_time
elif command_exists "acpi"; then
acpi_battery_remaining_time
elif command_exists "upower"; then
upower_battery_remaining_time
elif command_exists "apm"; then
apm_battery_remaining_time
fi
}
main() {
get_remain_settings
print_battery_remain
}
main