#!/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 = "🔞🔋" 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 = "\uf0e7" #FA_LIGHTNING = "" FA_LIGHTNING = "" # stands for plugged in #FA_PLUG = "\uf1e6" #FA_PLUG = "🔌" FA_PLUG = "🔌" # stands for using battery #FA_BATTERY = "\uf240" FA_BATTERY = "🔋" # stands for unknown status of battery #FA_QUESTION = "\uf128" FA_QUESTION = "" 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 += '{}%'.format(percentcolor, percentleft) fulltext += timeleft print(fulltext) print(fulltext) if percentleft < 10: exit(33)