summaryrefslogtreecommitdiff
path: root/battery
diff options
context:
space:
mode:
Diffstat (limited to 'battery')
-rwxr-xr-xbattery75
1 files changed, 75 insertions, 0 deletions
diff --git a/battery b/battery
new file mode 100755
index 0000000..2348d6a
--- /dev/null
+++ b/battery
@@ -0,0 +1,75 @@
+#!/home/dakkar/perl5/perlbrew/perls/perl-5.16.3/bin/perl
+use strict;
+use warnings;
+use 5.016;
+use Gtk2 -init;
+
+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;