use MIME::Base64; use Encode; sub on_osc_seq { my ($term, $op, $args) = @_; return () unless $op eq 52; my ($clip, $data) = split ';', $args, 2; if ($data eq '?') { my $data_free = $term->selection(); Encode::_utf8_off($data_free); # XXX $term->tt_write("\e]52;$clip;".encode_base64($data_free, '')."\a"); } 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 } () }