From 824b46507c1692829a4bd43d147a6aeb7ebc3f37 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 12 May 2026 13:20:35 +0530 Subject: [PATCH 1/2] Keep text/uri-list as private MIME for kitty to kitty DnD --- glfw/cocoa_window.m | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/glfw/cocoa_window.m b/glfw/cocoa_window.m index f6eba0865..866b0996b 100644 --- a/glfw/cocoa_window.m +++ b/glfw/cocoa_window.m @@ -4351,12 +4351,21 @@ add_uri_list_drag_items(_GLFWwindow *window, NSMutableArray* dr static int add_drag_items(_GLFWwindow *window, NSMutableArray* dragItems, GLFWDragSourceItem *mime_item, const GLFWimage *thumbnail) { + // URI list items get added directly to the clipboard for use by native apps since macOS does not support + // the text/uri-list MIME type, however this type remains as a private + // kitty type to enable kitty to kitty DnD for remote clients. + bool is_uri_list = false; if (strcmp(mime_item->mime_type, "text/uri-list") == 0 && mime_item->optional_data && mime_item->data_size) { - return add_uri_list_drag_items(window, dragItems, mime_item->optional_data, mime_item->data_size, mime_item->is_remote_client, thumbnail); + is_uri_list = true; + int err = add_uri_list_drag_items(window, dragItems, mime_item->optional_data, mime_item->data_size, mime_item->is_remote_client, thumbnail); + if (err != 0) return err; } NSString* utiString = mime_to_uti(mime_item->mime_type); id w; - if (mime_item->optional_data) { + // remote client URI list must be set a file promise so that the kitty drag + // source code receives a request for it and can then fetch the remote + // files. + if (mime_item->optional_data && !(is_uri_list && mime_item->is_remote_client)) { NSPasteboardItem *pbItem = [[[NSPasteboardItem alloc] init] autorelease]; NSData *data = [NSData dataWithBytes:mime_item->optional_data length:mime_item->data_size]; [pbItem setData:data forType:utiString]; From c0661024d893ffe623181a960e16fbf642df66ca Mon Sep 17 00:00:00 2001 From: Xuyiyang23333 Date: Wed, 13 May 2026 00:37:55 +0800 Subject: [PATCH 2/2] Fix silent failure when pager (less) is not installed When kitten --help is run in a terminal and less is not available, ShowHelpInPager silently discards the error from pager.Run(), resulting in no output and a zero exit code. Fall back to writing help text directly to stdout when the pager fails, matching the behavior of the Python equivalent in kitty/cli.py which catches FileNotFoundError and prints the text as a fallback. Signed-off-by: Xuyiyang23333 --- tools/cli/help.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/cli/help.go b/tools/cli/help.go index 4db7614ca..29a38ef8e 100644 --- a/tools/cli/help.go +++ b/tools/cli/help.go @@ -131,7 +131,9 @@ func ShowHelpInPager(text string) { pager.Stdin = strings.NewReader(text) pager.Stdout = os.Stdout pager.Stderr = os.Stderr - _ = pager.Run() + if err := pager.Run(); err != nil { + os.Stdout.WriteString(text) + } } func getDeterministicTimestamp() time.Time {