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)