Page:
Roadmap
Clone
16
Roadmap
Yves Biener edited this page 2025-10-26 21:43:44 +01:00
Table of Contents
Roadmap
The following list contains goals for certain features the library supports or is planned on supporting.
-
Input handling
- basic input handling
- support modifiers with other control characters (i.e.
SHIFT + TAB) - support input's (i.e.
Esc x,Esc 0 xor SS3,Esc [ ..or Csi, Osc, Dcs) see [src/vt.rs:156] and [src/input.rs:324] for the actual parsing implementation- SS3
- [-] CSI (not everything yet - i.e. clipboard support)
- OSC
- DCS
- Clipboard support (reading and writing) (later)
-
Concept for focused
Container's /Elements's- Allow usage of keyboard keys to change focus
- Limit where Focus is actually necessary (and skip those accordingly)
- Enhance the rendering to make it obvious where the focus is currently at
-
Enhance performance through multi-threading?
- synchronization might be a bottleneck, but maybe interesting for bigger applications? would require some tests
-
Elm architecture support (through user defined
structacting as the Model) -
Container rendering
- Layout
- direction
- vertical
- horizontal
- padding
- gap
- direction
- Border
- sides
- corners
- separators
- title? (later)
- Rectangle
- Sizing options (should be only one option at any given time possible)
- fixed sizes (absolute)
- growable sizes
- percentage sizes (compared to its parent Container, or for the root, compared to the absolute screen size) (relative)
- Inline rendering (later)
- Layout
-
User control
- event loop handling
- mouse support
- user content
- Default
Elementimplementations- Scrollable
- user input handling
- vertical
- horizontal
- mouse input
- scroll bar(s) rendering
- vertical
- horizontal
- user input handling
- Content alignment (i.e. standard calculations done with the provided
Size)- horizontal center (i.e. calculate the corresponding anchor)
- vertical center (i.e. calculate the corresponding anchor)
- User input
- image support through kitty protocol (later)
- embeeding another application (i.e. an editor, or something like that)? (later)
- Scrollable
- event loop handling
-
Examples
- Layouts
- vertical
- horizontal
- grid
- mixed (some sort of form)
- Elements
ContainerAlignment- Button
- custom (see example)
- built-in
- Progressbar
- Form
- basic
- Figure out input handling (apart from mouse
Event's such that they do not intersect and are easy to see - i.e. which form element is currently active?) - Text Input field
- custom (see example)
- built-in single line
- built-in multi line (later)
- overflow handling, i.e. where to draw the ellipse
..- left and right
- Selection (
enum's) - Radio Button (
bool's) - Slider (range values)
- Figure out input handling (apart from mouse
- support all other built-in
Elements that display values accordingly
- basic
- Stackable / Floating
Containers /Elements- Popup
- Dialog
- based upon
Popup's implementation to switch the dialog pages that are linked in an ordered list? - use
Button's to make go to the next / previous dialog pages - use internal events that are not necessary to be listed in the
App.Event?
- based upon
- Scrollable Content (i.e. show long text of an except of something and other smaller
Container)- min size
- mouse scrolling aware of mouse position (i.e. through multiple different scrollable
Container) - scrollable contents through other inputs except mouse?
- Sub application execution with outputs being rendered in a
Container(later)- non-interactive applications (which do not request a tty/pty) and only communicate through stdin, stdout and stderr (i.e. non-interactive applications)
- interactive applications (which can request a tty/pty); corresponding inputs need to passed through and emulated such that the outputs can be rendered in a
Container
- Table based on input data
- scrollable if necessary with sticky header
- vertical
- horizontal
- both
- non-interactive (no navigation, selection, etc.)
- interactive (with navigation, per row / cell, with selection, event triggering, etc.)
- scrollable if necessary with sticky header
- Styles
- Text styles
- Colors
- foreground
- background
- underline
- Emphasis
- none
- bold
- dim
- italic
- underline
- blink
- invert
- hidden
- strikethrough
- combinations
- Colors
- Color palette
- Text styles
- Error Handling
- log and show error's without crashing the application
- Demo
- use another tui application to launch and come back to (showcase the interrupt behavior)
- Launch sub-applications (not inside of a
Containerbut during the application workflow, like an editor)
- Layouts
-
Testability
- snapshot ability to safe current screen (from
Renderer) to test against- See Testing for details on how to create the
.zonfiles containing the expected screen data
- See Testing for details on how to create the
- try to integrate them into the library itself such that they also serve as examples on how to test
Layout,BorderandRectanglecontain the test cases for rendering ofContainersScrollabletest cases containing inclusion of test creation containing user interaction (i.e. mouse scrolling)
- snapshot ability to safe current screen (from
-
Debugging
-
render corresponding contents with debug information (the following points are just brain dump of potential information the developer want to see):
Top left corner indicates type of contents (if any) while general information is located in the three remaining corners:
- anchor of
Containers (top-left corner -> meaning that is the actualCellused for displaying the debug information) - size of
Container - element of
Container - separator of
Container - padding of
Container(i.e. by coloring the background? later) - gap of
Container(i.e. by coloring the background? later)
- anchor of
-
-
Elementextensions:Elementimplementations can link to a given event, tagged union variation to trigger events or listen to!- provide a reference to the parent
Containerof a givenElement-> allow changing the parent's properties through anElementimplementation (i.e. change the color of the border, add a new child element, etc.) if necessary! otherwise I would rather have this be very independent of its parent (and where it is used or rendered!)
-
Capabilities
- support setting terminal title
- SIMD support - evaluation necessary (later)