non vorrei lavorare

ブログ名の通りです。javascript three.js mruby rust OCaml golang julialang blender

MacRubyでクリップボードを扱う(テキスト編)

おはようございます。息子とプラレールで遊んでるうちに自分のほうが夢中になって、 ブログの更新がおろそかになっているkjunichiです。

 

Cocoaフレームワークのロード

framework 'Cocoa'

ペーストボードを取得

OSXではペーストボードと呼んでる臭い

p = NSPasteboard.generalPasteboard;

HTML形式で格納されているデータを取り出すには

data = p.dataForType(NSPasteboardTypeHTML);
if( data )
attrString = NSString.alloc.initWithData(data,encoding:NSUTF8StringEncoding);
puts attrString;
end

リッチテキスト形式で格納されているかも

OSXで動くブラウザによってはHTML形式ではなく、リッチテキスト形式で格納されているものもあった。

HTML形式には簡単?に以下の様にNSAttributeStringを介して変換出来た。

data = p.dataForType(NSPasteboardTypeRTF);
if( data )
attrString = NSAttributedString.alloc.initWithRTF(data,documentAttributes:nil)
attributeDict = {NSDocumentTypeDocumentAttribute=>NSHTMLTextDocumentType}
htmlData = attrString.dataFromRange(NSMakeRange(0, attrString.length()),documentAttributes:attributeDict,error:nil)
htmlString = NSString.alloc.initWithData(htmlData,encoding:NSUTF8StringEncoding)
puts htmlString
end

プレインテキストで格納されている場合

data = p.dataForType(NSStringPboardType);
if( data )
puts data
end

主なAPI

  • NSPasteboard.dataForType
  • NSAttributedString.alloc.initWithRTF
  • NSAttributedString.dataFromRange
  • NSString.alloc.initWithData

参考リンク

関連記事

4年後の記事