123 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| HEART_FULL=♥
 | |
| HEART_EMPTY=♡
 | |
| [ -z "$NUM_HEARTS" ] &&
 | |
|     NUM_HEARTS=5
 | |
| 
 | |
| cutinate()
 | |
| {
 | |
|     perc=$1
 | |
|     inc=$(( 100 / $NUM_HEARTS))
 | |
| 
 | |
| 
 | |
|     for i in `seq $NUM_HEARTS`; do
 | |
|         if [ $perc -lt 100 ]; then
 | |
|             echo $HEART_EMPTY
 | |
|         else
 | |
|             echo $HEART_FULL
 | |
|         fi
 | |
|         perc=$(( $perc + $inc ))
 | |
|     done
 | |
| }
 | |
| 
 | |
| linux_get_bat ()
 | |
| {
 | |
|     bf=$(cat $BAT_FULL)
 | |
|     bn=$(cat $BAT_NOW)
 | |
|     echo $(( 100 * $bn / $bf ))
 | |
| }
 | |
| 
 | |
| freebsd_get_bat ()
 | |
| {
 | |
|     sysctl -n hw.acpi.battery.life
 | |
| }
 | |
| 
 | |
| # Do with grep and awk unless too hard
 | |
| 
 | |
| # TODO Identify which machine we're on from teh script.
 | |
| 
 | |
| battery_status()
 | |
| {
 | |
| case $(uname -s) in
 | |
|     "Linux")
 | |
|         BATPATH=${BATPATH:-/sys/class/power_supply/BAT0}
 | |
|         STATUS=$BATPATH/status
 | |
|         [ "$1" = `cat $STATUS` ] || [ "$1" = "" ] || return 0
 | |
|         if [ -f "$BATPATH/energy_full" ]; then
 | |
|             naming="energy"
 | |
|         elif [ -f "$BATPATH/charge_full" ]; then
 | |
|             naming="charge"
 | |
|         elif [ -f "$BATPATH/capacity" ]; then
 | |
|             cat "$BATPATH/capacity"
 | |
|             return 0
 | |
|         fi
 | |
|         BAT_FULL=$BATPATH/${naming}_full
 | |
|         BAT_NOW=$BATPATH/${naming}_now
 | |
|         linux_get_bat
 | |
|         ;;
 | |
|     "FreeBSD")
 | |
|         STATUS=`sysctl -n hw.acpi.battery.state`
 | |
|         case $1 in
 | |
|             "Discharging")
 | |
|                 if [ $STATUS -eq 1 ]; then
 | |
|                     freebsd_get_bat
 | |
|                 fi
 | |
|                 ;;
 | |
|             "Charging")
 | |
|                 if [ $STATUS -eq 2 ]; then
 | |
|                     freebsd_get_bat
 | |
|                 fi
 | |
|                 ;;
 | |
|             "")
 | |
|                 freebsd_get_bat
 | |
|                 ;;
 | |
|         esac
 | |
|         ;;
 | |
|     "Darwin")
 | |
|         case $1 in
 | |
|             "Discharging")
 | |
|                 ext="No";;
 | |
|             "Charging")
 | |
|                 ext="Yes";;
 | |
|         esac
 | |
| 
 | |
|         ioreg -c AppleSmartBattery -w0 | \
 | |
|         grep -o '"[^"]*" = [^ ]*' | \
 | |
|         sed -e 's/= //g' -e 's/"//g' | \
 | |
|         sort | \
 | |
|         while read key value; do
 | |
|             case $key in
 | |
|                 "MaxCapacity")
 | |
|                     export maxcap=$value;;
 | |
|                 "CurrentCapacity")
 | |
|                     export curcap=$value;;
 | |
|                 "ExternalConnected")
 | |
|                     if [ -n "$ext" ] && [ "$ext" != "$value" ]; then
 | |
|                         exit
 | |
|                     fi
 | |
|                 ;;
 | |
|                 "FullyCharged")
 | |
|                     if [ "$value" = "Yes" ]; then
 | |
|                         exit
 | |
|                     fi
 | |
|                 ;;
 | |
|             esac
 | |
|             if [[ -n "$maxcap" && -n $curcap ]]; then
 | |
|                 echo $(( 100 * $curcap / $maxcap ))
 | |
|                 break
 | |
|             fi
 | |
|         done
 | |
| esac
 | |
| }
 | |
| 
 | |
| BATTERY_STATUS=`battery_status $1`
 | |
| [ -z "$BATTERY_STATUS" ] && exit
 | |
| 
 | |
| if [ -n "$CUTE_BATTERY_INDICATOR" ]; then
 | |
|     cutinate $BATTERY_STATUS
 | |
| else
 | |
|     echo ${BATTERY_STATUS}%
 | |
| fi
 | |
| 
 |