Skip to content

Commit 15af426

Browse files
committed
Update README with enhanced pitch emphasizing markup syntax and key differentiators
1 parent 11760ca commit 15af426

1 file changed

Lines changed: 23 additions & 1 deletion

File tree

README.md

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<img src="https://img.shields.io/badge/license-MIT-green" alt="License">
1414
</p>
1515

16-
A modern console window system for .NET 9 with fluent builders, async patterns, and built-in state services.
16+
**SharpConsoleUI** is a modern .NET 9 TUI framework that combines Spectre.Console's rich markup with true multi-window capabilities. **Cross-platform from the ground up.** Each window can run on its own dedicated thread, updating independently without blocking others. **Build beautiful UIs with familiar [markup] syntax everywhere.** No complex styling APIs, just `[bold red]text[/]` and it works. The double-buffered console driver built on .NET's native Console API eliminates flicker and ensures smooth rendering. **Any Spectre.Console widget (Tables, BarCharts, Trees, Panels) works as a window control.** Wrap any `IRenderable` and it just works. Direct CharacterBuffer access with PreBufferPaint/PostBufferPaint hooks lets you build custom rendering, visual effects, or even games (the Snake example renders its canvas this way). Fluent builders for windows, controls, and layouts.
1717

1818
## 📚 Documentation
1919

@@ -633,6 +633,28 @@ dotnet run --project Examples/CompositorEffectsExample
633633

634634
See the [Compositor Effects Guide](https://nickprotop.github.io/ConsoleEx/docfx/_site/COMPOSITOR_EFFECTS.html) for complete documentation and examples.
635635

636+
## Troubleshooting
637+
638+
### Known Issues
639+
640+
#### Linux: Input Echo Leak During Concurrent Screen Updates
641+
642+
**Affected platforms**: Linux, macOS (not Windows)
643+
644+
**Symptoms**: Occasional garbage characters or ANSI escape sequences appearing on screen when moving the mouse while background windows are updating.
645+
646+
**Root cause**: This is a limitation in .NET's `Console.ReadKey` implementation on Unix platforms. The .NET runtime toggles terminal echo settings (`tcsetattr`) on and off with every keystroke rather than keeping echo disabled for the session. When `ReadKey` receives input, it briefly re-enables echo before the application can call `ReadKey` again. During this brief window (~10ms), any concurrent output from other threads can leak to the terminal as raw characters.
647+
648+
This race condition is more visible in SharpConsoleUI than single-threaded TUI frameworks because our independent window threads can write to the screen at any moment during input processing.
649+
650+
**Related .NET issues**:
651+
- [dotnet/runtime#29662](https://github.com/dotnet/runtime/issues/29662) - No way to turn off tty echo via corefx API
652+
- [dotnet/runtime#24456](https://github.com/dotnet/runtime/issues/24456) - Console.ReadLine echoes first few hundred milliseconds of input
653+
654+
**Workaround**: SharpConsoleUI performs a periodic full screen redraw to clear any leaked characters. This has minimal performance impact due to the double-buffered rendering architecture.
655+
656+
**Why ncurses doesn't have this issue**: ncurses disables echo once at initialization and restores it only at shutdown, eliminating the race window entirely.
657+
636658
## Contributing
637659

638660
We welcome contributions! Here's how to get started:

0 commit comments

Comments
 (0)