Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 2 additions & 2 deletions .claude/cookbook/common-patterns.md
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ public sealed class MenuApp : Runnable
]));

// Main content area below the menu bar. (For a real multi-line editor,
// use gui-cs/Editor's EditorView — the core TextView is deprecated.)
// use tui-cs/Editor's EditorView — the core TextView is deprecated.)
View content = new ()
{
X = 0,
Expand Down Expand Up @@ -574,7 +574,7 @@ public sealed class StatusBarApp : Runnable
{
Title = "Status Bar Demo";

// Main content area. (For a real multi-line editor, use gui-cs/Editor's
// Main content area. (For a real multi-line editor, use tui-cs/Editor's
// EditorView — the core TextView is deprecated.)
View content = new ()
{
Expand Down
4 changes: 2 additions & 2 deletions .claude/tasks/build-app.md
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ See `.claude/cookbook/common-patterns.md` for recipes including:
|---------|----------|-------------|
| All Controls | `Examples/UICatalog/` | Comprehensive demo app |
| Scenario automation | `Examples/ScenarioRunner/` | Run UICatalog scenarios from the CLI |
| Additional samples | `gui-cs/Examples` | Standalone example applications |
| Additional samples | `tui-cs/Examples` | Standalone example applications |

## Event Handling Patterns

Expand Down Expand Up @@ -256,7 +256,7 @@ Available themes: `Default`, `Dark`, `Light`, `Amber Phosphor`, `Green Phosphor`

## Verify Your App Actually Works (Give Yourself Eyes)

You cannot see a TUI from a build log. Before declaring an app done, **run it and observe it** with [`tuirec`](https://github.com/gui-cs/tuirec) — it spawns the app in a PTY, injects keystrokes, and records the terminal output:
You cannot see a TUI from a build log. Before declaring an app done, **run it and observe it** with [`tuirec`](https://github.com/tui-cs/tuirec) — it spawns the app in a PTY, injects keystrokes, and records the terminal output:

```powershell
dotnet build -c Release
Expand Down
2 changes: 1 addition & 1 deletion .cursorrules
Original file line number Diff line number Diff line change
Expand Up @@ -122,4 +122,4 @@ Input flows: Driver → `IInputProcessor` → `KeyBindings`/`MouseBindings` →
| Common UI patterns | `.claude/cookbook/common-patterns.md` |
| App building guide | `.claude/tasks/build-app.md` |
| Deep-dive docs | `docfx/docs/` |
| Working examples | `Examples/UICatalog/`, `Examples/ScenarioRunner/`, `gui-cs/Examples` |
| Working examples | `Examples/UICatalog/`, `Examples/ScenarioRunner/`, `tui-cs/Examples` |
5 changes: 4 additions & 1 deletion .github/workflows/api-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,10 @@ jobs:
- name: Install views docs tools
if: steps.view-docs.outputs.should_generate == 'true'
run: |
go install github.com/gui-cs/tuirec/cmd/tuirec@latest
# Pin to @main: tuirec's released tags (≤ v0.9.0) still declare the old
# module path github.com/gui-cs/tuirec, so go install ...@latest would
# fail the import-path check. main already declares github.com/tui-cs/tuirec.
go install github.com/tui-cs/tuirec/cmd/tuirec@main

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Use the published tuirec module path

When view docs are regenerated, this step will still fail the Go module-path check: the current tui-cs/tuirec repository's go.mod declares module github.com/gui-cs/tuirec, so installing github.com/tui-cs/tuirec/cmd/tuirec@main is requested under a different module path. The workflow runs this branch for manual regeneration and for Terminal.Gui/Views changes, so docs publishing will break until the command uses the declared module path or tuirec publishes a matching module path.

Useful? React with 👍 / 👎.

Add-Content $env:GITHUB_PATH "$(go env GOPATH)\bin"
Install-Module powershell-yaml -Scope CurrentUser -Force

Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/notify-clet.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
name: Notify clet

# Fires repository_dispatch to gui-cs/clet so that every TG develop NuGet
# Fires repository_dispatch to tui-cs/clet so that every TG develop NuGet
# publish and every TG release tag drives a matching clet build/publish.
# See gui-cs/clet#30 and gui-cs/clet D-020 for context.
# See tui-cs/clet#30 and tui-cs/clet D-020 for context.
#
# Design notes:
# - The version comes from the `published-version` artifact uploaded by
Expand All @@ -11,7 +11,7 @@ name: Notify clet
# `dotnet restore` actually hits) until the package is downloadable.
# The flat-container is updated soon after publish; the search API
# (queried by `dotnet package search`) lags by minutes, which broke
# this workflow once before — see gui-cs/clet workflow run 25406348354.
# this workflow once before — see tui-cs/clet workflow run 25406348354.
# - Channel is derived from the triggering workflow's branch:
# develop ⇒ tg-develop-published, anything else (main, release
# branches like v2.1.0-rc.4, tags) ⇒ tg-main-published.
Expand Down Expand Up @@ -70,11 +70,11 @@ 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
uses: peter-evans/repository-dispatch@v3
with:
token: ${{ secrets.CLET_DISPATCH_PAT }}
repository: gui-cs/clet
repository: tui-cs/clet
event-type: ${{ steps.version.outputs.event_type }}
client-payload: |
{"tg_version": "${{ steps.version.outputs.tg_version }}"}
12 changes: 6 additions & 6 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ jobs:
run: dotnet nuget push Terminal.Gui.Interop.Spectre/bin/Release/Terminal.Gui.Interop.Spectre.${{ steps.gitversion.outputs.SemVer }}.nupkg --skip-duplicate --api-key ${{ secrets.NUGET_API_KEY }}

# Deterministic version handoff to notify-clet.yml. Avoids the NuGet
# search-API indexing lag that caused gui-cs/clet to skip TG develop.37
# search-API indexing lag that caused tui-cs/clet to skip TG develop.37
# (see clet workflow run 25406348354). notify-clet.yml downloads this
# artifact via workflow_run + actions/download-artifact and then polls
# NuGet flat-container until the version is restorable.
Expand Down Expand Up @@ -121,22 +121,22 @@ jobs:
uses: peter-evans/repository-dispatch@v4
with:
token: ${{ secrets.TEMPLATE_REPO_TOKEN }}
repository: gui-cs/Terminal.Gui.templates
repository: tui-cs/Terminal.Gui.templates
event-type: terminal-gui-v2-released
client-payload: ${{ steps.payload.outputs.json }}

# Notify gui-cs/Editor so its bump-terminal-gui.yml workflow can pin the
# Notify tui-cs/Editor so its bump-terminal-gui.yml workflow can pin the
# just-published version, validate, and republish Editor against it
# (Editor is the continuous canary for TG API churn — see Editor's
# specs/decisions.md DEC-010). Editor also polls NuGet on a schedule, so a
# missing token degrades gracefully.
# Requires EDITOR_DISPATCH_TOKEN: a PAT with `repo` scope on gui-cs/Editor.
- name: Notify gui-cs/Editor of publish
# Requires EDITOR_DISPATCH_TOKEN: a PAT with `repo` scope on tui-cs/Editor.
- name: Notify tui-cs/Editor of publish
if: env.EDITOR_DISPATCH_TOKEN != ''
continue-on-error: true
uses: peter-evans/repository-dispatch@v4
with:
token: ${{ secrets.EDITOR_DISPATCH_TOKEN }}
repository: gui-cs/Editor
repository: tui-cs/Editor
event-type: terminal-gui-published
client-payload: '{"version":"${{ steps.gitversion.outputs.SemVer }}"}'
2 changes: 1 addition & 1 deletion .windsurfrules
Original file line number Diff line number Diff line change
Expand Up @@ -122,4 +122,4 @@ Input flows: Driver → `IInputProcessor` → `KeyBindings`/`MouseBindings` →
| Common UI patterns | `.claude/cookbook/common-patterns.md` |
| App building guide | `.claude/tasks/build-app.md` |
| Deep-dive docs | `docfx/docs/` |
| Working examples | `Examples/UICatalog/`, `Examples/ScenarioRunner/`, `gui-cs/Examples` |
| Working examples | `Examples/UICatalog/`, `Examples/ScenarioRunner/`, `tui-cs/Examples` |
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ dotnet run
### Key Resources
- **App Building Guide**: [.claude/tasks/build-app.md](.claude/tasks/build-app.md)
- **Common Patterns**: [.claude/cookbook/common-patterns.md](.claude/cookbook/common-patterns.md)
- **Examples**: `Examples/UICatalog/`, `Examples/ScenarioRunner/`, and [gui-cs/Examples](https://github.com/gui-cs/Examples)
- **Examples**: `Examples/UICatalog/`, `Examples/ScenarioRunner/`, and [tui-cs/Examples](https://github.com/tui-cs/Examples)

### API Reference (Compressed)
| Namespace | Contents |
Expand Down Expand Up @@ -146,7 +146,7 @@ Process guides in `.claude/workflows/`:

## Visual Verification (Agent Eyes)

Don't ship UI changes blind. Use [`tuirec`](https://github.com/gui-cs/tuirec) to run any Terminal.Gui app in a PTY, inject keystrokes, and capture the result — see [Scripts/tuirec/README.md](Scripts/tuirec/README.md). The `.cast` output is asciinema v2 JSON (plain text): read it back to verify what actually rendered. The `.gif` is for humans — attach it to PRs that change visuals. For deterministic in-process assertions, use `InputInjector`/`VirtualTimeProvider` (`docfx/docs/input-injection.md`).
Don't ship UI changes blind. Use [`tuirec`](https://github.com/tui-cs/tuirec) to run any Terminal.Gui app in a PTY, inject keystrokes, and capture the result — see [Scripts/tuirec/README.md](Scripts/tuirec/README.md). The `.cast` output is asciinema v2 JSON (plain text): read it back to verify what actually rendered. The `.gif` is for humans — attach it to PRs that change visuals. For deterministic in-process assertions, use `InputInjector`/`VirtualTimeProvider` (`docfx/docs/input-injection.md`).

## Planning Mode

Expand Down
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ See `Tests/README.md` for the full list of test projects (including `Integration

## Seeing Your Changes (Visual Verification)

Agents can observe a running Terminal.Gui app — don't ship UI changes blind. Use [`tuirec`](https://github.com/gui-cs/tuirec) to run the app in a PTY, inject keystrokes, and capture the result:
Agents can observe a running Terminal.Gui app — don't ship UI changes blind. Use [`tuirec`](https://github.com/tui-cs/tuirec) to run the app in a PTY, inject keystrokes, and capture the result:

- **Full guide:** [Scripts/tuirec/README.md](Scripts/tuirec/README.md) — install, keystroke syntax, UICatalog scenario recipes, validation checklist
- The `.cast` output is asciinema v2 JSON (plain text) — **read it back** to verify what actually rendered, frame by frame
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,7 @@ foreach (Rune rune in text.EnumerateRunes ())
**`/Examples/`**:
- `UICatalog/` - Comprehensive demo app for manual testing
- `ScenarioRunner/` - Scenario automation tool
- Additional examples live in [gui-cs/Examples](https://github.com/gui-cs/Examples)
- Additional examples live in [tui-cs/Examples](https://github.com/tui-cs/Examples)

**`/docfx/`** - Documentation source:
- `docs/` - Conceptual documentation (deep dives)
Expand Down
2 changes: 1 addition & 1 deletion Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
<PackageVersion Include="Microsoft.Extensions.Logging" Version="10.0.7" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.7" />
<PackageVersion Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.23.0" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.6.0" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.7.0" />
<PackageVersion Include="Spectre.Console" Version="0.57.0" />
<PackageVersion Include="TestableIO.System.IO.Abstractions.TestingHelpers" Version="22.1.1" />
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.5" />
Expand Down
4 changes: 2 additions & 2 deletions Examples/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ This repository now keeps only:
- `UICatalog` - the main demo app
- `ScenarioRunner` - scenario automation tool

All other examples were moved to the [gui-cs/Examples](https://github.com/gui-cs/Examples) repository.
All other examples were moved to the [tui-cs/Examples](https://github.com/tui-cs/Examples) repository.

## Building Examples Against Local Source

The [gui-cs/Examples](https://github.com/gui-cs/Examples) repo supports building against your local Terminal.Gui source (instead of the NuGet package) to catch breaking changes immediately:
The [tui-cs/Examples](https://github.com/tui-cs/Examples) repo supports building against your local Terminal.Gui source (instead of the NuGet package) to catch breaking changes immediately:

```bash
cd ../Examples
Expand Down
2 changes: 1 addition & 1 deletion Examples/UICatalog/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Terminal.Gui UI Catalog

UI Catalog is a comprehensive sample library for [Terminal.Gui](https://github.com/gui-cs/Terminal.Gui). It provides:
UI Catalog is a comprehensive sample library for [Terminal.Gui](https://github.com/tui-cs/Terminal.Gui). It provides:

1. An easy-to-use, interactive, showcase for Terminal.Gui concepts and features.
2. Sample code that illustrates how to properly implement said concepts & features.
Expand Down
2 changes: 1 addition & 1 deletion Examples/UICatalog/Resources/config.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"$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",
"Themes": [
{
"Hot Dog Stand": {
Expand Down
2 changes: 1 addition & 1 deletion Examples/UICatalog/Scenarios/ComputedLayout.cs
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,7 @@ public override void Main ()
#region Issue2358

// Demonstrate odd-ball Combine scenarios
// Until https://github.com/gui-cs/Terminal.Gui/issues/2358 is fixed these won't work right
// Until https://github.com/tui-cs/Terminal.Gui/issues/2358 is fixed these won't work right

oddballButton = new Button { Text = "Center + 0", X = Pos.Center () + 0, Y = Pos.Bottom (oddballButton) };
window.Add (oddballButton);
Expand Down
4 changes: 2 additions & 2 deletions Examples/UICatalog/Scenarios/Deepdives.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ public class Deepdives : Scenario
{
private static readonly HttpClient _httpClient = new ();

private const string DOCS_API_URL = "https://api.github.com/repos/gui-cs/Terminal.Gui/contents/docfx/docs?ref=develop";
private const string INCLUDES_API_URL = "https://api.github.com/repos/gui-cs/Terminal.Gui/contents/docfx/includes?ref=develop";
private const string DOCS_API_URL = "https://api.github.com/repos/tui-cs/Terminal.Gui/contents/docfx/docs?ref=develop";
private const string INCLUDES_API_URL = "https://api.github.com/repos/tui-cs/Terminal.Gui/contents/docfx/includes?ref=develop";

private IApplication? _app;
private ListView? _docList;
Expand Down
4 changes: 2 additions & 2 deletions Examples/UICatalog/Scenarios/Links.cs
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ public override void Main ()

titleTextField.Text = "Title";
textTextField.Text = "GitHub repo";
urlTextField.Text = "https://github.com/gui-cs/Terminal.Gui";
urlTextField.Text = "https://github.com/tui-cs/Terminal.Gui";

Button copyButton = new () { Title = "_Copy", X = Pos.Right (linkWithBorder) + 1, Y = Pos.Top (linkWithBorder) + 1 };
copyButton.Accepting += (_, _) => linkWithBorder.Copy ();
Expand All @@ -73,7 +73,7 @@ public override void Main ()

Link link = new ()
{
X = Pos.Right (label) + 1, Y = Pos.Top (label), Text = "Terminal.Gui.Views.Link", Url = "https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui.Views.Link.html"
X = Pos.Right (label) + 1, Y = Pos.Top (label), Text = "Terminal.Gui.Views.Link", Url = "https://tui-cs.github.io/Terminal.Gui/api/Terminal.Gui.Views.Link.html"
};
appWindow.Add (label, link);
app.ToolTips!.SetToolTip (link, () => link.Url);
Expand Down
2 changes: 1 addition & 1 deletion Examples/UICatalog/Scenarios/MenuBarsWithoutPopovers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ public override void EndInit ()
new MenuItem
{
Title = "_Online Help...",
Action = () => MessageBox.Query (App!, "Online Help", "https://gui-cs.github.io/Terminal.Gui", Strings.btnOk)
Action = () => MessageBox.Query (App!, "Online Help", "https://tui-cs.github.io/Terminal.Gui", Strings.btnOk)
},
new MenuItem
{
Expand Down
2 changes: 1 addition & 1 deletion Examples/UICatalog/Scenarios/PosAlignDemo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,7 @@ private void UpdatePosAlignObjects (View superView, Dimension dimension, Aligner
}

// BUGBUG: Create and assign a new Pos object because we currently have no way for X to be notified
// BUGBUG: of changes in the Pos object. See https://github.com/gui-cs/Terminal.Gui/issues/3485
// BUGBUG: of changes in the Pos object. See https://github.com/tui-cs/Terminal.Gui/issues/3485
if (dimension == Dimension.Width)
{
var posAlign = view.X as PosAlign;
Expand Down
6 changes: 3 additions & 3 deletions Examples/UICatalog/UICatalogRunnable.cs
Original file line number Diff line number Diff line change
Expand Up @@ -165,11 +165,11 @@ private MenuBar CreateMenuBar ()
[
new MenuItem ("_Documentation",
"API docs",
() => Link.OpenUrl ("https://gui-cs.github.io/Terminal.Gui"),
() => Link.OpenUrl ("https://tui-cs.github.io/Terminal.Gui"),
Key.F1),
new MenuItem ("_README",
"Project readme",
() => Link.OpenUrl ("https://github.com/gui-cs/Terminal.Gui"),
() => Link.OpenUrl ("https://github.com/tui-cs/Terminal.Gui"),
Key.F2),
new MenuItem ("_About...", "About UI Catalog", ShowAboutDialog, Key.A.WithCtrl)
])
Expand Down Expand Up @@ -897,7 +897,7 @@ private void ConfigApplied ()
/// <summary>
/// The URL displayed in the About Box.
/// </summary>
public const string ABOUT_URL = "https://github.com/gui-cs/Terminal.Gui";
public const string ABOUT_URL = "https://github.com/tui-cs/Terminal.Gui";

private void ShowAboutDialog ()
{
Expand Down
Loading
Loading