#! perl my $pastebin_cmd; my $pastebin_url; sub upload_paste { my ($self) = @_; require Digest::MD5; my $txt = $self->selection; my $filename = Digest::MD5::md5_hex ($txt) . ".txt"; my $tmpfile = "/tmp/$filename"; my $msg = "uploaded $filename"; if (open my $o, ">", $tmpfile) { chmod 0644, $tmpfile; print $o $txt; close $o; } else { $msg = "couldn't write $tmpfile: $!"; } my $cmd = $pastebin_cmd; $cmd =~ s/%/$tmpfile/; if (system ($cmd) == 0) { my $url = $pastebin_url; $url =~ s/%/$filename/; $self->selection ($url); } else { $msg = "couldn't upload, '$cmd' failed"; } unlink $tmpfile; my $ov = $self->overlay (-1, 0, length $msg, 1, urxvt::OVERLAY_RSTYLE, 0); $ov->set (0, 0, $msg); my $timer; $timer = urxvt::timer ->new ->after (5) ->cb (sub {undef $timer; undef $ov; }); } sub on_start { my ($self) = @_; $pastebin_cmd = $self->x_resource ("selection-pastebin.cmd") || "rcp -p % ruth:/var/www/www.ta-sa.org/files/txt/"; $pastebin_url = $self->x_resource ("selection-pastebin.url") || "http://www.ta-sa.org/files/txt/%"; push @urxvt::ext::selection_popup::hook, sub { ("pastebin upload" => sub { $self->upload_paste }) }; () } sub on_keyboard_command { my ($self, $cmd) = @_; if ($cmd eq "selection-pastebin:remote-pastebin") { $self->upload_paste; } () }