commit 0018ec7
uint
·
2026-05-14 16:40:48 +0000 UTC
parent aa0b633
support more key actions, support sending ansi escapes with keypress
1 files changed,
+21,
-6
+21,
-6
1@@ -89,15 +89,30 @@ static void handle_key(RGFW_event ev)
2
3 /* special character */
4 if (ev.type == RGFW_keyPressed) {
5- char c = ev.key.value;
6- switch(c) {
7- case RGFW_keyReturn: ptywrite("\r", 1); break;
8+ RGFW_key key = ev.key.value;
9+ if ((ev.key.mod & RGFW_modControl) &&
10+ key >= RGFW_keyA && key <= RGFW_keyZ) {
11+ char c = (char)(key - RGFW_keyA + 1);
12+ ptywrite(&c, 1);
13+ return;
14+ }
15
16- case RGFW_keyDelete:
17+ switch(key) {
18+ case RGFW_keyReturn:
19+ case RGFW_keyPadReturn: ptywrite("\r", 1); break;
20 case RGFW_keyBackSpace: ptywrite("\x7F", 1); break;
21-
22- case RGFW_keyTab: ptywrite("\t", 1); break;
23+ case RGFW_keyTab: ptywrite("\t", 1); break;
24 case RGFW_keyEscape: ptywrite("\x1B", 1); break;
25+ case RGFW_keyUp: ptywrite("\x1B[A", 3); break;
26+ case RGFW_keyDown: ptywrite("\x1B[B", 3); break;
27+ case RGFW_keyRight: ptywrite("\x1B[C", 3); break;
28+ case RGFW_keyLeft: ptywrite("\x1B[D", 3); break;
29+ case RGFW_keyHome: ptywrite("\x1B[H", 3); break;
30+ case RGFW_keyEnd: ptywrite("\x1B[F", 3); break;
31+ case RGFW_keyInsert: ptywrite("\x1B[2~", 4); break;
32+ case RGFW_keyDelete: ptywrite("\x1B[3~", 4); break;
33+ case RGFW_keyPageUp: ptywrite("\x1B[5~", 4); break;
34+ case RGFW_keyPageDown: ptywrite("\x1B[6~", 4); break;
35 default: break;
36 }
37 }