File tree 1 file changed +73
-0
lines changed
1 file changed +73
-0
lines changed Original file line number Diff line number Diff line change
1
+ Rebol [
2
+ title: "Custom console test"
3
+ needs: 3.12.0
4
+ purpose: {
5
+ Console port in an async (char based) mode.
6
+ Allows console input while having other async devices running.
7
+ }
8
+ ]
9
+
10
+ my-console : context [
11
+ port: system/ports/input
12
+ port/data: make string! 32
13
+ prompt: "## "
14
+ port/awake: function[event /local res][
15
+ ;probe event
16
+ ;probe event/offset
17
+ switch event/type [
18
+ key [
19
+ ;; debug:
20
+ ; print ["^[[G^[[K" mold event/key event/code]
21
+ switch /default event/key [
22
+ #"^~"
23
+ #"^H" [
24
+ take/last event/port/data
25
+ ]
26
+ #"^M" [
27
+ prin LF
28
+ unless empty? event/port/data [
29
+ set /any 'res try /all [do event/port/data ]
30
+ clear event/port/data
31
+ unless unset? :res [
32
+ prin as-green "== "
33
+ probe res
34
+ ]
35
+ ]
36
+ ]
37
+ ][
38
+ append event/port/data event/key
39
+ ]
40
+ prin "^[ [G^[ [K"
41
+ prin as-red prompt
42
+ prin event/port/data
43
+ ]
44
+ control [
45
+ prin "^[ [G^[ [K"
46
+ print ["control:" event/key event/flags ]
47
+ prin as-red prompt
48
+ prin event/port/data
49
+ if event/key = 'escape [
50
+ print "[ESC]"
51
+ return true
52
+ ]
53
+ ]
54
+ ;control-up [
55
+ ; prin "^[[G^[[K"
56
+ ; print ["control-up:" event/key]
57
+ ; prin as-red prompt
58
+ ; prin event/port/data
59
+ ;]
60
+ resize [
61
+ print ["^[ [G^[ [Ksize:" event/offset ]
62
+ prin as-red prompt
63
+ prin event/port/data
64
+ ]
65
+ interrupt [ return true ]
66
+ ]
67
+ false
68
+ ]
69
+ modify port 'line false
70
+ prin as-red prompt
71
+ wait [port]
72
+ modify port 'line true
73
+ ]
You can’t perform that action at this time.
0 commit comments