108 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			108 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 
								 | 
							
								#!/usr/bin/env python3
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Copyright (C) 2016 James Murphy
							 | 
						||
| 
								 | 
							
								# Licensed under the GPL version 2 only
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# A battery indicator blocklet script for i3blocks
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import re
							 | 
						||
| 
								 | 
							
								from subprocess import check_output
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								status = check_output(['acpi'], universal_newlines=True)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if not status:
							 | 
						||
| 
								 | 
							
								    # stands for no battery found
							 | 
						||
| 
								 | 
							
								    fulltext = "<span color='red'>🔞🔋</span>"
							 | 
						||
| 
								 | 
							
								    percentleft = 100
							 | 
						||
| 
								 | 
							
								else:
							 | 
						||
| 
								 | 
							
								    # if there is more than one battery in one laptop, the percentage left is 
							 | 
						||
| 
								 | 
							
								    # available for each battery separately, although state and remaining 
							 | 
						||
| 
								 | 
							
								    # time for overall block is shown in the status of the first battery 
							 | 
						||
| 
								 | 
							
								    batteries = status.split("\n")
							 | 
						||
| 
								 | 
							
								    state_batteries=[]
							 | 
						||
| 
								 | 
							
								    commasplitstatus_batteries=[]
							 | 
						||
| 
								 | 
							
								    percentleft_batteries=[]
							 | 
						||
| 
								 | 
							
								    time = ""
							 | 
						||
| 
								 | 
							
								    for battery in batteries:
							 | 
						||
| 
								 | 
							
								        if battery!='':
							 | 
						||
| 
								 | 
							
								            state_batteries.append(battery.split(": ")[1].split(", ")[0])
							 | 
						||
| 
								 | 
							
								            commasplitstatus = battery.split(", ")
							 | 
						||
| 
								 | 
							
								            if not time:
							 | 
						||
| 
								 | 
							
								                time = commasplitstatus[-1].strip()
							 | 
						||
| 
								 | 
							
								                # check if it matches a time
							 | 
						||
| 
								 | 
							
								                time = re.match(r"(\d+):(\d+)", time)
							 | 
						||
| 
								 | 
							
								                if time:
							 | 
						||
| 
								 | 
							
								                    time = ":".join(time.groups())
							 | 
						||
| 
								 | 
							
								                    timeleft = " ({})".format(time)
							 | 
						||
| 
								 | 
							
								                else:
							 | 
						||
| 
								 | 
							
								                    timeleft = ""
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            p = int(commasplitstatus[1].rstrip("%\n"))
							 | 
						||
| 
								 | 
							
								            if p>0:
							 | 
						||
| 
								 | 
							
								                percentleft_batteries.append(p)
							 | 
						||
| 
								 | 
							
								            commasplitstatus_batteries.append(commasplitstatus)
							 | 
						||
| 
								 | 
							
								    state = state_batteries[0]
							 | 
						||
| 
								 | 
							
								    commasplitstatus = commasplitstatus_batteries[0]
							 | 
						||
| 
								 | 
							
								    if percentleft_batteries:
							 | 
						||
| 
								 | 
							
								        percentleft = int(sum(percentleft_batteries)/len(percentleft_batteries))
							 | 
						||
| 
								 | 
							
								    else:
							 | 
						||
| 
								 | 
							
								        percentleft = 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # stands for charging
							 | 
						||
| 
								 | 
							
								    #FA_LIGHTNING = "<span color='#E88939' font='FontAwesome'>\uf0e7</span>"
							 | 
						||
| 
								 | 
							
								    #FA_LIGHTNING = "<span color='#E88939'>⚡</span>"
							 | 
						||
| 
								 | 
							
								    FA_LIGHTNING = "<span color='#E88939'>⚡</span>"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # stands for plugged in
							 | 
						||
| 
								 | 
							
								    #FA_PLUG = "<span color='#E88939' font='FontAwesome'>\uf1e6</span>"
							 | 
						||
| 
								 | 
							
								    #FA_PLUG = "<span color='#E88939'>🔌</span>"
							 | 
						||
| 
								 | 
							
								    FA_PLUG = "<span color='#E88939'>🔌</span>"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # stands for using battery
							 | 
						||
| 
								 | 
							
								    #FA_BATTERY = "<span color='#E88939' font='FontAwesome'>\uf240</span>"
							 | 
						||
| 
								 | 
							
								    FA_BATTERY = "<span color='#E88939'>🔋</span>"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # stands for unknown status of battery
							 | 
						||
| 
								 | 
							
								    #FA_QUESTION = "<span color='#E88939' font='FontAwesome'>\uf128</span>"
							 | 
						||
| 
								 | 
							
								    FA_QUESTION = "<span color='#E88939'>❔</span>"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if state == "Discharging":
							 | 
						||
| 
								 | 
							
								        fulltext = FA_BATTERY + " "
							 | 
						||
| 
								 | 
							
								    elif state == "Full":
							 | 
						||
| 
								 | 
							
								        fulltext = FA_PLUG + " "
							 | 
						||
| 
								 | 
							
								        timeleft = ""
							 | 
						||
| 
								 | 
							
								    elif state == "Unknown":
							 | 
						||
| 
								 | 
							
								        fulltext = FA_BATTERY + " " + FA_QUESTION + " "
							 | 
						||
| 
								 | 
							
								        timeleft = ""
							 | 
						||
| 
								 | 
							
								    else:
							 | 
						||
| 
								 | 
							
								        fulltext = FA_LIGHTNING + " " + FA_PLUG + " "
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    percentcolor = "#FFFFFF"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if percentleft < 10:
							 | 
						||
| 
								 | 
							
								        # exit code 33 will turn background red
							 | 
						||
| 
								 | 
							
								        percentcolor = "#FFFFFF"
							 | 
						||
| 
								 | 
							
								    elif percentleft < 20:
							 | 
						||
| 
								 | 
							
								        percentcolor = "#FF3300"
							 | 
						||
| 
								 | 
							
								    elif percentleft < 30:
							 | 
						||
| 
								 | 
							
								        percentcolor = "#FF6600"
							 | 
						||
| 
								 | 
							
								    elif percentleft < 40:
							 | 
						||
| 
								 | 
							
								        percentcolor = "#FF9900"
							 | 
						||
| 
								 | 
							
								    elif percentleft < 50:
							 | 
						||
| 
								 | 
							
								        percentcolor = "#FFCC00"
							 | 
						||
| 
								 | 
							
								    elif percentleft < 60:
							 | 
						||
| 
								 | 
							
								        percentcolor = "#FFFF00"
							 | 
						||
| 
								 | 
							
								    elif percentleft < 70:
							 | 
						||
| 
								 | 
							
								        percentcolor = "#FFFF33"
							 | 
						||
| 
								 | 
							
								    elif percentleft < 80:
							 | 
						||
| 
								 | 
							
								        percentcolor = "#FFFF66"
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    fulltext += '<span color="{}">{}%</span>'.format(percentcolor, percentleft)
							 | 
						||
| 
								 | 
							
								    fulltext += timeleft
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								print(fulltext)
							 | 
						||
| 
								 | 
							
								print(fulltext)
							 | 
						||
| 
								 | 
							
								if percentleft < 10:
							 | 
						||
| 
								 | 
							
								    exit(33)
							 |