#!/usr/bin/perl # # Copyright 2014 Pierre Mavro # Copyright 2014 Vivien Didelot # # Licensed under the terms of the GNU GPL v3, or any later version. # # This script is meant to use with i3blocks. It parses the output of the "acpi" # command (often provided by a package of the same name) to read the status of # the battery, and eventually its remaining time (to full charge or discharge). # # The color will gradually change for a percentage below 85%, and the urgency # (exit code 33) is set if there is less that 5% remaining. use strict; use warnings; use Switch; my $acpi; my $status; my $percent; my $hours = -1; my $mins; my $full_text; my $short_text; my $bat_number = $ENV{BLOCK_INSTANCE} || 0; # read the first line of the "acpi" command output open (ACPI, "acpi -b | grep 'Battery $bat_number' |") or die; $acpi = ; close(ACPI); # fail on unexpected output if ($acpi !~ /: (\w+), (\d+)%/) { die "$acpi\n"; } $status = $1; $percent = $2; if ($acpi =~ /, (\d+):(\d+)/) { $hours = $1; $mins = $2; } if ($status eq 'Discharging') { if ($percent <= 10) { $full_text = ""; } elsif ($percent <= 40) { $full_text = ""; } elsif ($percent <= 75) { $full_text = ""; } else { $full_text = ""; } } elsif ($status eq 'Charging') { $full_text = ''; } else { $full_text = ''; } $full_text .= " $percent%"; $short_text = $full_text; switch($ENV{BLOCK_BUTTON} || 0) { case "1" { if ($hours lt 0) { $full_text .= " Charged"; } else { $full_text .= " ($hours:$mins"; if ($status eq 'Discharging') { $full_text .= ")"; } else { $full_text .= " until full)"; } } } case "4" { system("light -U -l 1") } case "5" { system("light -A -l 1") } } # print text print "$full_text\n"; print "$short_text\n"; # consider color and urgent flag only on discharge if ($status eq 'Discharging') { if ($percent < 20) { print "#FF0000\n"; } elsif ($percent < 40) { print "#FFCB00\n"; } } exit(0);