TextCore.Uno aims to offer a small, stable set of CoreText/IME primitives editor
hosts can use to implement platform text input and IME support on Skia-based
desktop platforms. It exposes a managed CoreText* API surface and uses
different approaches for platform integration:
- On Windows, it uses the Win32 IME APIs (user32/imm32) via P/Invoke.
- On macOS, it includes a tiny native macOS helper (
libUnoEditMacInput.dylib) used to surface AppKit text input callbacks to managed code. - On Linux, it uses
libX11via P/Invoke for X11 calls and communicates with IBus over D-Bus using a built-in managed DBus-over-socket implementation (no libibus/libdbus P/Invoke).
- Install the NuGet package:
dotnet add package LeXtudio.UI.Text.Core- Or add a
PackageReferenceto your project file:
<PackageReference Include="LeXtudio.UI.Text.Core" Version="1.*" />For advanced workflows (consuming from source, building the native macOS helper, or producing packages) see CONTRIBUTING.md.
CoreTextServicesManager.GetForCurrentView()— factory; callCreateEditContext()to get aCoreTextEditContext.CoreTextEditContext— central event hub. Important events:TextRequestedTextUpdatingSelectionRequestedSelectionUpdatingLayoutRequestedCompositionStarted/CompositionCompleted/FocusRemovedCommandReceived— receives platform command selectors (e.g. AppKitdoCommandBySelector:strings).
Lifecycle methods:
bool Attach(nint windowHandle)— attach to a native window.void NotifyCaretRectChanged(double x, double y, double width, double height).void NotifyFocusEnter()/void NotifyFocusLeave().void Dispose().
var manager = CoreTextServicesManager.GetForCurrentView();
var ctx = manager.CreateEditContext();
ctx.TextRequested += (s, e) => e.Request.Text = GetDocumentText();
ctx.TextUpdating += (s, e) => ApplyEdit(e.NewText);
ctx.CommandReceived += (s, e) => {
if (e.Command == "deleteBackward:") { Backspace(); e.Handled = true; }
};
ctx.Attach(hwnd);
ctx.NotifyCaretRectChanged(x, y, w, h);
// ...
ctx.Dispose();This project is licensed under the MIT License. See the LICENSE file for details.
(c) 2026 LeXtudio Inc. All rights reserved.