Commit: f1055209d9732ffa0e2cb06054bf4b1dbeb8fb7b
Parent: c86265503880612d85f924f794061aea978a8d25
Author: Randy Palamar
Date: Sun, 7 Jul 2024 12:00:10 -0600
insert/replace mode and app cursor keys
Diffstat:
2 files changed, 32 insertions(+), 0 deletions(-)
diff --git a/terminal.c b/terminal.c
@@ -255,6 +255,10 @@ set_mode(Term *t, CSI *csi, b32 set)
for (i32 i = 0; i < csi->argc; i++) {
i32 arg = (csi->argv[i]) | ((csi->priv & 1) << 30);
switch (arg) {
+ case 4: /* IRM: Insert/Replace Mode */
+ if (set) t->mode |= TM_REPLACE;
+ else t->mode &= ~TM_REPLACE;
+ break;
case PRIV(1): /* DECCKM: use application cursor keys */
if (set) t->gl.mode |= WIN_MODE_APPCURSOR;
else t->gl.mode &= ~WIN_MODE_APPCURSOR;
diff --git a/vtgl.c b/vtgl.c
@@ -322,6 +322,34 @@ key_callback(GLFWwindow *win, i32 key, i32 sc, i32 act, i32 mods)
case ENCODE_KEY(GLFW_REPEAT, 0, GLFW_KEY_BACKSPACE):
os_child_put_char(t->child, 0x7F);
break;
+ case ENCODE_KEY(GLFW_PRESS, 0, GLFW_KEY_UP):
+ case ENCODE_KEY(GLFW_REPEAT, 0, GLFW_KEY_UP):
+ if (t->gl.mode & WIN_MODE_APPCURSOR)
+ os_child_put_s8(t->child, s8("\x1BOA"));
+ else
+ os_child_put_s8(t->child, s8("\x1B[A"));
+ break;
+ case ENCODE_KEY(GLFW_PRESS, 0, GLFW_KEY_DOWN):
+ case ENCODE_KEY(GLFW_REPEAT, 0, GLFW_KEY_DOWN):
+ if (t->gl.mode & WIN_MODE_APPCURSOR)
+ os_child_put_s8(t->child, s8("\x1BOB"));
+ else
+ os_child_put_s8(t->child, s8("\x1B[B"));
+ break;
+ case ENCODE_KEY(GLFW_PRESS, 0, GLFW_KEY_RIGHT):
+ case ENCODE_KEY(GLFW_REPEAT, 0, GLFW_KEY_RIGHT):
+ if (t->gl.mode & WIN_MODE_APPCURSOR)
+ os_child_put_s8(t->child, s8("\x1BOC"));
+ else
+ os_child_put_s8(t->child, s8("\x1B[C"));
+ break;
+ case ENCODE_KEY(GLFW_PRESS, 0, GLFW_KEY_LEFT):
+ case ENCODE_KEY(GLFW_REPEAT, 0, GLFW_KEY_LEFT):
+ if (t->gl.mode & WIN_MODE_APPCURSOR)
+ os_child_put_s8(t->child, s8("\x1BOD"));
+ else
+ os_child_put_s8(t->child, s8("\x1B[D"));
+ break;
}
}