ブログを書いていて他ページのリンクを埋め込むときにいつも手で <A>タグを書いている。いい加減面倒になってきたので Safariの URLをドラッグ&ドロップするとそのページの <A>タグを生成するプチアプリを(ボケ防止も兼ねて)作ってみた。
動作イメージ:
(1) Safari の URLをドラッグしてアプリへ落とす
(2) URLとタイトルが埋め込まれた <A>タグが、テキストボックスに生成される
後はこれをコピーして使う。
ソースコード:AHREFGenerator-01.zip
小一時間で作成したので最小限動くだけのコード。URLを受け取るビューのコードを以下に掲載する。
DropURL.m
まずペーストボードタイプの登録。
- (void)awakeFromNib { [self registerForDraggedTypes:[NSArray arrayWithObjects: @"WebURLsWithTitlesPboardType",nil]]; }
続いてドロップの受け入れ許可。
- (NSDragOperation)draggingEntered:(id)sender { NSPasteboard *pb = [sender draggingPasteboard]; NSArray* pb_types = [pb types]; if ([pb_types containsObject:@"WebURLsWithTitlesPboardType"]) { return NSDragOperationCopy; } return NSDragOperationNone; }
最後に<A>タグの生成。
- (BOOL)performDragOperation:(id < NSDraggingInfo >)sender { NSPasteboard* pb = [sender draggingPasteboard]; NSArray* pb_types = [pb types]; if ([pb_types containsObject:@"WebURLsWithTitlesPboardType"]) { NSArray *props = [pb propertyListForType:@"WebURLsWithTitlesPboardType"]; NSString* url = [[props objectAtIndex:0] objectAtIndex:0]; NSString* title = [[props objectAtIndex:1] objectAtIndex:0]; NSString* str = [NSString stringWithFormat: @"%@", url, title]; [text_view setString:str]; [text_view setSelectedRange:NSMakeRange(0, [str length])]; } return YES; }
Safari からわたってくるペーストボードに WebURLsWithTitlesPboardType というものがあり、ここから URLと合わせてページのタイトル文字列を取得することができる。配列の入れ子となっていてこんな感じで URL とタイトルが入っている。
2009-09-29 22:54:17.723 AHREFGenerator[6530:10b] ( ( "http://www.apple.com/ipodtouch/" ), ( "Apple - iPod touch - Music, games, apps, and more on a great iPod." ) )
ここからindexの決めうちでURLとタイトルを取り出す。
NSString* url = [[props objectAtIndex:0] objectAtIndex:0]; NSString* title = [[props objectAtIndex:1] objectAtIndex:0];
参考:CocoaDev: WebURLsWithTitlesPboardType
#早速活用できた ;->
- - - -
NSPasteboard は Snow Leopard で結構手が入っている。新規メソッドも追加されているようだ。
Mac Dev Center: NSPasteboard Class Reference
こんな感じで大半のメソッドが 10.5以前と、10.6以降の区別がされている。
Overview には 10.6 からの新機能が紹介されている。複数のアイテムを含むことができるようになった(らしい)。
またペーストボードに対するデータの書き込みと読み出しのインターフェイスがプロトコルとして定義されることで様々なクラスをペーストボードで直接扱えるようになったようだ。このあたりは別の機会に検証してみたい。
Mac Dev Center: NSPasteboardWriting Protocol Reference Protocol Reference
Mac Dev Center: NSPasteboardReading Protocol Reference Protocol Reference