From af5e423ea5086b1acb6b265db0870ac79ba5e405 Mon Sep 17 00:00:00 2001 From: Bryan Lee <38807139+liby@users.noreply.github.com> Date: Sun, 12 Jan 2025 01:48:48 +0800 Subject: [PATCH] Clear selection when IME input starts --- include/ghostty.h | 1 + macos/Sources/Ghostty/SurfaceView_AppKit.swift | 5 +++++ src/apprt/embedded.zig | 5 +++++ 3 files changed, 11 insertions(+) diff --git a/include/ghostty.h b/include/ghostty.h index 29da8f37b..e6e625c4b 100644 --- a/include/ghostty.h +++ b/include/ghostty.h @@ -748,6 +748,7 @@ void ghostty_surface_complete_clipboard_request(ghostty_surface_t, bool); bool ghostty_surface_has_selection(ghostty_surface_t); uintptr_t ghostty_surface_selection(ghostty_surface_t, char*, uintptr_t); +void ghostty_surface_clear_selection(ghostty_surface_t); #ifdef __APPLE__ void ghostty_surface_set_display_id(ghostty_surface_t, uint32_t); diff --git a/macos/Sources/Ghostty/SurfaceView_AppKit.swift b/macos/Sources/Ghostty/SurfaceView_AppKit.swift index 14143313e..362547e9e 100644 --- a/macos/Sources/Ghostty/SurfaceView_AppKit.swift +++ b/macos/Sources/Ghostty/SurfaceView_AppKit.swift @@ -1293,6 +1293,11 @@ extension Ghostty.SurfaceView: NSTextInputClient { } func setMarkedText(_ string: Any, selectedRange: NSRange, replacementRange: NSRange) { + // Clear selection when IME input starts + if let surface = self.surface, ghostty_surface_has_selection(surface) { + ghostty_surface_clear_selection(surface) + } + switch string { case let v as NSAttributedString: self.markedText = NSMutableAttributedString(attributedString: v) diff --git a/src/apprt/embedded.zig b/src/apprt/embedded.zig index 44c4c5f20..441d10f59 100644 --- a/src/apprt/embedded.zig +++ b/src/apprt/embedded.zig @@ -1550,6 +1550,11 @@ pub const CAPI = struct { return selection.len; } + /// Clear the current selection in the surface. + export fn ghostty_surface_clear_selection(surface: *Surface) void { + surface.core_surface.io.terminal.screen.clearSelection(); + } + /// Tell the surface that it needs to schedule a render export fn ghostty_surface_refresh(surface: *Surface) void { surface.refresh();