diff --git a/src/MacVim/Info.plist b/src/MacVim/Info.plist index 9474e5da20..2a681fc971 100644 --- a/src/MacVim/Info.plist +++ b/src/MacVim/Info.plist @@ -614,6 +614,23 @@ NSUserData Window + + NSMenuItem + + default + MacVim/New Document Here + + NSMessage + newFileHere + NSPortName + MacVim + NSSendTypes + + NSStringPboardType + + NSUserData + Window + SUFeedURL http://bjorn.winckler.googlepages.com/macvim_latest.xml diff --git a/src/MacVim/MMAppController.m b/src/MacVim/MMAppController.m index 4b94982503..b80cd256c7 100644 --- a/src/MacVim/MMAppController.m +++ b/src/MacVim/MMAppController.m @@ -94,6 +94,8 @@ static int executeInLoginShell(NSString *path, NSArray *args); error:(NSString **)error; - (void)openFile:(NSPasteboard *)pboard userData:(NSString *)userData error:(NSString **)error; +- (void)newFileHere:(NSPasteboard *)pboard userData:(NSString *)userData + error:(NSString **)error; @end @@ -1181,6 +1183,44 @@ fsEventCallback(ConstFSEventStreamRef streamRef, } } +- (void)newFileHere:(NSPasteboard *)pboard userData:(NSString *)userData + error:(NSString **)error +{ + if (![[pboard types] containsObject:NSStringPboardType]) { + NSLog(@"WARNING: Pasteboard contains no object of type " + "NSStringPboardType"); + return; + } + + NSString *path = [pboard stringForType:NSStringPboardType]; + + BOOL dirIndicator; + if (![[NSFileManager defaultManager] fileExistsAtPath:path + isDirectory:&dirIndicator]) { + NSLog(@"Invalid path. Cannot open new document at: %@", path); + return; + } + + if (!dirIndicator) + path = [path stringByDeletingLastPathComponent]; + + path = [path stringByReplacingOccurrencesOfString:@" " withString:@"\\ "]; + + MMVimController *vc = [self topmostVimController]; + NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; + BOOL openInCurrentWindow = [ud boolForKey:MMOpenInCurrentWindowKey]; + + if (vc && openInCurrentWindow) { + NSString *input = [NSString stringWithFormat:@"" + ":tabe|cd %@", path]; + [vc addVimInput:input]; + } else { + NSString *input = [NSString stringWithFormat:@":cd %@", path]; + [self launchVimProcessWithArguments:[NSArray arrayWithObjects: + @"-c", input, nil]]; + } +} + @end // MMAppController (MMServices)