urxvtはOSC52エスケープシーケンスをサポートしていますか?

urxvtはOSC52エスケープシーケンスをサポートしていますか?

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。これにより、次の2つの簡単な手順でOSC52のサポートを追加できます。

  • スクリプトを次の場所にコピーします。~/.urxvt/ext/52-osc
  • 設定ファイルに次の行を追加して~/.Xdefaultsurxvtからインポートします。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/);
    }

    ()
}

おすすめ記事