Skip to content

Commit 3f57b5c

Browse files
committed
FEAT: preliminary support for char based input on Posix
1 parent 37971d0 commit 3f57b5c

File tree

3 files changed

+257
-27
lines changed

3 files changed

+257
-27
lines changed

src/boot/sysobj.reb

+5
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,8 @@ view: object [
507507
focus
508508
unfocus
509509
scroll
510+
511+
control ;; used to pass control key events to a console port
510512
]
511513
event-keys: [
512514
; Event types. Order dependent for C and REBOL.
@@ -533,6 +535,9 @@ view: object [
533535
f10
534536
f11
535537
f12
538+
paste-start ;; Bracketed paste turned on - https://cirw.in/blog/bracketed-paste
539+
paste-end ;; Bracketed paste turned off
540+
escape ;; Escape key
536541
]
537542
]
538543

src/core/t-event.c

+16
Original file line numberDiff line numberDiff line change
@@ -265,8 +265,20 @@
265265
goto is_none;
266266

267267
case SYM_KEY:
268+
n = VAL_EVENT_DATA(value);
269+
if (VAL_EVENT_TYPE(value) == EVT_CONTROL) {
270+
arg = Get_System(SYS_VIEW, VIEW_EVENT_KEYS);
271+
if (IS_BLOCK(arg) && n <= (REBINT)VAL_TAIL(arg)) {
272+
*val = *VAL_BLK_SKIP(arg, n-1);
273+
break;
274+
}
275+
goto is_none;
276+
SET_CHAR(val, VAL_EVENT_DATA(value));
277+
break;
278+
}
268279
if (VAL_EVENT_TYPE(value) != EVT_KEY && VAL_EVENT_TYPE(value) != EVT_KEY_UP)
269280
goto is_none;
281+
#ifdef TO_WINDOWS
270282
n = VAL_EVENT_DATA(value); // key-words in top 16, chars in lower 16
271283
if (n & 0xffff0000) {
272284
arg = Get_System(SYS_VIEW, VIEW_EVENT_KEYS);
@@ -277,6 +289,10 @@
277289
}
278290
goto is_none;
279291
}
292+
#else
293+
n = VAL_EVENT_DATA(value);
294+
//n = Decode_UTF8_Char((REBYTE*)n, 0);
295+
#endif
280296
SET_CHAR(val, n);
281297
break;
282298

0 commit comments

Comments
 (0)