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 47f1e3aea..c6a79d7fd 100755 --- a/setup.py +++ b/setup.py @@ -1090,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(