* Partial fix - probably breaks stuff Refactored `FileDialog.cs` by replacing `treeViewContainer` with `_treeView`, adjusting UI component positions, and adding style properties to `_tableView`. Improved user interaction with new event handlers and key bindings. Rearranged `base.Add` calls to reflect the updated UI hierarchy. * Tweaked Dialog and FileDialog attribute handling Removed setting of _tableView.Style.InvertSelectedCellFirstCharacter = true; Commented out custom attribute handling in Dialog.cs for VisualRole.Normal and VisualRole.Focus, reverting to base method. Removed InvertSelectedCellFirstCharacter setting in FileDialog.cs. * Add tree view toggle to FileDialog Introduced a new `_btnTreeToggle` button in `FileDialog.cs` to manage the visibility of a tree view within the file dialog interface. Added a new localized string `fdTree` in `Strings.Designer.cs` and `Strings.resx` for UI elements related to the tree view. Adjusted the layout and visibility of the tree and table views to accommodate the toggle functionality. Implemented methods `ToggleTreeVisibility`, `SetTreeVisible`, and `GetTreeToggleText` to handle tree view visibility logic. Cleaned up code and comments for clarity. * Update localization and test logic for FileDialog Updated `fdSearchCaption` localization from "Enter search string" to "Find" in `Strings.Designer.cs` and `Strings.resx`. Modified `FileDialogFluentTests.cs` to reflect UI changes by updating button text and removing skip conditions. Adjusted `FileDialogTests.cs` to change `TextField` caption and commented out certain test logic related to path confirmation. * Moved Search view to be inside the table view container for better usability. Refactor FileDialog to use nullable reference types Updated the `FileDialog` class to adopt nullable reference types for improved null safety, marking fields, properties, and methods as nullable where appropriate. Simplified UI component initialization, including repositioning `_tbFind` and `_spinnerView` into `_tableViewContainer` and assigning `Id` properties to `_tableViewContainer` and `_tableView`. Refactored methods like `TryAcceptMulti` and `GetFocusedFiles` to handle nullability. Simplified `Task.Run` calls and removed unused code, such as the `GetTextField` method and `FileDialogPart` enum, in `FileDialogTests.cs`. Updated tests to directly access subviews using `Id` properties. Minor layout and property adjustments were made to improve maintainability. * Refactor Dialog class and improve null safety - Enabled nullable reference types in `Dialog.cs` for better null safety. - Removed and reintroduced static configuration properties with `[ConfigurationProperty]` attributes for configurability. - Refactored `Dialog` constructor to use `base.ShadowStyle` and improved button management with alignment logic. - Updated `Canceled` property with a private backing field and debug assertions. - Added null-forgiving operators (`!`) across the codebase for nullable reference type compatibility. - Introduced new test cases to verify `Dialog` behavior, including modal mouse capture and `Canceled` property access. - Refactored and modernized existing test cases for consistency and readability. - Removed redundant test cases and performed general code cleanup. - Improved code comments and debug assertions for clarity and robustness. * Refactor DialogTests to replace null with empty array Updated the `BeginButtonTestDialog` method call in `DialogTests.cs` to replace the `null!` argument with an empty array `[]`. This improves type safety and ensures explicit handling of the argument.
Terminal.Gui v2
The premier toolkit for building rich console apps for Windows, the Mac, and Linux/Unix.
⚠️ Note:
v1is in maintenance mode and we will only accept PRs for issues impacting existing functionality.
⚠️ Note:
Developers starting new TUI projects are encouraged to targetv2 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.
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
- Getting Started - Quick start guide to create your first Terminal.Gui application
- Migrating from v1 to v2 - Complete guide for upgrading existing applications
- What's New in v2 - Overview of new features and improvements
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.
Debates on architecture and design can be found in Issues tagged with design.
History
See gui-cs for how this project came to be.

