summaryrefslogtreecommitdiff
path: root/script/battery
diff options
context:
space:
mode:
Diffstat (limited to 'script/battery')
-rwxr-xr-x[-rw-r--r--]script/battery73
1 files changed, 69 insertions, 4 deletions
diff --git a/script/battery b/script/battery
index cddea55..2348d6a 100644..100755
--- a/script/battery
+++ b/script/battery
@@ -1,10 +1,75 @@
-#!/usr/bin/env perl
+#!/home/dakkar/perl5/perlbrew/perls/perl-5.16.3/bin/perl
use strict;
use warnings;
use 5.016;
use Gtk2 -init;
-use Battery;
-my $w=Battery->new();
-$w->show;
+my $window = Gtk2::Window->new('toplevel');
+$window->set_accept_focus(0);
+$window->set_decorated(0);
+$window->set_has_frame(0);
+$window->set_skip_pager_hint(1);
+$window->set_skip_taskbar_hint(1);
+$window->set_type_hint('utility');
+$window->set_default_size(300,25);
+$window->set_resizable(1);
+$window->set_name('dakkar-battery');
+$window->set_wmclass('dakkar-battery','dakkar-battery');
+
+my $bar = Gtk2::ProgressBar->new();
+$bar->set_orientation('left-to-right');
+$bar->set_name('dakkar-battery-bar');
+
+$window->add($bar);
+
+$window->signal_connect(delete_event => \&quit);
+
+Glib::Timeout->add(1000,\&update);
+
+sub quit {
+ Gtk2->main_quit;
+}
+
+sub get_battery_stats {
+ open my $fh,'<','/sys/class/power_supply/BAT1/uevent';
+ my %ret;
+ while (my $line=<$fh>) {
+ chomp $line;
+ my ($name,$value) = $line =~ m{\A POWER_SUPPLY_(.*?) = (.*) \z}x;
+ $ret{lc($name)}=$value;
+ }
+ return \%ret;
+}
+
+sub _format_time {
+ my ($t) = @_;
+ my $h=int($t);
+ my $m=int(($t-$h)*60);
+ return sprintf q{%dh%02d},$h,$m;
+}
+
+sub update {
+ my $bs=get_battery_stats;
+ my $e=$bs->{energy_now}/$bs->{energy_full};
+ my $txt='';
+ if ($bs->{power_now}) {
+ my $t=$bs->{energy_now}/$bs->{power_now};
+ my $tot=$bs->{energy_full}/$bs->{power_now};
+ $txt = sprintf '%s/%s ',
+ _format_time($t),
+ _format_time($tot);
+ $bar->set_fraction($t/$tot);
+ }
+ else {
+ $bar->set_fraction($e);
+ }
+ $txt .= sprintf '%.0f%%', 100*$e;
+
+ $bar->set_text($txt);
+
+ return 1;
+}
+
+$window->show_all;
+
Gtk2->main;