« iTermの仕様?Macの文字コードの問題 | メイン | MacのDreamweaver MX 2004でプロパティパレットの文字が消える »

iTerm ペースト時のエンマークの文字化けを回避するPatch

iTermでペースト時にエンマークが文字化けする問題を回避するPatchをつくりました。
これで快適にPerlのワンライナーを書ける。

普通に文字を挿入する時と、ペーストするときと、処理が異なっていて、ペースト時に¥(円記号)をコンバートしないようになっていたので、文字を挿入するときのプログラムをコピー。
初めて、Xcodeを触って、Objective-Cもはじめて見る。非常に自信ない。
max = [aString length];は合っているのだろうか。。

以下Patch

Index: PTYSession.m
===================================================================
RCS file: /cvsroot/iterm/iTerm/PTYSession.m,v
retrieving revision 1.252
diff --unified=3 -r1.252 PTYSession.m
--- PTYSession.m	18 May 2004 06:52:23 -0000	1.252
+++ PTYSession.m	27 Aug 2004 09:15:52 -0000
@@ -824,7 +824,19 @@
 	
     if ([aString length] > 0)
     {
-        NSData *strdata = [[aString stringReplaceSubstringFrom:@"\n" to:@"\r"]
+
+		NSMutableString *mstring;
+		int i, max;
+
+		mstring = [NSMutableString stringWithString:aString];
+		max = [aString length];
+		for(i=0; i<max; i++) {
+			if ([mstring characterAtIndex:i] == 0xa5) {
+				[mstring replaceCharactersInRange:NSMakeRange(i, 1) withString:@"\\"];
+			}
+		}
+
+        NSData *strdata = [[mstring stringReplaceSubstringFrom:@"\n" to:@"\r"]
                                     dataUsingEncoding:[TERMINAL encoding]
 								 allowLossyConversion:YES];
 		

</pre>

なぜ、0x5cでもなく0xb4でもなく0x80でもなく、0xa5なのか、よくわからなかったり。
はやくSafariの文字化けをなおしてください to Apple