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::*ってモジュールて日本語の扱いが微妙ですよね。