« iTerm_send_text_extended-02_trunk-1878.diff » colorisé

Vous pouvez télécharger le fichier original ici : iTerm_send_text_extended-02_trunk-1878.diff

 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: