From d50a22a63f36f3d4fb5bd2f4d7d0f89f36d84e8f Mon Sep 17 00:00:00 2001 From: root Date: Tue, 4 Sep 2012 22:41:11 +0000 Subject: *** empty log message *** --- src/perl/overlay-osc | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/perl/overlay-osc (limited to 'src/perl/overlay-osc') diff --git a/src/perl/overlay-osc b/src/perl/overlay-osc new file mode 100644 index 0000000..5b06e9a --- /dev/null +++ b/src/perl/overlay-osc @@ -0,0 +1,73 @@ +#! perl + +=head1 NAME + +overlay-osc - implement OSC to manage overlays + +=head1 DESCRIPTION + +This extension implements some OSC commands to display timed popups on the +screen - useful for status displays from within scripts. You have to read +the sources for more info. + +=cut + +# allows programs to open popups +# printf "\033]777;overlay;action;args\007" +# +# action "simple;;;;;;" +# printf "\033]777;overlay;simple;ov1;5;0;0;t;test\007" +# + +# action "timeout;;" +# printf "\033]777;overlay;timeout;ov1;6\007" + +# action "destroy;" +# printf "\033]777;overlay;destroy;ov1\007" + +# TODO: +## action "complex;;;;;;;;" +## action "set;;;;;;" + +sub on_osc_seq_perl { + my ($self, $osc, $resp) = @_; + + return unless $osc =~ s/^overlay;//; + + $osc =~ s/^([^;]+)+;// + or return; + + if ($1 eq "timeout") { + my ($id, $to) = split /;/, $osc, 2; + my $ov = $self->{ov}{$id} + or return; + if (length $to) { + $ov->{to}->start (urxvt::NOW + $to); + } else { + delete $ov->{to}; + } + + } elsif ($1 eq "simple") { + my ($id, $to, $x, $y, $t, $txt) = split /;/, $osc, 6; + if ($t eq "h") { + $txt = pack "H*", $txt; + utf8::decode $txt; + } + $self->{ov}{$id} = { + ov => $self->overlay_simple ($x, $y, $txt), + to => urxvt::timer + ->new + ->start (urxvt::NOW + $to) + ->cb(sub { + delete $self->{ov}{$id}; + }), + }; + + } elsif ($1 eq "destroy") { + delete $self->{ov}{$osc}; + } + + 1 +} + + -- cgit v1.2.3