#!/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 = "\uf00d \uf240" 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" # stands for plugged in FA_PLUG = "\uf1e6" # stands for using battery FA_BATTERY_0 = "\uf244" # 0/4 FA_BATTERY_1 = "\uf243" # 1/4 FA_BATTERY_2 = "\uf242" # 2/4 FA_BATTERY_3 = "\uf241" # 3/4 FA_BATTERY_4 = "\uf240" # 4/4 # stands for unknown status of battery FA_QUESTION = "\uf128" if state == "Discharging": if percentleft <= 10: fulltext = FA_BATTERY_0 + " " elif percentleft < 35: fulltext = FA_BATTERY_1 + " " elif percentleft < 65: fulltext = FA_BATTERY_2 + " " elif percentleft < 90: fulltext = FA_BATTERY_3 + " " else: fulltext = FA_BATTERY_4 + " " elif state == "Full": fulltext = FA_PLUG + " " timeleft = "" elif state == "Unknown": fulltext = FA_BATTERY_0 + " " + FA_QUESTION + " " timeleft = "" else: fulltext = FA_LIGHTNING + " " fulltext += str(percentleft) + "%" + timeleft print(fulltext)