65 lines
1.7 KiB
OCaml
65 lines
1.7 KiB
OCaml
open Unix
|
|
open Ansi
|
|
open Widgets
|
|
|
|
let write_out line =
|
|
ignore (write stdout (String.to_bytes line) 0 (String.length line))
|
|
|
|
let set_raw_mode fd =
|
|
let original_attrs = tcgetattr fd in
|
|
let raw_attrs = original_attrs in
|
|
raw_attrs.c_ignbrk <- false; (* Do not ignore break conditions *)
|
|
raw_attrs.c_icanon <- false; (* Disable canonical mode *)
|
|
raw_attrs.c_echo <- false; (* Disable echo mode *)
|
|
tcsetattr fd TCSAFLUSH raw_attrs;
|
|
(* Hide cursor *)
|
|
write_out "\027[?25l";
|
|
original_attrs (* Return original attributes *)
|
|
|
|
let restore_terminal fd original_attrs =
|
|
(* Show cursor *)
|
|
write_out "\027[?25h";
|
|
tcsetattr fd TCSADRAIN original_attrs
|
|
|
|
let setup_terminal () =
|
|
let fd = stdin in
|
|
let original_attrs = set_raw_mode fd in
|
|
let off: offset = {x = 1000; y = 1000;} in
|
|
let color = red in
|
|
let {x = term_x; y = term_y} = termsize in
|
|
(* let out_channel = out_channel_of_descr stdout in *)
|
|
write_out "Raw mode enabled.\n";
|
|
(* flush out_channel; *)
|
|
sleepf 0.5;
|
|
let cursor = Cursor (Move {x = term_x; y = term_y}) |> string_of_ansi in
|
|
(* Printf.sprintf "\027[%d;%dH" (term_y - 10) (termsize.x - 10) in *)
|
|
(* clear screen cursor to pos text *)
|
|
let line = "\027[2J" ^ cursor ^ "Test 123\n" in
|
|
let screen = Column(
|
|
default_column_opts,
|
|
[
|
|
Text "Testing 123";
|
|
Row(
|
|
default_row_opts,
|
|
[
|
|
Padding(
|
|
default_padding_opts,
|
|
Text "Padded child"
|
|
)
|
|
]
|
|
)
|
|
])
|
|
|> string_of_widget in
|
|
write_out line;
|
|
(* flush out_channel; *)
|
|
sleep 1;
|
|
write_out screen;
|
|
sleep 1;
|
|
write_out "test this one\n";
|
|
sleep 1;
|
|
write_out (pixel_ansi off color);
|
|
write_out "and another";
|
|
sleep 1;
|
|
restore_terminal fd original_attrs
|
|
|