Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
b001502
Bump TerminalGuiVersion to 2.4.9-develop.5
github-actions[bot] Jun 23, 2026
365a50f
test: characterize Editor Backspace decoding across terminal encodings
tig Jun 23, 2026
6c209d5
Rename internal references: gui-cs → tui-cs
tig Jun 23, 2026
c95049a
Bump TerminalGuiVersion to 2.4.9
github-actions[bot] Jun 23, 2026
bb801c2
Merge branch 'develop' into tig/rename-gui-cs-to-tui-cs
tig Jun 23, 2026
0c7e148
Merge pull request #254 from tui-cs/backmerge/v2.5.4
tig Jun 23, 2026
59a02c2
Merge pull request #257 from tui-cs/tig/rename-gui-cs-to-tui-cs
tig Jun 23, 2026
d6c15fe
test: address CR — assert decoded Key + side of delete; add provenanc…
tig Jun 23, 2026
2886bc3
Merge branch 'develop' into tig/backspace-characterization-tests
tig Jun 23, 2026
436f48a
style: apply dotnet format + jb cleanupcode to satisfy the style gate
tig Jun 23, 2026
f502a2b
Merge pull request #255 from tui-cs/tig/backspace-characterization-tests
tig Jun 23, 2026
382ff70
Bump TerminalGuiVersion to 2.4.10-develop.4
github-actions[bot] Jun 23, 2026
21203b8
Bump TerminalGuiVersion to 2.4.10-develop.6
github-actions[bot] Jun 23, 2026
61ae93d
Bump TerminalGuiVersion to 2.4.10
github-actions[bot] Jun 23, 2026
b7317a5
Bump TerminalGuiVersion to 2.4.11-develop.11
github-actions[bot] Jun 24, 2026
eabdbcb
Bump TerminalGuiVersion to 2.4.11-develop.14
github-actions[bot] Jun 24, 2026
d3e96c4
Bump TerminalGuiVersion to 2.4.11
github-actions[bot] Jun 24, 2026
656ed43
Bump TerminalGuiVersion to 2.4.12-develop.5
github-actions[bot] Jun 24, 2026
25dd94a
Bump TerminalGuiVersion to 2.4.12-develop.7
github-actions[bot] Jun 25, 2026
1302495
Bump TerminalGuiVersion to 2.4.12-develop.15
github-actions[bot] Jun 27, 2026
08c91c0
Bump TerminalGuiVersion to 2.4.12-develop.18
github-actions[bot] Jun 27, 2026
b7d9f21
Bump TerminalGuiVersion to 2.4.11
github-actions[bot] Jun 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/bump-terminal-gui.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ name: Bump Terminal.Gui
# breakage is visible, and fail this run.
#
# Triggers:
# - repository_dispatch `terminal-gui-published` (sent by gui-cs/Terminal.Gui's
# - repository_dispatch `terminal-gui-published` (sent by tui-cs/Terminal.Gui's
# publish workflow; payload: { "version": "2.4.6-develop.10" })
# - schedule: fallback poll, in case the dispatch is missing/not configured
# - workflow_dispatch: manual, with channel selection (use channel=stable to
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -224,8 +224,8 @@ jobs:
gh release create "$TAG" --title "ted $TAG" --generate-notes dist/*
fi

# Notify downstream repos (gui-cs/clet) so they can rebuild against the new Editor version.
# Uses a PAT stored as CLET_DISPATCH_TOKEN with `repo` scope on gui-cs/clet.
# Notify downstream repos (tui-cs/clet) so they can rebuild against the new Editor version.
# Uses a PAT stored as CLET_DISPATCH_TOKEN with `repo` scope on tui-cs/clet.
notify-downstream:
needs: [resolve-version, pack-and-publish]
runs-on: ubuntu-latest
Expand Down Expand Up @@ -254,7 +254,7 @@ jobs:
echo "::error::Timed out after 10min waiting for $VER on flat-container"
exit 1

- name: Dispatch to gui-cs/clet
- name: Dispatch to tui-cs/clet
if: ${{ env.CLET_DISPATCH_TOKEN != '' }}
uses: actions/github-script@v7
with:
Expand All @@ -269,12 +269,12 @@ jobs:
return;
}
await github.rest.repos.createDispatchEvent({
owner: 'gui-cs',
owner: 'tui-cs',
repo: 'clet',
event_type: eventType,
client_payload: { tge_version: process.env.VERSION }
});
console.log(`Dispatched ${eventType} with tge_version=${process.env.VERSION} to gui-cs/clet`);
console.log(`Dispatched ${eventType} with tge_version=${process.env.VERSION} to tui-cs/clet`);

notify-failure:
needs: [resolve-version, build-and-test, pack-and-publish]
Expand Down
12 changes: 6 additions & 6 deletions Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>

<Authors>gui-cs</Authors>
<Company>gui-cs</Company>
<Copyright>Copyright (c) gui-cs and contributors</Copyright>
<Authors>tui-cs</Authors>
<Company>tui-cs</Company>
<Copyright>Copyright (c) tui-cs and contributors</Copyright>

<!--
No version lives in the repo. Versions are computed from git tags by
Expand All @@ -22,8 +22,8 @@
-p:Version get an obviously-non-releasable placeholder.
-->
<Version Condition="'$(Version)' == ''">0.0.0-local</Version>
<PackageProjectUrl>https://github.com/gui-cs/Editor</PackageProjectUrl>
<RepositoryUrl>https://github.com/gui-cs/Editor</RepositoryUrl>
<PackageProjectUrl>https://github.com/tui-cs/Editor</PackageProjectUrl>
<RepositoryUrl>https://github.com/tui-cs/Editor</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PackageLicenseFile>LICENSE</PackageLicenseFile>

Expand All @@ -36,7 +36,7 @@
Override per-build via -p:TerminalGuiVersion=<x>; use -p:UseLocalTerminalGui=true
to build against the ../Terminal.Gui enlistment instead (see Directory.Build.targets).
-->
<TerminalGuiVersion Condition="'$(TerminalGuiVersion)' == ''">2.4.8</TerminalGuiVersion>
<TerminalGuiVersion Condition="'$(TerminalGuiVersion)' == ''">2.4.11</TerminalGuiVersion>
</PropertyGroup>

<ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion Directory.Build.targets
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
<Error Condition="'$(CI)' == 'true'"
Text="UseLocalTerminalGui is a local dev-loop switch and must not be used in CI; builds there depend on Terminal.Gui $(TerminalGuiVersion) from NuGet." />
<Error Condition="!Exists('$(LocalTerminalGuiProject)')"
Text="UseLocalTerminalGui=true but '$(LocalTerminalGuiProject)' does not exist. Clone gui-cs/Terminal.Gui next to this repo." />
Text="UseLocalTerminalGui=true but '$(LocalTerminalGuiProject)' does not exist. Clone tui-cs/Terminal.Gui next to this repo." />
</Target>

<Target Name="_BlockLocalTerminalGuiPack"
Expand Down
8 changes: 4 additions & 4 deletions Docs/Help/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Each editor action is identified by a `Command` name. To override a binding, set

```json
{
"$schema": "https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json",
"$schema": "https://tui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json",
"Terminal.Gui.Editor.Editor.DefaultKeyBindings": {
"Cut": { "All": ["Ctrl+W"] },
"Copy": { "All": ["Ctrl+Shift+C"] },
Expand Down Expand Up @@ -68,7 +68,7 @@ Terminal.Gui ships with one built-in theme: **`Default`**. Set the `"Theme"` key

```json
{
"$schema": "https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json",
"$schema": "https://tui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json",
"Theme": "Default"
}
```
Expand All @@ -83,7 +83,7 @@ The following example overrides the `Base` colour scheme in the `Default` theme

```json
{
"$schema": "https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json",
"$schema": "https://tui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json",
"Theme": "Default",
"Themes": {
"Default": {
Expand Down Expand Up @@ -113,5 +113,5 @@ Terminal.Gui supports over 160 named colours — the full W3C/CSS colour set plu

## Further reading

- [Terminal.Gui Configuration documentation](https://gui-cs.github.io/Terminal.Gui/docs/config)
- [Terminal.Gui Configuration documentation](https://tui-cs.github.io/Terminal.Gui/docs/config)
- [Keyboard Reference](keyboard-reference.md) — full list of default shortcuts
4 changes: 2 additions & 2 deletions Docs/Help/keyboard-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ This page lists all default keyboard shortcuts. All shortcuts are `Command`-boun
that grab `Ctrl+Alt+arrow`. The column-drag uses `Alt`+drag (not VS Code's `Shift+Alt`): inside
a terminal, `Shift`+drag is the terminal's own forced text-selection and `Alt` makes it a
rectangular block, so `Shift+Alt`+drag would never reach the editor. The mouse modifier is not
yet user-configurable — tracked by [gui-cs/Terminal.Gui#4888](https://github.com/gui-cs/Terminal.Gui/issues/4888).
yet user-configurable — tracked by [tui-cs/Terminal.Gui#4888](https://github.com/tui-cs/Terminal.Gui/issues/4888).

## Clipboard

Expand Down Expand Up @@ -108,7 +108,7 @@ To change a shortcut, add the new binding to your `config.json`:

```json
{
"$schema": "https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json",
"$schema": "https://tui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json",
"Terminal.Gui.Editor.Editor.DefaultKeyBindings": {
"Cut": { "All": ["Ctrl+W"] },
"Redo": { "All": ["Ctrl+Y"], "Macos": ["Cmd+Shift+Z"] }
Expand Down
2 changes: 1 addition & 1 deletion Docs/Help/multi-caret.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ Column selection matches VS Code behavior: typing over a ranged column replaces

Intentional deviations:

- **D1 — mouse modifier**: VS Code starts column selection with `Shift+Alt`+drag; this editor uses **`Alt`+drag** because Windows Terminal and xterm-family terminals reserve `Shift`+drag for terminal-side forced/block selection while an app has mouse mode enabled. Configurable mouse modifiers are tracked by [gui-cs/Terminal.Gui#4888](https://github.com/gui-cs/Terminal.Gui/issues/4888).
- **D1 — mouse modifier**: VS Code starts column selection with `Shift+Alt`+drag; this editor uses **`Alt`+drag** because Windows Terminal and xterm-family terminals reserve `Shift`+drag for terminal-side forced/block selection while an app has mouse mode enabled. Configurable mouse modifiers are tracked by [tui-cs/Terminal.Gui#4888](https://github.com/tui-cs/Terminal.Gui/issues/4888).
- **D2 — add caret at click**: VS Code uses `Alt`+Click; this editor keeps the existing **`Ctrl`+Click** binding. `Alt` is the column-drag modifier, so an `Alt`+Click alias would need drag-threshold disambiguation.
- **D3 — keyboard column-select**: not a deviation. `Ctrl+Shift+Alt+Arrow` and `Ctrl+Shift+Alt+PgUp/PgDn` match VS Code behavior when the terminal delivers the chord (TG's Kitty keyboard protocol support makes this available on capable terminals).
- **D4 — sticky Column Selection Mode**: VS Code's modal toggle is out of scope; this editor implements the drag and keyboard gestures, not a persistent mode with menu/status UI.
Expand Down
4 changes: 2 additions & 2 deletions Docs/Help/syntax-highlighting.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ Set the `"Theme"` key in `config.json`:

```json
{
"$schema": "https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json",
"$schema": "https://tui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json",
"Theme": "Default"
}
```
Expand All @@ -47,7 +47,7 @@ To change how highlighted text looks, override the colour scheme values for the

```json
{
"$schema": "https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json",
"$schema": "https://tui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json",
"Theme": "Default",
"Themes": {
"Default": {
Expand Down
4 changes: 2 additions & 2 deletions GitVersion.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# GitVersion 6.x configuration for gui-cs/Editor.
# GitVersion 6.x configuration for tui-cs/Editor.
#
# Same GitFlow model as gui-cs/Terminal.Gui (see its GitVersion.yml):
# Same GitFlow model as tui-cs/Terminal.Gui (see its GitVersion.yml):
#
# - `main` is the release branch; every stable release is a `v*` tag on main.
# - `develop` always carries the `-develop` pre-release label. The version is
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@

![Terminal.Gui.Editor (ted demo app)](docs/images/hero.gif)

A reusable text-editing `View` for [Terminal.Gui](https://github.com/gui-cs/Terminal.Gui). Drop it into your TUI app and you get the editing experience users already expect (caret movement, selection, clipboard, undo/redo, search & replace, folding, syntax highlighting, word wrap) without writing any of it yourself.
A reusable text-editing `View` for [Terminal.Gui](https://github.com/tui-cs/Terminal.Gui). Drop it into your TUI app and you get the editing experience users already expect (caret movement, selection, clipboard, undo/redo, search & replace, folding, syntax highlighting, word wrap) without writing any of it yourself.

Ships as a single NuGet package: **[`Terminal.Gui.Editor`](https://www.nuget.org/packages/Terminal.Gui.Editor)**. API documentation is published on the [Terminal.Gui DocFX site](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui.Editor.html).
Ships as a single NuGet package: **[`Terminal.Gui.Editor`](https://www.nuget.org/packages/Terminal.Gui.Editor)**. API documentation is published on the [Terminal.Gui DocFX site](https://tui-cs.github.io/Terminal.Gui/api/Terminal.Gui.Editor.html).

## What this is, and what it isn't

**This is a library.** It exists so that anyone building a Terminal.Gui application (developers, agents, tool authors) can embed a competent multi-line text editor into their UI with a couple of lines of code. The audience is people who need an *edit field that can hold code or prose*, not people shopping for a standalone editor.

Think of `Editor` the way you'd think of a rich-text control in a desktop framework: a building block for the editing surface inside your app. A script box in an IDE-like tool, a config pane in a TUI dashboard, a chat composer, a notes view, the body of a code-review widget, the input area of an LLM agent's terminal front-end. Whatever it is you're building, `Editor` is the part that handles "user types and edits text."

**This is not a standalone editor and not trying to be one.** It is not a competitor to vim, Emacs, Helix, micro, nano, or any other terminal editor; those are products with their own ecosystems, configs, and communities, and the world doesn't need another one. The `ted` app in this repo is a demo of the View, not a product. A real end-user editor built on top of this library, [clet](https://github.com/gui-cs/clet), lives in its own repo.
**This is not a standalone editor and not trying to be one.** It is not a competitor to vim, Emacs, Helix, micro, nano, or any other terminal editor; those are products with their own ecosystems, configs, and communities, and the world doesn't need another one. The `ted` app in this repo is a demo of the View, not a product. A real end-user editor built on top of this library, [clet](https://github.com/tui-cs/clet), lives in its own repo.

## What's in the box

Expand All @@ -28,7 +28,7 @@ dotnet run --project examples/ted - path/to/file.cs
dotnet run -project examples/ted -- -read-only path/to/file.cs
``

For a user-facing editor built on this library, se [clet](https:/github.com/gui-cs/clet).
For a user-facing editor built on this library, se [clet](https:/github.com/tui-cs/clet).

# Status

Expand Down
2 changes: 1 addition & 1 deletion Terminal.Gui.Editor.sln.DotSettings
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<!--
Team-shared ReSharper / Rider settings for gui-cs/Editor.
Team-shared ReSharper / Rider settings for tui-cs/Editor.
Committed alongside .editorconfig. Edit in Rider via "Settings | Editor | Code Style"
and "Settings | Editor | Code Cleanup", then "Save to: This Solution Team-Shared".

Expand Down
2 changes: 1 addition & 1 deletion benchmarks/Terminal.Gui.Editor.Benchmarks/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ static void QuickFindBench ()

static void QuickIncrementalFindBench ()
{
// Demonstrates the gui-cs/Editor#82 fix: FindNext advancing through a document one match at
// Demonstrates the tui-cs/Editor#82 fix: FindNext advancing through a document one match at
// a time should not re-scan the prefix [0, offset) on every call. Compares the new path
// (RegexSearchStrategy.FindAll using Regex.Match(text, startat)) against an inlined
// simulation of the old upstream behavior (Regex.Matches(text) from index 0, post-filtered
Expand Down
4 changes: 2 additions & 2 deletions examples/ted/TedApp.cs
Original file line number Diff line number Diff line change
Expand Up @@ -217,8 +217,8 @@ private void ShowAboutDialog ()

Link link = new ()
{
Text = "https://github.com/gui-cs/Editor",
Url = "https://github.com/gui-cs/Editor",
Text = "https://github.com/tui-cs/Editor",
Url = "https://github.com/tui-cs/Editor",
X = Pos.Center (),
Y = Pos.Bottom (version) + 1
};
Expand Down
4 changes: 2 additions & 2 deletions scripts/HERO-GIF.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Produces `docs/images/hero.gif` — a high-quality animated GIF demonstrating te

## Prerequisites

- [tuirec](https://github.com/gui-cs/tuirec) v0.3.4+ on PATH (`go install github.com/gui-cs/tuirec/cmd/tuirec@latest`)
- [tuirec](https://github.com/tui-cs/tuirec) v0.3.4+ on PATH (`go install github.com/tui-cs/tuirec/cmd/tuirec@latest`)
- .NET 10 SDK (for building ted)
- `agg` is auto-downloaded by tuirec on first use

Expand All @@ -17,7 +17,7 @@ dotnet build examples/ted -c Debug --nologo
## Record

```powershell
$binary = "C:/Users/Tig/s/gui-cs/Editor/examples/ted/bin/Debug/net10.0/ted.exe"
$binary = "C:/Users/Tig/s/tui-cs/Editor/examples/ted/bin/Debug/net10.0/ted.exe"
$file = "./examples/ted/TedApp.cs"

# Keystroke script — demonstrates typing, scrolling, folding, search, selection+indent,
Expand Down
10 changes: 5 additions & 5 deletions specs/archive/00-plan.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
# gui-cs/Text — Implementation Plan
# tui-cs/Text — Implementation Plan

This file is the source of truth for the work remaining on `gui-cs/Text`. It is written to be **handed to a dispatching agent** that farms work-items out to sub-agents in parallel. Each work-item below is self-contained: a brief, the files in scope, acceptance criteria, and explicit dependencies.
This file is the source of truth for the work remaining on `tui-cs/Text`. It is written to be **handed to a dispatching agent** that farms work-items out to sub-agents in parallel. Each work-item below is self-contained: a brief, the files in scope, acceptance criteria, and explicit dependencies.

This is a **revision** of the original plan. Pre-alpha is well underway: the document layer is lifted from AvaloniaEdit, an `Editor : View` exists with caret, selection, undo/redo, mouse, line numbers, and ad-hoc tab expansion. The work has proven that the architecture is right. It has *not* followed the rendering-pipeline architecture in §6 of the original plan — every feature so far has been welded onto a char-by-char draw loop in `Editor.Drawing.cs`. That has to be unwound before more features land. The order below reflects that.

---

## 0. Target: MLP (Minimum Lovable Product) — the alpha release

**The alpha release of `gui-cs/Text` ships when `Editor` reaches MLP.** "Minimum Lovable Product" — *not* "Minimum Viable Product." Viable would be a `View` you can type into. Lovable is the bar:
**The alpha release of `tui-cs/Text` ships when `Editor` reaches MLP.** "Minimum Lovable Product" — *not* "Minimum Viable Product." Viable would be a `View` you can type into. Lovable is the bar:

- **Most of what people expect from a TUI code editor is in place and works.** Typing, selection, multi-caret, find/replace, syntax highlighting, folding, soft wrap, line numbers, indentation, clipboard, mouse, undo with sane granularity, large-file responsiveness. Nothing on that list is a stub.
- **`examples/ted` is a TUI editor someone would actually want to use.** Open a file, edit it, save it, close it. Find. Replace. Toggle wrap. Pick a theme. It feels finished, not like a demo. Day-to-day editing of `.cs` / `.md` / `.json` files in ted is genuinely pleasant.
- **`gui-cs/clet` can ship a `clet edit` subcommand on top of `Editor` and not be embarrassed.** That is the single concrete external-consumer test for MLP. If a contributor asks "is feature X needed for MLP?" — the answer is yes iff `clet edit` would feel broken without it.
- **`tui-cs/clet` can ship a `clet edit` subcommand on top of `Editor` and not be embarrassed.** That is the single concrete external-consumer test for MLP. If a contributor asks "is feature X needed for MLP?" — the answer is yes iff `clet edit` would feel broken without it.

The track-by-track work in §7 and the per-item briefs in §8 are the path to MLP. The Definition of Done in §9 is the gate. Tracks F (TextMate) and any "post-alpha" annotations below ship in **the next release after alpha**, not in the alpha itself.

Expand Down Expand Up @@ -73,7 +73,7 @@ These are the rules new work must meet. A reviewer (or a dispatching agent) shou
- **R6. Lifted upstream files keep upstream formatting + copyright headers.** Add `// Adapted for Terminal.Gui from AvaloniaEdit <sha>`. Log every modification in `third_party/AvaloniaEdit/UPSTREAM.md`. House-style only applies to non-`/third_party/`-derived files.
- **R7. New tests default to the parallel project.** Promote to `Editor.IntegrationTests` only if `Application.Init`-style state is genuinely required.
- **R8. Public API additions on `Editor` come with a brief in `specs/03-public-api.md`** before merge. Stopgaps (like the current Markdown `ISyntaxHighlighter`) are explicitly marked `[Obsolete]` at introduction, not retro-fitted.
- **R10. Subscribe to `-ed` events, not `-ing`, unless you actually cancel.** Terminal.Gui exposes paired events (`Accepting`/`Accepted`, `Selecting`/`Selected`, `Activating`/`Activated`, etc.). The `-ing` event runs in the cancellable dispatch path and is meant for handlers that read or set `e.Cancel` / `e.Handled`. If your handler is fire-and-forget, use the `-ed` variant. Tracked upstream as gui-cs/Terminal.Gui#5286.
- **R10. Subscribe to `-ed` events, not `-ing`, unless you actually cancel.** Terminal.Gui exposes paired events (`Accepting`/`Accepted`, `Selecting`/`Selected`, `Activating`/`Activated`, etc.). The `-ing` event runs in the cancellable dispatch path and is meant for handlers that read or set `e.Cancel` / `e.Handled`. If your handler is fire-and-forget, use the `-ed` variant. Tracked upstream as tui-cs/Terminal.Gui#5286.
- **R9. No unused public/internal APIs in `src/`.** If a public or internal member exists, something in `src/` or `examples/` must call it. Tests don't count as a consumer. Concretely: an agent that adds a method, property, command, or event must wire the corresponding UI / keybinding / call site in the same PR, **or** delete the API. If the API is genuinely a future-MLP affordance, leave it out until the consumer is ready. The first concrete enforcement is the `Editor.FindPrevious` ↔ `FindReplaceDialog` "Find Previous" button pair (PR adding `FindPrevious` shipped without a caller; the gap was filled separately, demonstrating the rule). Roslyn's `IDE0051` (private-only) doesn't catch this; reviewers must.

## 5. Repository layout (as-is)
Expand Down
Loading
Loading