cygwin ruby1.9.3 と win32-clipboard-0.5.2
cygwin Ruby1.9.3 環境に win32-clipboard を gem install してみたんだが
日本語の出し入れができなくなってる。
で、とりあえず動作する様にしてみる。
/usr/lib/ruby/gems/1.9.1/gems/win32-clipboard-0.5.2/lib/win32/clipboard.rb
--- clipboard.rb.org 2012-12-21 19:59:31.288117400 +0900 +++ clipboard.rb 2012-12-21 23:46:27.373912900 +0900 @@ -70,7 +70,7 @@ # NULL terminate text case format when TEXT, OEMTEXT, UNICODETEXT - clip_data << "\0" + clip_data.force_encoding('ASCII-8BIT') << "\0" end # Global Allocate a movable piece of memory. @@ -120,7 +120,11 @@ when TEXT, OEMTEXT, UNICODETEXT clip_data = 0.chr * GlobalSize(handle) memcpy(clip_data, handle, clip_data.size) - clip_data = clip_data[ /^[^\0]*/ ] + if format == UNICODETEXT + clip_data.force_encoding('UTF-16LE') + else + clip_data.force_encoding('Windows-31J').sub!(/\0.*/,'') + end when HDROP clip_data = get_file_list(handle) when ENHMETAFILE
自分の日本語環境でさえ動きゃいいや、という超適当な修正。
アラビア文字とハングルで試してみたけど、一応コピペできてる。
#!/usr/bin/ruby -Ku # coding: utf-8 require 'win32/clipboard' include Win32 h = {'korean'=>"(ハングル)".encode('UTF-16LE'), 'arabian'=>'(アラビア文字)'.encode('UTF-16LE')} Clipboard.set_data(h[ARGV.shift], Clipboard::UNICODETEXT) puts Clipboard.data(Clipboard::UNICODETEXT)
Windowsの言語環境情報から Ruby のエンコーディングラベル('Windows-31J'とか)を簡単に生成できないのかな。