123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- #!/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
|