From 75827353b4ece85cb4e1e927404692f136b270b8 Mon Sep 17 00:00:00 2001 From: Florian Pritz Date: Tue, 12 Dec 2017 00:44:24 +0100 Subject: i3: Rewrite conky wrapper in perl Signed-off-by: Florian Pritz --- .i3/conky-wrapper.pl | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100755 .i3/conky-wrapper.pl (limited to '.i3/conky-wrapper.pl') diff --git a/.i3/conky-wrapper.pl b/.i3/conky-wrapper.pl new file mode 100755 index 0000000..2ab2925 --- /dev/null +++ b/.i3/conky-wrapper.pl @@ -0,0 +1,65 @@ +#!/usr/bin/perl + +use v5.14; +use strict; +use warnings; + +use JSON; +use Clone 'clone'; +use IO::Handle; + +# Send the header so that i3bar knows we want to use JSON: +printf "%s", '{"version":1}'; + +# Begin the endless array. +printf "%s", '['; + +# We send an empty first array of blocks to make the loop simpler: +printf "%s",'[],'; + +open my $conky, "-|:encoding(utf8)", "conky -c $ENV{HOME}/.i3/conkyrc-perl"; +STDOUT->autoflush(); + +my @data; +my %in_progress; +my $json = JSON->new; +$json->ascii([1]); + +my %simple_mappings = ( + "SHORTTEXT" => "shorttext", +); + +while (<$conky>) { + chomp($_); + + next if m/^\s+$/; + + if (m/^END_BLOCK$/) { + STDOUT->printf("%s,\n", $json->encode(\@data)); + undef @data; + next; + } + + if (m/^COLOR: (#[a-zA-Z0-9]+)$/) { + $in_progress{color} = $1; + next; + } + + for my $key (keys %simple_mappings) { + if (m/^$key: (.*)$/) { + $in_progress{$simple_mappings{$key}} = $1; + next; + } + } + + if (m/^FULLTEXT: (.*)$/) { + my $fulltext = $1; + $in_progress{full_text} = $fulltext; + push @data, clone \%in_progress; + undef %in_progress; + next; + } + + printf STDERR "Got unexpected data: %s\n", $_; +} + -- cgit v1.2.3-24-g4f1b