-
-
Notifications
You must be signed in to change notification settings - Fork 20
/
DONE.todo
497 lines (446 loc) · 29.5 KB
/
DONE.todo
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
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
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
┏━━━━━━━━━━━━━━━┓
┃ r3bl_rs_utils ┃
┛ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
fix performance problem (https://github.com/r3bl-org/r3bl-open-core/issues/95):
✔ scroll left / right slow in type ahead completion dialog @done(23-04-25 18:31)
update changelog for r3bl_tui v0.3.3, r3bl_rs_utils_core v0.9.2:
✔ correct console color support at RenderOps level (ANSI256, Truecolor, Grayscale) @done(23-04-20 15:40)
✔ brand new markdown parser @done(23-04-20 15:47)
- support for metadata tags
- support for smart lists (with checkboxes for todos)
✔ brand new syntax highlighting @done(23-04-20 15:47)
- each heading level has different lolcat
- smart lists are colored differently (both ordered and unordered are different)
- using syntect for code blocks
✔ add better support for console log output for debugging @done(23-04-20 15:50)
- ConsoleLogInColor
- PrettyPrintDebug
publicise new release:
✔ make reddit post w/ videos @done(23-04-21 14:05)
✔ announce it on this week in rust (https://github.com/rust-lang/this-week-in-rust/pulls) @done(23-04-21 13:43)
- [tui v0.3.3](https://github.com/rust-lang/this-week-in-rust/pull/4297)
- [rust proc macro tutorial](https://github.com/rust-lang/this-week-in-rust/pull/4298)
release new version:
✔ update `CHANGELOG.md` @done(23-04-20 15:52)
✔ update `README.md` @done(23-04-20 15:52)
✔ update `lib.rs` @done(23-04-20 15:53)
✔ create new tag @done(23-04-20 19:35)
✔ publish to crates.io @done(23-04-20 19:35)
minor fixes:
✔ add animation to status bar for `ex_rc` demo @done(23-04-23 17:03)
✔ make animation general purpose (since it's already used in 2 places) @done(23-04-23 20:48)
✔ bold and italic should dim the `**` and `*` characters @done(23-04-24 12:35)
fix syn hi (https://github.com/r3bl-org/r3bl-open-core/issues/82):
✔ `md_parser_syn_hi.rs`: @done(23-03-22 20:34)
✔ fn `try_parse_and_highlight`: `&Vec<US>` -(1)-> `Document` -(2)-> `StyleUSSpanLines` @done(23-03-22 20:34)
✔ rewrite `md_parser` @done(23-03-10 17:36)
✔ fn `convert_from_code_block_into_lines`: `<CodeBlock>` -> `Vec<CodeBlockLine>` @done(23-03-09 15:58)
✔ refactor names in `syntax_highlighting` module @done(23-03-10 17:36)
✔ `From`: `Document` -> `CommonResult<StyleUSSpanLines>` @done(23-03-22 20:32)
✔ build a theme to convert parts of a `Document` to `Style` @done(23-03-22 20:32)
✔ `editor_engine_api.rs`: update `render_content()` using `syntect` & `md_parser` choice @done(23-03-26 09:20)
✔ md_parser migrate strategy to `_opt_eol` @done(23-03-29 17:45)
✔ title, tags @done(23-03-28 10:53)
✔ heading @done(23-03-28 19:09)
✔ code block @done(23-03-29 17:44)
✔ fix bugs in the md_parser @done(23-03-29 17:44)
✔ "```rs\nfoo\n````" (extra backtick) not working @done(23-03-29 17:44)
✔ `from_block_codeblock()` - impl better syntax highlighting for code blocks using syntect @done(23-03-31 15:55)
✔ fix syntect output for macOS (ANSI256) @done(23-04-01 14:56)
✔ `tui_color.rs`: `RGBValue` -> `ANSIValue(u8)` (just a `u8` atm) @done(23-03-31 20:36)
✔ add tests @done(23-04-01 10:59)
✔ CHOOSE: @done(23-04-01 14:09)
✔ ❌ `from_syntect_to_tui()` -> use `ColorSupport::detect()` to determine if we should use `ANSIValue` or `RGBValue`? @done(23-04-01 14:09)
✔ ✅ deal w/ this in RenderOps? @done(23-04-01 14:56)
✔ convert color to grayscale @done(23-04-01 19:43)
✔ bug fix for text input: @done(23-04-02 08:35)
"@tags: [foo, bar\n\n```rs\nlet a=1;\n```\n\n*italic* **bold** [link](https://example.com)\n\n`inline code`"
✔ ol / ul @done(23-04-12 11:33)
✔ migrate strategy to `_opt_eol`? @done(23-04-12 11:33)
✔ should `md_parser` handle nested ol / ul blocks "intelligently" (not EOL delimited)? @done(23-04-12 11:33)
✔ consider using https://docs.rs/concolor-query/0.3.3/concolor_query/fn.clicolor.html @done(23-04-02 13:18)
- eg: https://docs.rs/anstream/latest/src/anstream/auto.rs.html
- instead of custom implementation of `ColorSupport::detect()`
parse_smart_lists_in_markdown:
✔ fix pretty print in parser mod @done(23-04-12 11:34)
✔ extensive tests for smart list parsing in `parse_valid_no_indent` test @done(23-04-12 11:42)
✔ extensive tests for smart list parsing in `parse_valid_multiline_no_indent` test @done(23-04-16 19:00)
✔ extensive tests for smart list parsing in `parse_valid_with_indent` test @done(23-04-16 19:00)
✔ impl syn hi for smart lists by handling indent level formatting @done(23-04-16 19:00)
✔ clean up smart list migrate from lines -> single line @done(23-04-16 19:00)
✔ deprecate old ul ol parser code @done(23-04-16 19:00)
✔ make test data consistent @done(23-04-17 13:30)
✔ fix all clippy warnings @done(23-04-17 13:31)
✔ editor architecture (general purpose editor component or specific to notes?) @done(23-04-17 17:06)
✔ fix checkboxes `[x]` `[ ]` - select new color & glyph for `[x]` @done(23-04-18 10:21)
✔ checkboxes should only be rendered inside of a smart list @done(23-04-18 15:51)
misc:
✔ add other metadata tags to the MD parser (look at orgmode.org) like `authors`, `date` @done(23-04-19 11:58)
✔ update editor example app to be preloaded w/ MD snippet for testing (not empty buffer) @done(23-04-19 15:28)
✔ update pitch example app to be uneditable @done(23-04-19 15:28)
✔ fix emoji breaking MD line parsing `parse_element::parse_element_plaintext()` @done(23-04-19 18:33)
✔ editor config options - make editor read only @done(23-04-20 13:37)
✔ make README for TUI better @done(23-04-20 14:11)
✔ add getting started guide w/ video & clear instructions on running demo, and looking at egs @done(23-04-20 14:11)
✔ update links in all the README (to the stuff above) @done(23-04-20 14:11)
fix lolcat (https://github.com/r3bl-org/r3bl-open-core/issues?q=is%3Aopen+is%3Aissue++project%3Ar3bl-org%2F1+lolcat+):
✔ add `color_wheel` mod to `core` crate @done(23-02-26 10:42)
✔ remove `lolcat` mod from `core` crate & update docs & check FIXMEs @done(23-02-26 10:42)
✔ add gradient and colorization policies to `color_wheel` @done(23-02-26 17:37)
✔ use a different crate to generate gradients & use multiple gradient stops @done(23-02-26 21:47)
✔ move `color_wheel` out of `r3bl_rs_utils_core` crate & into `tui` crate (it needs `RenderOp`) @done(23-02-27 11:43)
✔ make `color_wheel` generate `styled_text` instead of ANSI string @done(23-02-27 14:27)
✔ replace use of ansi text w/ styled_text @done(23-02-28 21:38)
✔ remove `color_wheel_impl.rs::lolcat_unicode()` @done(23-02-28 11:51)
✔ remove `color_wheel_impl.rs::lolcat_str()` @done(23-02-28 16:34)
✔ remove `color_wheel_impl.rs::lolcat_from_style()` @done(23-02-28 21:37)
✔ remove `color_wheel_impl.rs::colorize_into_ansi_string()` @done(23-02-28 21:37)
✔ remove ANSI parser & all support for ANSI from the TUI engine (delete `tui_core/ansi/ansi_text.rs`) @done(23-03-02 13:03)
✔ remove the needless cache of ANSI text! @done(23-03-02 13:03)
✔ try and get cat.rs to generate stylet texts instead of ANSI & implement the color wheel iter on it @done(23-03-02 15:56)
✔ add `TextColorizationPolicy::ColorEachCharacter` arg that allows bold, italic, other text attributes (& styles?) @done(23-03-03 10:34)
✔ organize `TuiColor` basic colors into an enum variant @done(23-03-03 14:08)
✔ ANSI 256 color support @done(23-03-03 17:53)
✔ add support for ANSI 256 colors from: <https://www.figma.com/file/K8EUf9CvzEw0IPlUcQVRnt/256-colors-lolcat> @done(23-03-03 17:53)
✔ add to demo in `ex_app_no_layout/app.rs` @done(23-03-03 17:53)
✔ color wheel selection based on terminal capabilities @done(23-03-04 17:05)
✔ on macOS make the default color palette to be ANSI 256 colors & Rgb colors for all other platforms @done(23-03-04 17:05)
✔ provide global override @done(23-03-04 17:05)
✔ integrate lolcat into color wheel @done(23-03-05 10:17)
✔ add animation to the no layout example @done(23-03-05 10:17)
✔ test w/ overriding color wheel to truecolor, ansi 256, grayscale, etc @done(23-03-05 15:49)
md_parser:
✔ move `md_parser` from `rust_scratch/nom` to `r3bl_rs_utils` @done(23-02-20 11:26)
redux-no-clone:
✔ landed w/ huge performance boost <https://github.com/r3bl-org/r3bl-open-core/issues/70> @done(23-01-15 12:27)
auto completion provider design:
✔ change the `OnDialogEditorChangeFn`, `OnDialogPressFn` to be async trait impl which takes `App` @done(23-01-11 17:07)
- this can't be done
✔ how do dialog boxes currently work @done(23-01-13 10:48)
✔ how to make an http request to some api (dog, cat, etc), ref: address book code @done(23-01-13 10:48)
✔ how to add an editor component to bottom of dialog box (result box) @done(23-01-13 10:48)
- left / right => goes to dialog's input box
- up / down => goes to editor component below (result box) & add '*' prefix to selected line
✔ incorporate `dd_autocomplete.md` & `dd_editor_component.md` into `tui/README/md` & `tui/src/lib.rs` @done(23-01-13 10:48)
auto completion provider impl:
**tracking bug**:
✔ [x] https://github.com/r3bl-org/r3bl-open-core/issues/49 @done(23-01-09 15:57)
**bug fixes**:
- [x] https://github.com/r3bl-org/r3bl-open-core/issues/71
**dialog_engine_api.rs**:
- [x] add `render_results_panel()` to display results panel (if in autocomplete mode)
- `DialogBuffer.results` is saved in the **state** & gets passed in here
- paint the `results: Vec<String>` in the panel
- paint the selected row
- deal w/ `scroll_offset_row_index`
- [x] `apply_event()` - called by `DialogComponent::handle_event()`
- [x] up / down handler to navigate the results panel (if in autocomplete mode)
- up / down will change the following in the `dialog_engine` data (**not state**)
- `selected_row_index` - tracks the selected row
- used for `render`, `on_dialog_press_handler`
- `scroll_offset_row_index` - tracks scroll offset
- you can get viewport from `DialogEngine::flex_box`, saved by `DialogComponent::render()`
- if viewport is smaller than num results then scroll offset is applied
- this code path should return an `ConsumedRender` so that the results panel is re-rendered
- [x] clean up engine data (`selected_row_index`, `scroll_offset_row_index`) when dialog is closed
- [x] `render_engine()` - called by `DialogComponent::render()`
- [x] called `render_results_panel()`
- [x] actually call `make_flex_box_for_dialog()`
- [x] drop the `current_box` arg
- [x] pass the mode (`self.dialog_engine.dialog_options.mode`) into `make_flex_box_for_dialog()`
- this `flex_box` is used later by the `DialogEngineApi::apply_event()` to perform scrolling
- [x] save flex box to `dialog_engine.maybe_flex_box`
- [x] `make_flex_box_for_dialog()`
- [x] pass arg into the function
- `DialogEngineMode` - this is the mode of the dialog engine (normal or autocomplete)
- [x] make the `Surface` arg optional (since it won't be passed in)
- [x] this should just be a private function, in `internal_impl`, remove from `DialogEngineApi`
- [x] pass `SurfaceBounds` so that dialog paint can be constrained to this
- [x] based on the mode (normal / autocomplete) generate the correct flex box
- [x] write tests
**dialog_buffer.rs**:
- [x] add `maybe_results: Option<Vec<String>>` field
**dialog_engine.rs**:
- [x] add `selected_row_index: ChUnit`
- [x] add `scroll_offset_row_index: ChUnit`
- [x] add `maybe_flex_box: Option<FlexBox>` & document it
- [x] add `reset()` and extend `Component` trait to have it as well & make sure others call it
- [x] `dialog_engine_api.rs::apply_event()`
- [x] `app.rs::try_input_event_activate_modal()`
**app.rs**:
- [x] add a new dialog component w/ autocomplete (copy `insert_dialog_component()`)
- [x] new `ComponentId` called `AutocompleteDialog` (rename the old one to `SimpleDialog`)
- [x] `on_dialog_press_handler` - add result to editor by dispatching action
- [x] `on_dialog_editor_change_handler` -
- [x] generate fake results
- [x] dispatch action to update results panel
- the results are added to `Action::SetDialogBufferResults(FlexBoxId, Vec<String>`
- [x] add new keyboard shortcut to show autocomplete dialog (<kbd>ctrl + k</kbd>)
- [x] change `try_input_event_activate_modal()`
- [x] change status bar to show this shortcut
- [x] `ContainerSurfaceRender::render_in_surface()` can't call `make_flex_box_for_dialog()`
- Pass in `Default::default()` knowing that it will be ignored by the dialog component
**reducer.rs**:
- [x] add `Action::SetDialogBufferResultsPanel`
- [x] handle `SetDialogBufferResultsPanel(FlexBoxId, Vec<String>` case in `run()`
- add the results to the state (in `DialogBuffer`)
**dialog_component.rs**:
- [x] `render()` - ignore the 3rd arg (`current_box: FlexBox`) & document it
- [x] `new_shared()` - add `DialogEngineConfigOptions` arg
- [x] `new()` - add `DialogEngineConfigOptions` arg & save to `self.dialog_engine: DialogEngine`
**style.rs**:
- [x] replace id from String to u8 for performance benefit & Copy trait derive
editor engine bug:
✔ fix: type few lines, press backspace/delete (from end of file) and deleted lines are not removed @done(22-11-28 18:18)
- paint.rs::paint() does not work property ... the optimization to prevent flicker causes this problem
- this will be fixed by the compositor work!
- this is also fixed by printing SPACERs in empty lines of the editor component
- SHA: https://github.com/r3bl-org/r3bl-open-core/commit/e1c6b6b87de0b06ee1f634c72b547bf792d012a7
compositor:
✔ implement `render_pipeline_to_offscreen_buffer::RenderPipeline` to IR (`OffscreenBuffer`): @done(22-11-26 10:13)
✔ test `RenderPipeline::convert()` @done(22-11-26 14:40)
✔ implement ANSI text clipping & padding in `RenderPipeline::print_text_with_attributes()` @done(22-11-28 11:54)
✔ test `RenderPipeline::convert()` (offscreen_buffer.rs) @done(22-11-28 11:55)
✔ plain text @done(22-11-26 15:29)
✔ ANSI text @done(22-11-28 11:55)
✔ convert w/ 2 lines and position that isn't (0,0) @done(22-11-27 10:33)
✔ implement `OffscreenBufferPaintImplCrossterm` @done(22-11-28 15:18)
✔ implement `render()` & test @done(22-11-26 10:13)
✔ implement `paint()` @done(22-11-28 15:18)
✔ try it out w/ `compositor = true` in `paint.rs` @done(22-11-30 22:19)
✔ 🐛bugs: @done(22-12-02 19:04)
✔ window_size: [width:76, height:10] w/ editor eg doesn't display ` Ctrl + l : Modal dialog📣` @done(22-11-30 22:18)
✔ modal dialog looks distorted, `print_ansi_text` has problems @done(22-12-02 19:04)
✔ make offscreen buffer support serde @done(22-12-03 10:09)
✔ impl diff between 2 offscreen buffers & paint only the changes pixel chars @done(22-12-03 19:22)
✔ make sure it works, tests? @done(22-12-03 19:22)
✔ fix bug in example w/ 2 col layout that has text missing @done(22-12-04 13:45)
✔ fix things are being clipped twice (once during `convert`, and again on `render_op_impl`) @done(22-12-05 10:23)
✔ create a new "dumb" `RenderOp::CompositorNoClipTruncPrintTextWithAttributes` which does NOT handle clipping & padding @done(22-12-05 10:26)
✔ use this in `OffscreenBufferPaintImplCrossterm::render()` & `render_diff()` @done(22-12-05 10:26)
✔ cleanup @done(22-12-05 10:27)
✔ audit the use of `RwLock` for `main_event_loop::GlobalData` @done(22-12-05 10:11)
✔ deprecate: @done(22-12-05 17:58)
✔ `main_event_loop::GlobalData::cursor_position` @done(22-12-05 17:07)
✔ `RenderOp::CursorShow`, `CursorHide` @done(22-12-05 17:07)
✔ `RenderOp::RequestShowCaretAtPositionAbs`, `RequestShowCaretAtPositionRelTo` @done(22-12-05 17:07)
✔ `RenderOp::PrintTextWithAttributesAndPadding` @done(22-12-05 17:57)
✔ editor component should no longer pad empty lines w/ spaces thanks to compositor @done(22-12-05 17:57)
✔ bug: @done(22-12-08 19:06)
✔ fix log output so it is readable @done(22-12-06 12:24)
✔ scrolling this causes issues `# this is a line of x vars monk to y barf cook team by z bark mint🙏🏽😀░` @done(22-12-08 15:43)
✔ fix right at end of line not working @done(22-12-08 19:06)
✔ fix all broken tests @done(22-12-08 19:22)
✔ fix scrolling left bugs for window_size: [width:81, height:13] @done(22-12-10 11:27)
✔ update docs @done(22-12-11 10:15)
✔ put the docs where they belong (in the code): EditorBuffer w/ info on caret & scroll offset @done(22-12-09 15:31)
✔ update `dd_compositor.md` - talk about `paint.rs`, offscreen buffer, no flicker, no need to pad w/ spaces @done(22-12-09 19:54)
✔ add figma diagram showing how the compositor works @done(22-12-09 19:54)
✔ add docs for 2 scripts: `run-with-flamegraph-profiling.fish` & `run-with-crash-reporting.fish` @done(22-12-10 11:27)
✔ remove all the TODO, BUG, BM, TK from changes made in this branch @done(22-12-11 10:15)
✔ merge `compositor` branch into `main` & close issue https://github.com/r3bl-org/r3bl-open-core/issues/46 @done(22-12-10 11:27)
✔ cut releases & publish to crates.io @done(22-12-11 10:15)
✔ make a video & publicize it on reddit @done(22-12-11 10:15)
refactor https://github.com/r3bl-org/r3bl-open-core/issues/63:
✔ index (starts at 0) vs size (starts at 1) confusion cleanup @done(22-11-21 08:40)
✔ move get_plain_text_clipped() to access.rs @done(22-11-21 08:40)
editor engine extras core (https://github.com/r3bl-org/r3bl-open-core/issues/48):
✔ syntax highlighting support @done(22-11-20 17:41)
✔ support editor config options to enable/disable syntax highlighting & update tests @done(22-11-20 17:41)
✔ markdown parsing (MD frontmatter in JSON format, and MD -> AST) @done(22-11-20 17:41)
cleanup:
✔ handle style local is true @done(22-10-30 19:31)
✔ rename jsx macro names (layout and render macros) @done(22-10-30 19:31)
editor engine extras (core):
✔ add modal dialog support https://github.com/r3bl-org/r3bl-open-core/issues/45 @done(22-10-28 16:08)
editor engine extras (core):
✔ add editor config options to enable/disable multiline & update tests @done(22-10-11 15:29)
✔ Expose clear `EditorEngineApi` public API for editor engine & remove OOP from engine @done(22-10-12 11:39)
✔ make sure window_size is correctly passed down from main_event_loop -> app -> component @done(22-10-17 11:13)
framework:
✔ [Enforce terminal window bounds in RenderPipeline](https://github.com/r3bl-org/r3bl-open-core/issues/28) @done(22-09-03 20:36)
✔ [Z-ordering support in RenderPipeline](https://github.com/r3bl-org/r3bl-open-core/issues/27) @done(22-09-09 16:12)
✔ [Fix broken unicode painting on different terminal + os combos](https://github.com/r3bl-org/r3bl-open-core/issues/33) @done(22-09-15 15:55)
✔ [EditorBuffer rewrite](https://github.com/r3bl-org/r3bl-open-core/issues/40) @done(22-09-20 10:32)
✔ [Migrate cmdr -> rs](https://github.com/r3bl-org/r3bl-open-core/issues/38) @done(22-09-20 13:59)
crate reorg (https://github.com/r3bl-org/r3bl-open-core/issues/42):
✔ Move tests from tests/ into appropriate src/ module @done(22-10-04 09:21)
✔ r3bl_rs_utils_core @done(22-10-04 09:21)
✔ r3bl_rs_utils_macro @done(22-10-04 09:21)
✔ r3bl_rs_utils @done(22-10-04 09:21)
✔ Break up r3bl_rs_utils into smaller crates @done(22-10-04 13:52)
✔ r3bl-redux @done(22-10-04 12:15)
✔ r3bl-tui @done(22-10-04 12:15)
✔ update all comments / docs @done(22-10-04 12:15)
✔ update all READMEs & lib.rs docs @done(22-10-04 13:52)
editor engine core (https://github.com/r3bl-org/r3bl-open-core/issues/23):
✔ wire up the engine into framework @done(22-08-31 13:56)
✔ fancy debug impl for editor buffer @done(22-08-31 13:57)
✔ insert content: @done(22-09-01 11:46)
✔ type characters & store in buffer @done(22-09-01 11:46)
✔ add tests for editor buffer @done(22-09-01 11:46)
✔ paint caret: @done(22-09-02 09:43)
✔ use cursor show / hide @done(22-09-02 08:19)
✔ use reverse / invert colors to paint the caret (so there can be many) @done(22-09-02 09:42)
✔ bounds check max rows when painting content @done(22-09-02 11:29)
✔ implement render clipping: @done(22-09-02 13:10)
✔ figure out how to incorporate row & col bounds checking to implement clipping @done(22-09-02 13:10)
✔ move cursor left, right: @done(22-09-12 09:49)
✔ move cursor left @done(22-09-09 16:02)
✔ move cursor right @done(22-09-09 16:02)
✔ write tests @done(22-09-12 09:49)
✔ refactor @done(22-09-12 09:50)
✔ replace `UnitType` w/ `ChUnit` and `ch!` macro @done(22-09-12 09:50)
✔ insert content: @done(22-09-12 16:06)
✔ handle new line insert at start, middle, end of current line @done(22-09-12 16:06)
✔ write tests @done(22-09-12 16:06)
✔ move cursor up, down: @done(22-09-13 11:47)
✔ up arrow key move in buffer @done(22-09-13 11:08)
✔ down arrow key move in buffer @done(22-09-13 11:08)
✔ write tests @done(22-09-13 11:47)
✔ delete content: @done(22-09-15 10:17)
✔ delete @done(22-09-14 15:46)
✔ backspace @done(22-09-14 15:46)
✔ write tests @done(22-09-17 13:48)
✔ write tests for `ch!` macro @done(22-09-17 13:55)
✔ start writing tests for render pipeline @done(22-09-17 14:43)
✔ scrolling @done(22-10-01 16:15)
✔ refactor editor buffer lines write ops so they are funnelled through a single fn @done(22-09-19 16:17)
✔ refactor editor buffer caret write ops so they are funnelled through a single fn @done(22-09-19 16:17)
✔ up, down @done(22-09-28 11:07)
✔ resize (caret & scroll fix - `validate_caret_in_viewport_activate_scroll_if_needed` in `render`) @done(22-09-28 13:12)
✔ left, right @done(22-10-01 16:15)
✔ move caret left, right -> move up, down as well @done(22-10-03 08:56)
✔ right at end of line, move down to start of next line @done(22-10-02 12:16)
✔ left at start of line, move up to end of previous line @done(22-10-02 12:16)
✔ down on last line, move to end of line @done(22-10-02 15:22)
✔ up at first line, move to 0,0 @done(22-10-03 08:56)
✔ other key inputs @done(22-10-03 11:22)
✔ home/end @done(22-10-03 09:24)
✔ page up/down @done(22-10-03 11:22)
✔ tests for page up, down @done(22-10-03 12:08)
✔ add docs for viewport & scrolling in editor_ops.rs @done(22-10-03 12:16)
✔ tests for scrolling @done(22-10-03 15:44)
styling - add text span support:
✔ add new struct to provide text span which is vec of styled text `styled_text.rs` @done(22-08-13 20:18)
✔ ensure that its compatible w/ `GraphemeClusterSegment` & `unicode_string_ext.rs` @done(22-08-13 20:18)
✔ add unicode width to `GraphemeClusterSegment` @done(22-08-13 20:18)
✔ impl this for the exit message in `r3bl-cmdr` @done(22-08-13 20:18)
cleanup:
✔ replace all use of crossterm `Color` w/ `TuiColor` (provide `From` trait impl) @done(22-08-14 14:50)
✔ clean up all existing code & try to move things to inner `helpers` mod @done(22-08-14 14:50)
build awareness:
✔ write tutorial on developerlife.com about `style!` DSL @done(22-08-05 17:11)
- part 1 of a series on creating CSS like DSL in Rust
- plan to add JSX like DSL in Rust as well for `tui` module
share this w/ the community:
✔ rust lang community forum @done(22-08-06 20:13)
✔ discord server for rust `proc-macro` & `tui-and-cli` @done(22-08-06 20:13)
✔ r/rust @done(22-08-06 20:13)
✔ mailchimp @done(22-08-06 20:13)
publish:
✔ core needs to be rev'd @done(22-08-04 11:14)
✔ public needs to be rev'd @done(22-08-04 11:14)
✔ README needs to be rev'd @done(22-08-04 11:14)
tui graduate:
✔ move all the `tui` stuff out of `r3bl-cmdr` into here @done(22-08-02 15:04)
✔ fix `cargo doc` warnings in `r3bl_rs_utils` @done(22-08-03 10:11)
✔ add simple README & lib.rs doc for `core` crate @done(22-08-03 12:34)
✔ add simple README & lib.rs doc for `macro` crate @done(22-08-03 12:34)
✔ add documentation for `tui` module @done(22-08-03 14:54)
✔ add documentation for `tui_core` module @done(22-08-03 14:55)
✔ match redux docs from README to mod.rs @done(22-08-03 15:18)
✔ match tui docs from mod.rs to README @done(22-08-03 15:31)
move `tui-core` from `r3bl-cmdr` here:
✔ add `tui-core` to `core` @done(22-07-05 16:19)
✔ make this work w/ the `style!` macro @done(22-07-05 16:19)
add `style!` proc macro:
✔ impl attrib (bold, dim, etc) @done(22-07-05 16:19)
✔ make this work w/ the real `Style` struct (update test below) @done(22-07-05 19:51)
✔ impl margin @done(22-07-07 13:22)
✔ impl color_fg @done(22-07-07 13:22)
✔ impl color_bg @done(22-07-07 13:22)
test_make_style_macro.rs:
✔ use the real `Style` struct (not the fake one) @done(22-07-07 13:22)
publish:
✔ rev `core` version & publish (`tui-core`) @done(22-07-07 13:22)
✔ rev `macro` version & publish @done(22-07-07 13:22)
✔ rev main version @done(22-07-07 13:22)
✔ update `README.md` (run `doctoc`) @done(22-07-07 13:22)
✔ publish `public` version @done(22-07-07 13:22)
move `tui` from `r3bl-cmdr` here:
✔ move the `tui` folder here when it is ready @done(22-07-07 13:22)
✔ move the tests here @done(22-07-07 13:22)
✔ update README.md @done(22-07-07 13:22)
✔ rev the public version & publish @done(22-07-07 13:22)
Simplify mw:
✔ no longer returns `Option<Action>` @done(22-04-19 16:35)
✔ be opinionated about parallel execution @done(22-04-19 16:35)
- via `fire_and_forget!`
- dispatch an `Action` afterwards
- in a separate tokio thread
Rewrite subscriber to use async trait:
✔ async trait @done(22-04-17 18:22)
Rewrite mw to use async trait:
✔ add async trait in `async_middleware.rs` @done(22-04-15 19:31)
✔ add async trait vec in `async_middleware.rs` @done(22-04-15 19:31)
✔ add methods in `async_store.rs` to add/remove middleware async trait @done(22-04-15 19:31)
✔ add method in `async_store_state_machine.rs` to run the trait objs in `middleware_vec` @done(22-04-16 19:12)
Fix middleware & make it async:
✔ mw fn accepts 2nd arg (`StoreStateMachine`) so it can dispatch action async @done(22-04-13 17:49)
Cyclic arc in Rust 1.60.0:
✔ Experiment use new cyclic `Arc` in `<Arc<RwLock<T>>>` pattern @done(22-04-08 11:32)
- `arc_cyclic_test.rs`
- `arc_cyclic_test_2.rs`
✔ Can't use it in proc macro @done(22-04-08 11:33)
- `from` constructor provides an `Arc` wrapped struct & fails to hide the `Arc`
Bug fixes:
✔ separate `TypeExt` into 2 smaller traits @done(22-04-07 11:02)
✔ remove helper function redundancy between following proc macros: @started(22-04-07 15:51) @done(22-04-07 15:51) @lasted(41s)
- `make_shareable_fn_wrapper.rs`
- `make_safe_async_fn_wrapper.rs`
✔ clean up `type_ext.rs` @done(22-04-07 15:52)
✔ publish public 0.7.7 and macro 0.7.2 @done(22-04-07 16:08)
Experiment:
✔ make a macro that can generate the complex function wrapper struct @done(22-04-02 20:17)
✔ Replace async_subscribers.rs and async_middleware.rs w/ new macro @done(22-04-02 20:17)
✔ publish v0.7.1 and update all the internal deps to v0.7.1 @done(22-04-02 20:24)
README:
✔ decl: add debug! macro docs @done(22-04-01 21:03)
✔ proc-derive: add builder.rs docs @done(22-04-01 21:03)
✔ proc-fn-like: add manager-of-things proc macro fn docs @done(22-04-01 21:03)
✔ Publish a new version to crates.io @done(22-04-01 22:10)
✔ developerlife.com update Rust & Redux article @done(22-04-01 22:10)
use the macros:
✔ Identify where the new proc macro "manager" of "things" can be used @done(22-04-01 15:03)
✔ Refactor existing Redux code to use macros above @done(22-04-01 15:03)
✔ sync_reducer.rs @done(22-04-01 20:26)
✔ async_middleware.rs @done(22-04-01 20:46)
✔ async_subscriber.rs @done(22-04-01 20:46)
r3bl_rs_utils:
✔ Extract 2 traits out of manager_of_things.rs & rename the macro @done(22-04-01 07:41)
✔ Create my_core_lib crate @done(22-04-01 10:41)
✔ Add my_core_lib crate as dep for: @done(22-04-01 10:42)
✔ public crate (r3bl_rs_utils), @done(22-04-01 10:42)
✔ proc macro crate (my_proc_macros_lib) @done(22-04-01 10:42)
✔ Move the 2 core traits into my_core_lib crate @done(22-04-01 10:42)
developerlife.com content:
✔ Update articles on Redux and Proc Macros w/ this new stuff @done(22-03-31 20:06)
manager_of_things.rs:
✔ Based on macros repo create the final "manager" of "things" fn like macro @done(22-03-31 18:41)
builder.rs:
✔ copy from macros repo to here @done(22-03-31 15:00)
✔ update lib.rs to export it @done(22-03-31 15:00)
proc macros setup:
✔ make lib crate for proc macro @done(22-03-31 11:33)
✔ make lib.rs file and setup directory layout @done(22-03-31 11:33)
✔ link this lib to the main crate's Cargo.toml @done(22-03-31 11:33)
✔ make manager-of-things.rs file and export it via lib.rs @done(22-03-31 11:33)
decl macros:
✔ Move from macros repo debug! decl macro @done(22-03-31 10:19)
Add new functions from other repos:
✔ Add `file_logging.rs` from `tui-layout-crossterm` @done(22-04-28 17:01)
✔ Update `README.md` w/ `log!` macro @done(22-04-29 12:28)
✔ Update `README.md` w/ `make_api_call_for!` macro @done(22-04-29 14:58)
✔ Update `README.md` w/ `fire_and_forget!` macro @done(22-04-29 14:58)
✔ Publish 0.7.21 @done(22-04-29 14:59)