BDisp cd75a20c60 Fixes #4387. Runes should not be used on a cell, but rather should use a single grapheme rendering 1 or 2 columns (#4388)
* Fixes #4382. StringExtensions.GetColumns method should only return the total text width and not the sum of all runes width

* Trying to fix unit test error

* Update StringExtensions.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Resolving merge conflicts

* Prevents Runes throwing if Grapheme is null

* Add unit test to prove that null and empty string doesn't not throws anything.

* Fix unit test failure

* Fix IsValidLocation for wide graphemes

* Add more combining

* Prevent set invalid graphemes

* Fix unit tests

* Grapheme doesn't support invalid code points like lone surrogates

* Fixes more unit tests

* Fix unit test

* Seems all test are fixed now

* Adjust CharMap scenario with graphemes

* Upgrade Wcwidth to version 4.0.0

* Reformat

* Trying fix CheckDefaultState assertion

* Revert "Trying fix CheckDefaultState assertion"

This reverts commit c9b46b796a.

* Forgot to include driver.End in the test

* Reapply "Trying fix CheckDefaultState assertion"

This reverts commit 1060ac9b63.

* Remove ToString

* Fix merge errors

* Change to conditional expression

* Assertion to prove that no exception throws during cell initialization.

* Remove unnecessary assignment

* Remove assignment to end

* Replace string concatenation with 'StringBuilder'.

* Replace more string concatenation with 'StringBuilder'

* Remove redundant call to 'ToString' because Rune cast to a String object.

* Replace foreach loop with Sum linq

---------

Co-authored-by: Tig <tig@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-11-20 13:45:13 -05:00
2024-06-25 05:53:19 -07:00
2025-06-12 12:16:54 -06:00
2025-05-31 19:25:30 -06:00
2025-05-31 19:25:30 -06:00

Version codecov Downloads License Bugs

Terminal.Gui v2

The premier toolkit for building rich console apps for Windows, the Mac, and Linux/Unix.

logo

  • The current, stable, release of Terminal.Gui v1 is Version.

⚠️ Note:
v1 is in maintenance mode and we will only accept PRs for issues impacting existing functionality.

  • The current Alpha release of Terminal.Gui v2 is NuGet Version

⚠️ Note:
Developers starting new TUI projects are encouraged to target v2 Alpha. The API is significantly changed, and significantly improved. There will be breaking changes in the API before Beta, but the core API is stable.

Sample app

Quick Start

Paste these commands into your favorite terminal on Windows, Mac, or Linux. This will install the Terminal.Gui.Templates, create a new "Hello World" TUI app, and run it.

(Press CTRL-Q to exit the app)

dotnet new --install Terminal.Gui.templates
dotnet new tui -n myproj
cd myproj
dotnet run

To run the UICatalog demo app that shows all the controls and features of the toolkit, use the following command:

dotnet run --project Examples/UICatalog/UICatalog.csproj

There is also a visual designer (uses Terminal.Gui itself).

Documentation

The full developer documentation for Terminal.Gui is available at gui-cs.github.io/Terminal.Gui.

Getting Started

API Reference

For detailed API documentation, see the API Reference.

Installing

Use NuGet to install the Terminal.Gui NuGet package:

v2 Alpha

(Infrequently updated, but stable enough for production use)

dotnet add package Terminal.Gui --version "2.0.0-alpha.*"

v2 Develop

(Frequently updated, but may have breaking changes)

dotnet add package Terminal.Gui --version "2.0.0-develop.*"

Legacy v1

dotnet add package Terminal.Gui --version "1.*

Or, you can use the Terminal.Gui.Templates.

Contributing

See CONTRIBUTING.md for complete contribution guidelines.

Debates on architecture and design can be found in Issues tagged with design.

History

See gui-cs for how this project came to be.

Languages
C# 99.4%
PowerShell 0.6%