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 	}