diff --git a/MMBackend.m b/MMBackend.m index 462ad88217..4618d836a7 100644 --- a/MMBackend.m +++ b/MMBackend.m @@ -2008,7 +2008,7 @@ enum { for (i = 0; i < n && bytes < end; ++i) { int len = *((int*)bytes); bytes += sizeof(int); NSString *file = [NSString stringWithUTF8String:bytes]; - file = [file stringByEscapingInvalidFilenameCharacters]; + file = [file stringByEscapingSpecialFilenameCharacters]; bytes += len; [cmd appendString:@" "]; diff --git a/MacVim.h b/MacVim.h index ebbd9c0e2a..52c16924f9 100644 --- a/MacVim.h +++ b/MacVim.h @@ -220,9 +220,7 @@ ATSFontContainerRef loadFonts(); @interface NSString (MMExtras) -- (NSString *)stringByEscapingPercent; -- (NSString *)stringByEscapingSpace; -- (NSString *)stringByEscapingInvalidFilenameCharacters; +- (NSString *)stringByEscapingSpecialFilenameCharacters; @end diff --git a/MacVim.m b/MacVim.m index 814faec1be..5ad21d863a 100644 --- a/MacVim.m +++ b/MacVim.m @@ -124,46 +124,42 @@ loadFonts() @implementation NSString (MMExtras) -- (NSString *)stringByEscapingPercent +- (NSString *)stringByEscapingSpecialFilenameCharacters { + // NOTE: This code assumes that no characters already have been escaped. NSMutableString *string = [self mutableCopy]; - // Some '%' may already be escaped, so un-escape first... - [string replaceOccurrencesOfString:@"\\%" - withString:@"%" + [string replaceOccurrencesOfString:@"\\" + withString:@"\\\\" options:NSLiteralSearch range:NSMakeRange(0, [string length])]; - // ...then escape all '%' - [string replaceOccurrencesOfString:@"%" - withString:@"\\%" - options:NSLiteralSearch - range:NSMakeRange(0, [string length])]; - - return [string autorelease]; -} - -- (NSString *)stringByEscapingSpace -{ - NSMutableString *string = [self mutableCopy]; - - // Some space chars may already be escaped, so un-escape first... - [string replaceOccurrencesOfString:@"\\ " - withString:@" " - options:NSLiteralSearch - range:NSMakeRange(0, [string length])]; - // ...then escape all space chars [string replaceOccurrencesOfString:@" " withString:@"\\ " options:NSLiteralSearch range:NSMakeRange(0, [string length])]; + [string replaceOccurrencesOfString:@"\t" + withString:@"\\\t " + options:NSLiteralSearch + range:NSMakeRange(0, [string length])]; + [string replaceOccurrencesOfString:@"%" + withString:@"\\%" + options:NSLiteralSearch + range:NSMakeRange(0, [string length])]; + [string replaceOccurrencesOfString:@"#" + withString:@"\\#" + options:NSLiteralSearch + range:NSMakeRange(0, [string length])]; + [string replaceOccurrencesOfString:@"|" + withString:@"\\|" + options:NSLiteralSearch + range:NSMakeRange(0, [string length])]; + [string replaceOccurrencesOfString:@"\"" + withString:@"\\\"" + options:NSLiteralSearch + range:NSMakeRange(0, [string length])]; return [string autorelease]; } -- (NSString *)stringByEscapingInvalidFilenameCharacters -{ - return [[self stringByEscapingSpace] stringByEscapingPercent]; -} - @end // NSString (MMExtras)