aboutsummaryrefslogtreecommitdiff
path: root/TUI/module.jai
diff options
context:
space:
mode:
Diffstat (limited to 'TUI/module.jai')
-rw-r--r--TUI/module.jai39
1 files changed, 32 insertions, 7 deletions
diff --git a/TUI/module.jai b/TUI/module.jai
index 8c1d7ed..4e87589 100644
--- a/TUI/module.jai
+++ b/TUI/module.jai
@@ -11,14 +11,17 @@
#import "Thread";
Drawings :: struct {
- // TODO Maybe just use unicode instead of jumping back and forth between drawing mode?!
+ /*
+ TODO
+ Using unicode allows to just-print instead of jumping back and forth between drawing/text modes.
+ But it seems that not all terminals support unicode?! Do we even bother with those terminals?!
+ */
// test_drawing_without_mode :: () {
// top := "┌───┐";
// btm := "└───┘";
// print(">%<\n", top);
// print(">%<\n", btm);
// }
- // #run test_drawing_without_mode();
CornerBR :: "\x6A";
CornerTR :: "\x6B";
CornerTL :: "\x6C";
@@ -129,7 +132,10 @@ set_style_colors :: (foreground: u8, background: u8) {
set_style :: (bold: bool, underline: bool = false, strike_through: bool = false, negative: bool = false) {
print(
#run sprint(Commands.SetGraphicsRendition, "%;%;%;%"),
- ifx bold then 1 else 22, ifx underline then 4 else 24, ifx strike_through then 9 else 29, ifx negative then 7 else 27);
+ ifx bold then 1 else 22,
+ ifx underline then 4 else 24,
+ ifx strike_through then 9 else 29,
+ ifx negative then 7 else 27);
}
// TODO Maybe make the OS_* procedures as inline?!
@@ -566,14 +572,33 @@ get_string :: (count_limit: int = -1) -> string {
}
}
-read_string :: (count_limit: int = -1) -> string, Key {
- // TODO WIP FIXME WIP
+// TODO UNTESTED
+user_line_input :: (count_limit: int = -1, is_visible: bool = true) -> string, Key {
+
+ // TODO Show blinking cursor
+ row, col := get_cursor_position();
+
+ key := Keys.None;
+ builder: String_Builder;
+ init_string_builder(*builder);
+
+ while key != Keys.Resize && key != Keys.Escape {
+ // TODO How to alloc/release temporary memory here?
+ key = get_key();
+ if key == Keys.Enter then break;
+ str := to_string(key);
+ print("%", str);
+ print_to_builder(*builder, "%", str);
+ }
+
/*
Use the get_key to read user input and show it on screen... should allow to move the cursor left and right and to delete/backspace.
- Enter should be used to end the input.
- Escape should discard the input returning an empty string and a Enter key.
+ Enter should end the input, returning the input string and the Enter key.
+ Escape should discard the input returning an empty string and a None key.
Resize should discard the input returning an empty string and a Resize key.
*/
+ result := ifx key == Keys.Enter then builder_to_string(*builder) else "";
+ return result, key;
}
start :: () {