use MIME::Base64; use Encode; our $get_selection; our $clip; sub on_sel_paste { my ($term, $data) = @_; if ($get_selection) { $get_selection = undef; Encode::_utf8_off($data); # XXX $term->tt_write("\e]52;$clip;".encode_base64($data, '')."\a"); 1 } else { () } } sub on_osc_seq { my ($term, $op, $args) = @_; return () unless $op eq 52; my $data; ($clip, $data) = split ';', $args, 2; if ($data eq '?') { $get_selection = 1; eval { $get_selection = undef unless $term->selection_request(urxvt::CurrentTime, $clip =~ /c/); }; if ($@) { my $data_free = $term->selection(); on_sel_paste($term, $data_free); } } else { my $data_decoded = decode_base64($data); Encode::_utf8_on($data_decoded); # XXX $term->selection($data_decoded, $clip =~ /c/); $term->selection_grab(urxvt::CurrentTime, $clip =~ /c/); $term->exec_async('xdg-open', $data_decoded) if $clip =~ /x/; # some test extension } () }