ページ

2010年11月25日木曜日

[Mac]rb-appscriptでカーソルキーを叩く

app('System Events').keystroke('k')

とかやるとキーボードのkを叩けるが、カーソルキーはちょっと特殊で

keystroke(28.chr)  # 左
keystroke(29.chr)  # 右
keystroke(30.chr)  # 上
keystroke(31.chr)  # 下

とやってやればいい。

2010年11月4日木曜日

Objective-Cの文法とMacRubyでの書き方(続き)

続き

Cocoaに、NSMutableStringというクラスがある。
リファレンスを見ると、

inherits from NSString : NSObject

などと書かれているが、これはNSStringを継承しているということなので、NSStringのインスタンス変数やメソッドは全て使えるということ。

なので、NSStringのstringWithString:メソッドも使える。
書き方は、こう

NSMutableString* boku = [NSMutableString stringWithString:@"Doraemon"];

MacRubyで書くとしたら

boku = NSMtableString.stringWithString "Doraemon"

となる。

NSStringで作ったインスタンスの文字列は変更ができない。NSMutableStringのインスタンスでならできる。
で、文字列を後ろに追加するメソッドとかもある。

- (void)appendString:(NSString*)string

これをObjective-Cで使ってさっきのインスタンスに文字列を追加すると

[boku appendString:@"desu"];

MacRubyでは

boku.appendString "desu"

となる。


あとは、MacRubyのチュートリアルにも載っているNSWindowのinitWithContentRect:styleMask:backing:defer:メソッド

リファレンスで見ると

- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)windowStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)deferCreation

とかなってて一見意味不明だが、これも引数とかが増えただけで基本的に同じ。

- (返り値型)メソッド名:(引数型)引数名 ラベル:(引数型)引数名: ラベル(引数型)引数名: ラベル(引数型)引数名

コロンの数と引数の数が同じになることを覚えておくと多少わかりやすい。

Objective-Cで使うときは

NSWindow *window = [[NSWindow alloc] initWithContentRect:frame
     styleMask:NSBorderlessWindowMask
     backing:NSBackingStoreBuffered
     defer:false];

MacRubyで使うときは

window = NSWindow.alloc.initWithContentRect frame,
     styleMask:NSBorderlessWindowMask,
     backing:NSBackingStoreBuffered,
     defer:false

とかになる。改行してる部分を半角スペースにして一行で書いても同じはず。

Objective-Cの文法とMacRubyでの書き方

リファレンスの見方とかよくわかってなかったので自分用まとめ。間違ってるとこなどあれば教えてください。

Cocoaには、NSStringというクラスがあり、NSStringには、文字列を作成するstringWithString:というメソッドがある。
リファレンスを見ると

+ (id)stringWithString:(NSString *)aString

と書かれているが、これは

+ (返り値型)メソッド名:(引数型)引数

ということ。
最初の「+」は、クラスメソッドであることを示し、「-」になっているものは、インスタンスメソッドであることを示す。

これを実際に使って、obakeという変数に"Qtaro"という文字列を入れるには

NSString* obake;
obake = [NSString stringWithString:@"Qtaro"];

とか書く。

NSString* obake; ってのは、int i; みたいなものでNSStringクラスのインスタンスのための変数を確保するという、まあとにかくObjective-Cではそう書くものだと思っていればいいもの。「*」が必要。

obake = [NSString stringWithString:@"Qtaro"]; 

の部分が、Objective-C的なメソッドの呼び出し方で、

返り値 = [クラス名 メソッド名:引数]; 

になってる。インスタンスメソッドの場合は [インスタンス名 メソッド名:引数] になる。

上は二行で書いたけど、

NSString* obake = [NSString stringWithString:@"Qtaro"];

って一行で書くほうがたぶん普通なんでしょう。

で、これをMacRuby的文法で書こうと思ったら、

obake = NSString.stringWithString "Qtaro"

ってなる。

長いので続く