Skip to content

Latest commit

 

History

History
99 lines (92 loc) · 4.89 KB

TODO.md

File metadata and controls

99 lines (92 loc) · 4.89 KB

TODO

  • 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 to Input
  • 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 and runSteps 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
  • 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?
  • Is this anything? https://nodejs.org/en/learn/asynchronous-work/the-nodejs-event-emitter
  • Ongoing: See https://github.com/blaix/gren-tui/issues

Performance notes

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: