1 | import term.ui as tui |
2 | |
3 | struct App { |
4 | mut: |
5 | tui &tui.Context = unsafe { nil } |
6 | } |
7 | |
8 | fn event(e &tui.Event, mut app App) { |
9 | app.tui.clear() |
10 | app.tui.set_cursor_position(0, 0) |
11 | app.tui.write('V term.input event viewer (press `esc` to exit)\n\n') |
12 | app.tui.write('${e}') |
13 | app.tui.write('\n\nRaw event bytes: "${e.utf8.bytes().hex()}" = ${e.utf8.bytes()}') |
14 | if !e.modifiers.is_empty() { |
15 | app.tui.write('\nModifiers: ${e.modifiers} = ') |
16 | if e.modifiers.has(.ctrl) { |
17 | app.tui.write('ctrl. ') |
18 | } |
19 | if e.modifiers.has(.shift) { |
20 | app.tui.write('shift ') |
21 | } |
22 | if e.modifiers.has(.alt) { |
23 | app.tui.write('alt. ') |
24 | } |
25 | } |
26 | app.tui.flush() |
27 | |
28 | if e.typ == .key_down && e.code == .escape { |
29 | exit(0) |
30 | } |
31 | } |
32 | |
33 | fn main() { |
34 | mut app := &App{} |
35 | app.tui = tui.init( |
36 | user_data: app |
37 | event_fn: event |
38 | window_title: 'V term.ui event viewer' |
39 | hide_cursor: true |
40 | capture_events: true |
41 | frame_rate: 60 |
42 | use_alternate_buffer: false |
43 | ) |
44 | println('V term.ui event viewer (press `esc` to exit)\n\n') |
45 | app.tui.run()! |
46 | } |