Macで Clipboardを utf-8で使う。

Clipboardモジュールは OS間のクリップボードの違いを埋めてくれるもの
なのですが、Macの場合、MacJapanese(Shift_jis + Apple拡張)で encodeしないと
ちゃんと日本語が扱えないというのがあって、それだと Linux向けに書いた utf-8
コードをそのまま持ってこれないなぁということになりました。


Macの場合、実際は Mac::Pasteboardという XSモジュールが使われるのですが、
それを使うまでもなく、pbcopy、pbpasteにただバイト列を送るようなものに
すれば楽だし、utf-8扱えるしということで書いてみました。
内容は Clipboard::Xclipとほぼ同じです。

#!/usr/bin/env perl
use strict;
use warnings;

package Clipboard::Mac::Simple;
use Carp ();

sub copy {
    my ($self, $input) = @_;

    my @cmds =qw/pbcopy/;
    open my $fh, "|-", qw/pbcopy/ or Carp::croak("Can't open pbcopy: $!\n");
    print $fh $input;
    close $fh;
}

sub paste {
    my $self = shift;

    open my $fh, "-|", qw/pbpaste/ or Carp::croak("Can't open pbpaste: $!\n");
    my $val = do {
        local $/;
        <$fh>;
    };
    close $fh;

    return $val;
}

package main;
use Clipboard;
use utf8;
use Encode;

$Clipboard::driver = 'Clipboard::Mac::Simple';

my $str = "よんでますよ、アザゼルさん";
Clipboard->copy(encode_utf8($str));

print "str is ", Clipboard->paste(), "\n";

ちゃんとペーストもできます。


Mac::*ってモジュールて日本語の扱いが微妙ですよね。