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
	}
	()
}
