diff --git a/kitty/cocoa_window.m b/kitty/cocoa_window.m index ae25c170d..bfe25af42 100644 --- a/kitty/cocoa_window.m +++ b/kitty/cocoa_window.m @@ -520,6 +520,19 @@ - (BOOL)openFilesFromPasteboard:(NSPasteboard *)pasteboard type:(int)type { return YES; } +- (BOOL)openFileURLs:(NSPasteboard*)pasteboard + userData:(NSString *) UNUSED userData error:(NSError **) UNUSED error { + NSDictionary *options = @{ NSPasteboardURLReadingFileURLsOnlyKey: @YES }; + NSArray *urlArray = [pasteboard readObjectsForClasses:[NSArray arrayWithObject:[NSURL class]] options:options]; + for (NSURL *url in urlArray) { + NSString *path = [url path]; + if ([[NSFileManager defaultManager] fileExistsAtPath:path]) { + set_cocoa_pending_action(LAUNCH_URL, [[[NSURL fileURLWithPath:path] absoluteString] UTF8String]); + } + } + return YES; +} + @end // global menu {{{ diff --git a/setup.py b/setup.py index 47f1e3aea..c6a79d7fd 100755 --- a/setup.py +++ b/setup.py @@ -1090,6 +1090,12 @@ def access(what: str, verb: str = 'would like to access') -> str: 'NSRequiredContext': {'NSTextContent': 'FilePath'}, 'NSSendTypes': ['NSFilenamesPboardType', 'public.plain-text'], }, + { + 'NSMenuItem': {'default': f'Open with {appname}'}, + 'NSMessage': 'openFileURLs', + 'NSRequiredContext': {'NSTextContent': 'FilePath'}, + 'NSSendTypes': ['NSFilenamesPboardType', 'public.plain-text'], + }, ] pl = dict(