133 行
4.0 KiB
Bash
実行ファイル
133 行
4.0 KiB
Bash
実行ファイル
#!/bin/sh -e
|
|
#
|
|
# battery: print the state of the battery
|
|
#
|
|
# Copyright (C) 2009 Raphaël Pinson.
|
|
# Copyright (C) 2011-2014 Dustin Kirkland
|
|
#
|
|
# Authors: Raphaël Pinson <raphink@ubuntu.com>
|
|
# Dustin Kirkland <kirkland@byobu.org>
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, version 3 of the License.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
__battery_detail() {
|
|
local bat
|
|
for bat in /proc/acpi/battery/*; do
|
|
cat "$bat/info"
|
|
cat "$bat/state"
|
|
done
|
|
# FIXME: do the same thing with the /sys interface
|
|
}
|
|
|
|
__battery() {
|
|
local bat line present sign state percent full rem color bcolor
|
|
# Linux support
|
|
present=""; full="0"; rem="0"; state=""
|
|
for bat in $BATTERY /sys/class/power_supply/* /proc/acpi/battery/*; do
|
|
case "$bat" in
|
|
/sys/*)
|
|
if [ -r "$bat/uevent" ]; then
|
|
. "$bat/uevent"
|
|
case "$POWER_SUPPLY_NAME" in AC|ac|Ac|aC) continue ;; esac
|
|
present="$POWER_SUPPLY_PRESENT"
|
|
# Some use "CHARGE", others use "ENERGY", still others "CAPACITY"
|
|
[ -n "$POWER_SUPPLY_CHARGE_FULL" ] && full=$((POWER_SUPPLY_CHARGE_FULL+full))
|
|
[ -n "$POWER_SUPPLY_ENERGY_FULL" ] && full=$((POWER_SUPPLY_ENERGY_FULL+full))
|
|
[ -n "$POWER_SUPPLY_CHARGE_NOW" ] && rem=$((POWER_SUPPLY_CHARGE_NOW+rem))
|
|
[ -n "$POWER_SUPPLY_ENERGY_NOW" ] && rem=$((POWER_SUPPLY_ENERGY_NOW+rem))
|
|
if [ -n "$POWER_SUPPLY_CAPACITY" ] && [ ! -n "$POWER_SUPPLY_ENERGY_NOW" ] && [ ! -n "$POWER_SUPPLY_CHARGE_NOW" ]; then
|
|
rem="$POWER_SUPPLY_CAPACITY" && full="100"
|
|
fi
|
|
[ "$POWER_SUPPLY_STATUS" != "Unknown" ] && state="$POWER_SUPPLY_STATUS"
|
|
fi
|
|
;;
|
|
/proc/*)
|
|
[ -f "$bat/info" ] || continue
|
|
while read line; do
|
|
set -- ${line}
|
|
case "$line" in
|
|
present:*)
|
|
# make sure that this battery is present
|
|
[ "$2" = "no" ] && continue 2
|
|
present="$2";;
|
|
last\ full\ capacity:*) full="$4";;
|
|
esac
|
|
[ -n "$present" -a -n "$full" ] && break
|
|
done < "${bat}/info"
|
|
while read line; do
|
|
set -- ${line}
|
|
case "$line" in
|
|
remaining\ capacity:*) rem="$3";;
|
|
charging\ state:*) state="$3";;
|
|
esac
|
|
[ -n "$rem" -a -n "$state" ] && break
|
|
done < "$bat/state"
|
|
[ -n "$full" ] && [ -n "$rem" ] && [ -n "$state" ] && break
|
|
;;
|
|
esac
|
|
done
|
|
# Mac OS X support
|
|
if eval $BYOBU_TEST /usr/sbin/ioreg >/dev/null 2>&1; then
|
|
# MacOS support
|
|
local key
|
|
for key in CurrentCapacity MaxCapacity ExternalChargeCapable FullyCharged; do
|
|
line=$(/usr/sbin/ioreg -n AppleSmartBattery -w0 | grep $key | sed -e 's/|//g' | awk '{ print $3 }')
|
|
case "$key" in
|
|
CurrentCapacity) rem="$line";;
|
|
MaxCapacity) full="$line";;
|
|
ExternalChargeCapable)
|
|
if [ "${line}" = "Yes" ]; then
|
|
state="charging"
|
|
elif [ "${line}" = "No" ]; then
|
|
state="discharging"
|
|
fi
|
|
;;
|
|
FullyCharged)
|
|
if [ "${line}" = "Yes" ]; then
|
|
state="charged"
|
|
fi
|
|
;;
|
|
esac
|
|
done
|
|
fi
|
|
if [ $rem -ge 0 ] && [ $full -gt 0 ]; then
|
|
percent=$(((100*$rem)/$full))
|
|
if [ "$percent" -lt 33 ]; then
|
|
color="R w"
|
|
bcolor="b R w"
|
|
elif [ "$percent" -lt 67 ]; then
|
|
color="Y k"
|
|
bcolor="b Y k"
|
|
else
|
|
color="G k"
|
|
bcolor="b G k"
|
|
fi
|
|
percent="${percent}${PCT}"
|
|
# Convert state to lower case
|
|
state=$(printf "%s" "$state" | $BYOBU_SED 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/')
|
|
case $state in
|
|
charging) sign="+" ;;
|
|
discharging) sign="-" ;;
|
|
charged|unknown|full) sign="=" ;;
|
|
*) sign="$state" ;;
|
|
esac
|
|
if [ -z "$percent" ]; then
|
|
rm -f "$BYOBU_RUN_DIR/status.$BYOBU_BACKEND/battery"*
|
|
return
|
|
fi
|
|
color $bcolor; printf "%s" "$percent"; color -; color $color; printf "%s" "$sign"; color --
|
|
fi
|
|
}
|
|
|
|
# vi: syntax=sh ts=4 noexpandtab
|