- Clear and redraw screen on update
- onKeyPress event
- Only clear printed lines by default
- More robust inputs (arrow keys, etc)
- Exit on Ctrl-C
- Docs!
- Fonts, Bold, etc.
- Exit on ctrl-c
- Handle TODO comments in codebase
- == release 1.0 ==
- Fix bugs in the 1.0 release: https://github.com/blaix/gren-tui/issues?q=is%3Aissue+is%3Aopen+label%3Abug
- Use new task-based Stream, etc. to add guarantees (start with Cmd.batch usage where order is important)
- Decouple view from update (just render like a game loop) to reduce complicated sequencing logic and fix rendering bugs
- Pull ansi into separate package
- Move examples under next/ (not bothering with busted v1)
- Publish gren-array2d
- Add arrow-key-movement example (game)
- Remove Ansi from README example (it's a separate package now)
- Replace vendored node/core packages after 6/24 release
- == Release 2.0 ==
- Add
Escape
variant toInput
- Add Tui.exit that returns a task that undoes formatting and shows the cursor
- Add UI module with elm-ui inspired row/col elements
- Fix unit tests
- Fix?: Compile failures return 0 status, making things hard to test
- unit tests with gren-test
- TODO comments
- defineProgram withOptions or similar for things like exitOnEscape, etc.?
- ^ related? some kind of Tick option for updating components (select, etc)?
- ^ see
Pages.Script.Spinner
withStep
andrunSteps
functions and similar from elm-pages - easy way for people to try to test/break UI and open issues (releast alpha?)
- Update CHANGELOG
- Overhaul the README for v3
- UI module
- "other packages" section not needed?
- more?
- == Release 3.0 ==
- Start a branching strategy for major version upgrades that keeps main code and docs compatible with latest published version
- Update README and examples to use UI module
- Starter repo or project initializer (add
gren run
instead of publishing separate npm package?) - Demos with asciinema or freeze
- animation example: rotating ascii art in center of screen
- Publish post or video making a dungeon crawler. Look at the UI of Robin's elm-warrior :)
- Look into performance on paint example. Think it's input handling. See [[#performance-notes]]
- Take another pass at reviewing lipgloss and bubbles
- Replace CharGrid with Table? https://github.com/charmbracelet/lipgloss?tab=readme-ov-file#rendering-tables
- List or similar tracking selected item
- Consider wiring effects/messages into elements (recreate classic counter example in terminal)
- More Attributes:
- padding
- margin
- centered, centerX, centerY
- alignRight, alignLeft, alignTop, alignBottom
- More borders (see lipgloss and https://en.wikipedia.org/wiki/Box-drawing_characters#Box_Drawing)
- doubled
- dotted
- dashed
- ascii (
+--+
) - custom borders
- grid/table with cell borders
- borderLeft, Top, etc? (for dungeon walls?)
- More colors. 256 support?
- Built-in UI components (will require update calls, see Bubbles source code for reference):
- Tabs (see lipgloss)
- Prompt
- Choice
- LoadingSpinner
- Animation
- Consider width, minWidth, maxWidth (what about wrapping, overflow?)
- Try gren-tui for prettynice cli again (with load spinner widgets...?)
- Test an app that has a conditional subscription
- How to make log messages visible (Debug.log won't work with gren-tui views)? add file logging?
- How to have a nice way to read a whole line of input, even in raw mode?
- readline support?
- Can/should I clean up the background color "move over the closing character" logic?
- Maybe use some sentinel characters to stand in for bg color until final rendering? https://www.unicode.org/faq/private_use.html
- Is this anything? https://nodejs.org/en/learn/asynchronous-work/the-nodejs-event-emitter
- Ongoing: See https://github.com/blaix/gren-tui/issues
Profile with: node --inspect
then open chrome://inspect
Compare benchmarks by creating two small programs (or one program with command line flags) to exercise different implementations and compare with:
hyperfine 'node app snippetA' 'node app snippetB'
Things to try:
- buffer inputs, on each tick, compress sequentially-repeating inputs, then process
- don't check cursorReport every input?
- look for other places I'm doing heavy string/array interactions
- https://www.textualize.io/blog/7-things-ive-learned-building-a-modern-tui-framework/
- https://github.com/janjelinek/elm-performance-debugging/tree/master