OSC52 이스케이프 시퀀스는 터미널에 임의의 텍스트를 시스템 클립보드에 넣으라고 지시합니다. 다음과 같이 SSH를 통해 원격 Vim 세션에서 로컬 클립보드로 복사할 수 있다는 사실을 활용하고 싶습니다.여기. 그러나 내가 사용하고 있는 터미널인 urxvt(rxvt-unicode라고도 함)가 이 이스케이프 시퀀스를 지원하는지 여부에 대해 상충되는 정보를 받았습니다.
이 기능을 구현할 수도 있고 구현하지 않을 수도 있는 Perl 스크립트를 찾았으며 clipboard-osc
이를 내 urxvt 구성 파일에 다음 줄로 추가했습니다 . 작동할 수 없으며 이 Perl 스크립트(및 이스케이프 시퀀스)에 대한 ~/.Xdefaults
몇 가지 질문이 있습니다URxvt.perl-ext-common: clipboard-osc
그렇다면 urxvt는 클립보드 통합을 위해 OSC52 이스케이프 시퀀스를 지원합니까? 그렇다면 어떻게 사용하고 피해야 할 함정은 무엇입니까?
답변1
내 문제에 대한 해결책을 찾았습니다. 나중에 참조할 수 있도록 여기에 게시하고 있습니다.
urxvt는 기본적으로 OSC52 이스케이프 시퀀스를 지원하지 않습니다. 이는 유감입니다. 그러나 urxvt는 Perl 스크립트를 통해 확장성이 뛰어나므로 OSC52에 대한 지원을 추가하는 Perl 스크립트가 있습니다. 예는 다음과 같습니다이 작은 스크립트작성자: GitHub 사용자 parantapa. 이렇게 하면 다음 두 가지 간단한 단계를 통해 OSC52에 대한 지원을 추가할 수 있습니다.
- 스크립트를 다음 위치에 복사하세요.
~/.urxvt/ext/52-osc
- 구성 파일 에 다음 줄을 추가하여
~/.Xdefaults
urxvt에서 가져옵니다 .URxvt.perl-ext-common: 52-osc
완전성과 향후 교정을 위해 전체 스크립트는 다음과 같습니다.
#! perl
=head1 NAME
52-osc - Implement OSC 32 ; Interact with X11 clipboard
=head1 SYNOPSIS
urxvt -pe 52-osc
=head1 DESCRIPTION
This extension implements OSC 52 for interacting with system clipboard
Copied from GitHub user parantapa, who also reports most code came from:
http://ailin.tucana.uberspace.de/static/nei/*/Code/urxvt/
=cut
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/);
}
()
}