Commit bf0e20e
committed
feat: Implement comprehensive JLine Curses TUI library with focus indicators and repaint system
This commit implements a complete Terminal User Interface (TUI) library for JLine with:
- **Essential Components**: List, Table, Tree, Input, Label, Button, TextArea
- **Layout Containers**: Box, Window, Panel for organizing components
- **Interactive Demo**: Complete CursesDemo showcasing all functionality
- **Focus Indicators**: Yellow borders and titles for focused components
- **Theme Integration**: Consistent styling through DefaultTheme
- **Visual Feedback**: Clear indication of which component has focus
- **Invalidation API**: Components automatically invalidate on state changes
- **Efficient Updates**: Only invalid components are redrawn
- **Focus-Aware**: Automatic invalidation on focus changes
- **Performance**: Minimal screen updates for optimal performance
- **KeyEvent System**: Comprehensive key event processing
- **Keyboard Navigation**: Arrow keys, Tab, Enter, Escape support
- **Modifier Keys**: Ctrl, Alt, Shift detection and handling
- **Shortcut System**: Configurable keyboard shortcuts
- **Comprehensive Tests**: 368+ tests across all modules
- **Virtual Screen Testing**: Mock screen for component testing
- **Integration Tests**: End-to-end functionality verification
- **Code Quality**: Spotless formatting and clean architecture
- **POSIX Commands**: Comprehensive POSIX command implementation
- **Build System**: Clean Maven build with proper dependency management
- **Documentation**: Updated module documentation and examples
The implementation follows TUI best practices from libraries like Ratatui and Cursive,
providing a modern, efficient, and user-friendly terminal interface experience.1 parent 4f6da0e commit bf0e20e
File tree
32 files changed
+7892
-97
lines changed- curses/src
- main/java/org/jline/curses
- impl
- test/java/org/jline/curses
- impl
- demo
- src/main/java/org/jline/demo
- terminal/src/main/java/org/jline/terminal
32 files changed
+7892
-97
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| 13 | + | |
13 | 14 | | |
14 | 15 | | |
15 | 16 | | |
| |||
51 | 52 | | |
52 | 53 | | |
53 | 54 | | |
54 | | - | |
55 | | - | |
56 | | - | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
57 | 83 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
94 | 94 | | |
95 | 95 | | |
96 | 96 | | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
97 | 101 | | |
98 | 102 | | |
99 | 103 | | |
| |||
127 | 131 | | |
128 | 132 | | |
129 | 133 | | |
130 | | - | |
| 134 | + | |
131 | 135 | | |
132 | 136 | | |
133 | 137 | | |
| |||
205 | 209 | | |
206 | 210 | | |
207 | 211 | | |
208 | | - | |
| 212 | + | |
209 | 213 | | |
210 | | - | |
| 214 | + | |
211 | 215 | | |
212 | 216 | | |
213 | 217 | | |
| |||
259 | 263 | | |
260 | 264 | | |
261 | 265 | | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
262 | 300 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
0 commit comments