Vous pouvez télécharger le fichier original ici : iTerm_send_text_extended-02_trunk-1878.diff
« iTerm_send_text_extended-02_trunk-1878.diff » colorisé
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | diff --git a/PTYSession.m b/PTYSession.m --- a/PTYSession.m +++ b/PTYSession.m @@ -507,11 +507,59 @@ if([keyBindingText length] > 0) { NSMutableString *aString = [NSMutableString stringWithString: keyBindingText]; - [aString replaceOccurrencesOfString:@"\\n" withString:@"\n" options:NSLiteralSearch range:NSMakeRange(0,[aString length])]; - [aString replaceOccurrencesOfString:@"\\e" withString:@"\e" options:NSLiteralSearch range:NSMakeRange(0,[aString length])]; - [aString replaceOccurrencesOfString:@"\\a" withString:@"\a" options:NSLiteralSearch range:NSMakeRange(0,[aString length])]; - [aString replaceOccurrencesOfString:@"\\t" withString:@"\t" options:NSLiteralSearch range:NSMakeRange(0,[aString length])]; - [self writeTask: [aString dataUsingEncoding: NSUTF8StringEncoding]]; + // [aString replaceOccurrencesOfString:@"\\n" withString:@"\n" options:NSLiteralSearch range:NSMakeRange(0,[aString length])]; + // [aString replaceOccurrencesOfString:@"\\e" withString:@"\e" options:NSLiteralSearch range:NSMakeRange(0,[aString length])]; + // [aString replaceOccurrencesOfString:@"\\a" withString:@"\a" options:NSLiteralSearch range:NSMakeRange(0,[aString length])]; + // [aString replaceOccurrencesOfString:@"\\t" withString:@"\t" options:NSLiteralSearch range:NSMakeRange(0,[aString length])]; + // [self writeTask: [aString dataUsingEncoding: NSUTF8StringEncoding]]; + NSMutableString *bString = [NSMutableString new]; + unsigned int len = [aString length]; + unsigned int c; + int j; + + for (int i=0; i < len; i++) { + c = [aString characterAtIndex:i]; + if (c == '\\') { + c = [aString characterAtIndex:++i]; + switch (c) { + case 'n': + [bString appendString:@"\n"]; + break; + case 'e': + [bString appendString:@"\e"]; + break; + case 'a': + [bString appendString:@"\a"]; + break; + case 't': + [bString appendString:@"\t"]; + break; + case 'x': + i++; + for (j=0; j < 4 && i+j < len && ishexnumber(c = [aString characterAtIndex:i+j]); j++); + if (j > 0) { + NSString *hexString = [aString substringWithRange:NSMakeRange(i, j)]; + const char *hexCString = [hexString UTF8String]; + unsigned int cvalue; + cvalue = strtoul(hexCString, NULL, 16); + i += j-1; + [bString appendFormat:@"%C", cvalue]; + } else { + [bString appendFormat:@"\\x%C", c]; + } + break; + case '\\': + [bString appendString:@"\\"]; + break; + default: + [bString appendFormat:@"\\%C", c]; + break; + } + } else { + [bString appendFormat:@"%C", c]; + } + } + [self writeTask: [bString dataUsingEncoding: NSUTF8StringEncoding]]; } break; case KEY_ACTION_IGNORE: |