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 @@ cocoa_send_notification(PyObject *self UNUSED, PyObject *args) { 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 b609de2c7..c6a79d7fd 100755 --- a/setup.py +++ b/setup.py @@ -1006,21 +1006,19 @@ def macos_info_plist() -> bytes: { 'CFBundleTypeName': 'Text files', 'LSItemContentTypes': ['public.text'], - 'LSTypeIsPackage': False, 'CFBundleTypeRole': 'Editor', 'LSHandlerRank': 'Alternate', }, { 'CFBundleTypeName': 'Image files', 'LSItemContentTypes': ['public.image'], - 'LSTypeIsPackage': False, 'CFBundleTypeRole': 'Viewer', 'LSHandlerRank': 'Alternate', }, # Allows dragging arbitrary files to kitty Dock icon, and list kitty in the Open With context menu. { 'CFBundleTypeName': 'All files', - 'LSItemContentTypes': ['public.content', 'public.data'], + 'LSItemContentTypes': ['public.archive', 'public.content', 'public.data'], 'CFBundleTypeRole': 'Editor', 'LSHandlerRank': 'Alternate', }, @@ -1092,6 +1090,12 @@ def macos_info_plist() -> bytes: '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(