1

i3status-mt-json-a-optimized: added reader for mouse click events, code cleanup, ident fix

This commit is contained in:
eleksir
2017-06-05 02:08:01 +03:00
parent ca1ae83ffe
commit 6519af7f12

View File

@@ -1,5 +1,5 @@
#!/usr/bin/perl
# vim: set ai et ts=8 sw=8 sts=8 ft=perl :
use Fcntl;
use POSIX;
@@ -19,6 +19,8 @@ sub getbatterychargestr2();
sub slow_thread();
sub onesec_thread();
sub reader();
sub launcher($);
my @charge :shared;
my $la :shared;
@@ -26,36 +28,52 @@ my $uptime :shared;
my $time :shared;
my $shoot :shared = 1;
my $default_color = '#3e78fd';
my $default_color = '#5c5b5a';
my $blue_color = '#3e78fd';
my $a->[0]->{'name'} = 'title';
$a->[0]->{'full_text'} = ' ';
$a->[0]->{'color'} = $default_color;
my @name = qw /
ff vv ch con tel pid hc mp db kee
title username uptime la powersource time /;
$a->[1]->{'name'} = 'username';
$a->[1]->{'full_text'} = $ENV{'USER'};
$a->[1]->{'color'} = $default_color;
my @align = qw /
left left left left left left left left left left
center right right right right right /;
$a->[2]->{'name'} = 'uptime';
$a->[2]->{'full_text'} = ' ';
$a->[2]->{'color'} = $default_color;
my $a;
my %name_index;
$a->[3]->{'name'} = 'la';
$a->[3]->{'full_text'} = ' ';
$a->[3]->{'color'} = $default_color;
for (my $i = 0; $i < @name; $i++) {
$name_index{$name[$i]} = $i;
$a->[$i]->{'name'} = $name[$i];
$a->[4]->{'name'} = 'powersource';
$a->[4]->{'full_text'} = ' ';
$a->[4]->{'color'} = $default_color;
if ($name[$i] eq 'username') {
$a->[$i]->{'full_text'} = $ENV{'USER'};
} elsif ($name[$i] eq 'title') {
$a->[$i]->{'min_width'} = ' ';
} else {
$a->[$i]->{'full_text'} = $name[$i];
}
$a->[$i]->{'color'} = $blue_color;
if ($align[$i] eq 'left') {
$align[$i] = "center";
$a->[$i]->{'color'} = $default_color;
$a->[$i]->{'separator_block_width'} = 1;
$a->[$i]->{'separator'} = JSON::PP::false;
$a->[$i]->{'border'} = '#3dbaf4';
$a->[$i]->{'min_width'} = sprintf(' %s ', $name[$i]);
}
$a->[$i]->{'align'} = $align[$i];
}
$a->[5]->{'name'} = 'time';
$a->[5]->{'full_text'} = ' ';
$a->[5]->{'color'} = $default_color;
my $title;
my $prev_title = '';
threads->create('slow_thread');
threads->create('onesec_thread');
threads->create('reader');
sleep 1;
@@ -63,6 +81,8 @@ syswrite STDOUT, "{\"version\":1, \"click_events\": true}\n";
syswrite STDOUT, "[\n[],\n";
while (1) {
my $in = '';
$title = getfocusedwidowtitlestr();
if ($title ne $prev_title) {
@@ -71,24 +91,26 @@ while(1) {
}
if ($shoot == 1) {
$a->[0]->{'full_text'} = $title;
$a->[2]->{'full_text'} = $uptime;
$a->[3]->{'full_text'} = $la;
$a->[4]->{'full_text'} = $charge[0];
$a->[4]->{'color'} = $charge[1];
$a->[5]->{'full_text'} = $time;
$a->[$name_index{'title'}]->{'full_text'} = $title;
$a->[$name_index{'uptime'}]->{'full_text'} = $uptime;
$a->[$name_index{'la'}]->{'full_text'} = $la;
$a->[$name_index{'powersource'}]->{'full_text'} = $charge[0];
$a->[$name_index{'powersource'}]->{'color'} = $charge[1];
$a->[$name_index{'time'}]->{'full_text'} = $time;
my $json = JSON::PP->new;
$json = $json->ascii(0);
$json = $json->utf8(0);
$json = $json->allow_unknown (1);
$json = $json->allow_unknown (0);
$json = $json->canonical(1);
$json = $json->space_before(0);
$json = $json->space_after(0);
$json = $json->indent(0);
$json = $json->indent(1);
my $str = $json->encode($a);
undef $json;
if ((utf8::valid($str)) and utf8::decode($string)) {
syswrite STDOUT, $str . ",\n";
}
undef $str;
$shoot = 0;
@@ -167,8 +189,10 @@ sub getfocusedwidowtitlestr() {
chomp($str);
$str =~ s/[\"|\{|\}|\'|,|\(|\)|\[|\]]/ /g;
if (int(length($str)) > 64){
$str = substr($str, 0, 65);
if (int(length($str)) > 24) {
$str = substr($str, 0, 25);
} elsif (int(length($str)) < 1) {
$str = ' ';
}
return $str;
@@ -272,3 +296,45 @@ sub getbatterychargestr2() {
return @z;
}
sub reader() {
threads->detach();
my $str = '';
my $j;
while (<STDIN>) {
$str = $_;
if (substr($str, 0, 1) ne '{') {
$str = substr($str, 1);
}
chomp($str);
next if ((length($str) < 2) or (substr($str, -1, 1) ne '}'));
$j = decode_json($str);
if ($j->{'button'} eq '1') {
if ($j->{'name'} eq 'ff') { threads->create('launcher', '/usr/bin/firefox'); }
if ($j->{'name'} eq 'vv') { threads->create('launcher', '/usr/local/bin/vivaldi'); }
if ($j->{'name'} eq 'ch') { threads->create('launcher', '/usr/bin/chromium'); }
if ($j->{'name'} eq 'con') { threads->create('launcher', '/usr/bin/urxvt'); }
if ($j->{'name'} eq 'tel') { threads->create('launcher', '/home/eleksir/.local/bin/Telegram'); }
if ($j->{'name'} eq 'pid') { threads->create('launcher', '/usr/bin/pidgin'); }
if ($j->{'name'} eq 'hc') { threads->create('launcher', '/usr/bin/hexchat'); }
if ($j->{'name'} eq 'mp') { threads->create('launcher', '/usr/bin/mousepad'); }
if ($j->{'name'} eq 'db') { threads->create('launcher', '/usr/bin/deadbeef'); }
if ($j->{'name'} eq 'kee') { threads->create('launcher', '/home/eleksir/.local/bin/kee'); }
}
}
}
sub launcher($) {
my $prog = shift;
threads->detach();
if (fork() == 0) {
exec ($prog);
}
}
# vim: set ai tabstop=8 softtabstop=8 shiftwidth=8 noexpandtab ft=perl : #