You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							82 lines
						
					
					
						
							1.7 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							82 lines
						
					
					
						
							1.7 KiB
						
					
					
				
								#!/usr/bin/perl
							 | 
						|
								#
							 | 
						|
								# Copyright 2014 Pierre Mavro <deimos@deimos.fr>
							 | 
						|
								# Copyright 2014 Vivien Didelot <vivien@didelot.org>
							 | 
						|
								#
							 | 
						|
								# 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 utf8;
							 | 
						|
								
							 | 
						|
								my $acpi;
							 | 
						|
								my $status;
							 | 
						|
								my $percent;
							 | 
						|
								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 2>/dev/null| grep 'Battery $bat_number' |") or die;
							 | 
						|
								$acpi = <ACPI>;
							 | 
						|
								close(ACPI);
							 | 
						|
								
							 | 
						|
								# fail on unexpected output
							 | 
						|
								if (not defined($acpi)) {
							 | 
						|
								    # don't print anything to stderr if there is no battery
							 | 
						|
								    exit(0);
							 | 
						|
								}
							 | 
						|
								elsif ($acpi !~ /: ([\w\s]+), (\d+)%/) {
							 | 
						|
									die "$acpi\n";
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								$status = $1;
							 | 
						|
								$percent = $2;
							 | 
						|
								$full_text = "$percent%";
							 | 
						|
								
							 | 
						|
								if ($status eq 'Discharging') {
							 | 
						|
									$full_text .= ' DIS';
							 | 
						|
								} elsif ($status eq 'Charging') {
							 | 
						|
									$full_text .= ' CHR';
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								$short_text = $full_text;
							 | 
						|
								
							 | 
						|
								if ($acpi =~ /(\d\d:\d\d):/) {
							 | 
						|
									$full_text .= " ($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 "#FFAE00\n";
							 | 
						|
									} elsif ($percent < 60) {
							 | 
						|
										print "#FFF600\n";
							 | 
						|
									} elsif ($percent < 85) {
							 | 
						|
										print "#A8FF00\n";
							 | 
						|
									} else {
							 | 
						|
										print "#2c9332\n";
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									if ($percent < 5) {
							 | 
						|
										exit(33);
							 | 
						|
									}
							 | 
						|
								} else {
							 | 
						|
									print "#2c9332\n";
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								exit(0);
							 |