v / examples / term.ui
Raw file | 46 loc (42 sloc) | 992 bytes | Latest commit hash 868908b80
1import term.ui as tui
2
3struct App {
4mut:
5 tui &tui.Context = unsafe { nil }
6}
7
8fn 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
33fn 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}