読者です 読者をやめる 読者になる 読者になる

yank用の非公開関数をWebKitのソースに発見

WebKitのWebHTMLView.m のソースの中に

// Kill ring calls. Would be better to use NSKillRing.h, but that's not available in SPI.
void _NSInitializeKillRing(void);
void _NSAppendToKillRing(NSString *);
void _NSPrependToKillRing(NSString *);
NSString *_NSYankFromKillRing(void);
NSString *_NSYankPreviousFromKillRing(void);
void _NSNewKillRingSequence(void);
void _NSSetKillRingToYankedState(void);
void _NSResetKillRingOperationFlag(void);

という宣言を発見。Cocoaアプリのキルリングの中身は アップルとしては非公開(非公式?) の関数でできてるっぽいですね。


ということで不慣れなObjective-C

/* ヘッダとかは略 */

@implementation NSTextView(inspectKillRing)

void _NSInitializeKillRing(void);
void _NSAppendToKillRing(NSString *);
void _NSPrependToKillRing(NSString *);
NSString *_NSYankFromKillRing(void);
NSString *_NSYankPreviousFromKillRing(void);
void _NSNewKillRingSequence(void);
void _NSSetKillRingToYankedState(void);
void _NSResetKillRingOperationFlag(void);

- (IBAction)inspectKillRing:(id)sender
{
	NSLog(@"_NSYankFromKillRing() --> %@" , _NSYankFromKillRing());
	NSLog(@"_NSYankPreviousFromKillRing() --> %@" , _NSYankPreviousFromKillRing());	
}
@end

とりあえずこんな風に書いてXcodeでビルドしたら ログでキルリングの中身を見れました :)