Skip to content

Instantly share code, notes, and snippets.

@kjunichi

kjunichi/macruby.md

Last active Mar 23, 2018
Embed
What would you like to do?

Mavericksでmacgemが動かない

/usr/local/bin/macgem:9:in `<main>': undefined method `summary_indent=' for class `OptionParser' (NameError)

ruby 1.9.2の問題の可能性もありそう

1.9.3にしたら動いたとの書き込み これ自体、的外れだが、MacRubyのrubyのバージョンは1.9.2なので、、、

rbenv環境で、1.9.2を入れてgemが動くか確認して動かなければ、ビンゴ!

1.9.2の実装がMavericksだと問題だったら 1.9.3の変更となった実装をバックポートすれば対応できる(理論的には。。。)

Link

やったこと記録

ruby-1.9.2系を動かし、検証スクリプトの動作を確認させよう

1.9.2の最新版をrbenv installでビルドを試みるもyamlのコンパイルでclang対応がうまくできていないようで、NG

==> 1.9.2の最新版をビルドして、検証スクリプトが動かせた! 結果はOK、すべてエラーとならずに動いた!

1.9.2を動かすのにやったこと

brew tap homebrew/dupes
brew install apple-gcc42
CC=/usr/local/bin/gcc-4.2 RUBY_CONFIGURE_OPTS="--with-readline-dir=`brew --prefix readline` --with-openssl-dir=`brew --prefix openssl`" rbenv install 1.9.2-pxxx

MacRubyをMavericksでビルド

emscriptenを動かす時に使ったllvmをrakeのオプションに指定したが、NG

詳細な状況

gcc?,llvmのバイナリをDLして、これを使うようにrake実行時に指定した。 しかし、/usr/include配下のヘッダとこれらのヘッダの間で不整合となり、エラーとなっている模様

その後、ビルドに成功

詳細は、Compiling MacRuby on OSX 10.9 Mavericks - Mark Villacampa

関連記事

Objective-CとMacRubyの対応

ObjC

[NSApplication sharedApplication]

MacRubyで書くと

NSApp

Obj-Cのブロック構文

lambdaや->を使って扱えそうな模様

ブロック構文はblocksやblock syntaxでstackoverflowなど英語情報はググれる模様

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

framework 'Cocoa'

ペーストボードを取得

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

p = NSPasteboard.generalPasteboard;

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

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

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

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

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

data = p.dataForType(NSRTFPboardType);
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

どうやら、上記は10.5以前の古い定数を利用していた模様

NSHTMLPboardType,NSRTFPboardType

10.6以降は NSPasteboardTypeHTML,NSPasteboardTypeRTF

主なAPI

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

参考リンク

クリップボード(画像編)

クリップボード中の画像をDataURI形式で出力する

関連Gist

アクセス解析タグ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment