今回は osascript でファイル名関連をば。
を見つけてやっと Objective-C からの変換方法が解ってきた。
物凄く下のほうにあって見つけにくかったよ。
たとえばこんなふうに引数が二つ以上の場合は先頭を大文字にして合体。
/* contentsOfDirectoryAtPath:error: to contentsOfDirectoryAtPathError */ fm = $.NSFileManager.defaultManager files = fm.contentsOfDirectoryAtPathError(pathB, null)
– fileExistsAtPath:isDirectory: – NSFileManager Class Reference
つまり Objective-C の文法を少し理解していないと変換すらできない。
コロンって引数だったのか、解ってしまえば楽勝だけど。
ディレクトリ内容列挙は NSFileManager でできるようだ。
ということでコードを書いてみる。
実は var とセミコロンはいらないけどキモいので書くことにした。
#!/usr/bin/osascript ObjC.import("Cocoa"); // NSString var pathA = $.NSString.alloc.initWithString("~/Documents/"); // ~ to $HOME var pathB = pathA.stringByExpandingTildeInPath; console.log("Path @ " + pathB.UTF8String); // to URI var uri = $.NSURL.fileURLWithPath(pathB); console.log("URI @ " + uri.absoluteString.UTF8String); // FileManager var fm = $.NSFileManager.defaultManager; // get files var files = fm.contentsOfDirectoryAtPathError(pathB, null); for (var i=0; i<files.count; i++) { // error files[i] var filename = files.objectAtIndex(i).UTF8String; // remove dot file if (filename[0] != ".") { console.log(filename); } }
おかげで気が付いた、NSArray は添字ではアクセスできない。
JavaScript の配列でないからか、当然 forEach も length も使えない。
UTF8String に変換した後の文字列は添字可能、色々戸惑う。
バインドしているのではなく明確に型を分けているということみたい。
そんなこんなで。
Mac では JavaScript だけでやっていこうと思っていたけどコリャ無理だ。
Objective-C の勉強も始めますか、Fedora では使わないと思うけど。