Skip to content

Commit ef38d10

Browse files
committed
TEST: simple async console input
1 parent 0e3102a commit ef38d10

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

src/tests/test-user-console.r3

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
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+
]

0 commit comments

Comments
 (0)