Skip to content

Instantly share code, notes, and snippets.

@rhaberkorn
Created September 23, 2024 09:42
Show Gist options
  • Save rhaberkorn/d7406420b69841ebbcab97548e38b37d to your computer and use it in GitHub Desktop.
Save rhaberkorn/d7406420b69841ebbcab97548e38b37d to your computer and use it in GitHub Desktop.
#! perl
=head1 NAME
52-osc - Implement OSC 52 ; Interact with X11 clipboard
=head1 SYNOPSIS
urxvt -pe 52-osc
=head1 DESCRIPTION
This extension implements OSC 52 for interacting with system clipboard
This is adapted from https://gist.github.com/ojroques/30e9ada6edd9226f9cc1d6776ece31cc
to use the actual system clipboard instead of the urxvt selection.
=cut
use Clipboard;
use MIME::Base64;
use Encode;
my %clip_map = ('c' => "clipboard", 'p' => "primary", 's' => "secondary");
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 = $Clipboard::driver->paste_from_selection($clip_map{$clip});
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
$Clipboard::driver->copy_to_selection($clip_map{$clip}, $data_decoded);
}
()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment