From 681c9acb4cc729714c227d48286db7d94145eae8 Mon Sep 17 00:00:00 2001 From: David Herrmann Date: Tue, 14 Aug 2012 17:01:55 +0200 Subject: [PATCH] vte: return status in kmscon_vte_handle_keyboard() We now return whether the key had any effect. This can be used by the terminal handler to perform various actions on user-input. Signed-off-by: David Herrmann --- src/vte.c | 190 +++++++++++++++++++++++++++--------------------------- src/vte.h | 2 +- 2 files changed, 97 insertions(+), 95 deletions(-) diff --git a/src/vte.c b/src/vte.c index ada0b0c..9f8315e 100644 --- a/src/vte.c +++ b/src/vte.c @@ -2089,7 +2089,7 @@ void kmscon_vte_input(struct kmscon_vte *vte, const char *u8, size_t len) --vte->parse_cnt; } -void kmscon_vte_handle_keyboard(struct kmscon_vte *vte, +bool kmscon_vte_handle_keyboard(struct kmscon_vte *vte, const struct uterm_input_event *ev) { kmscon_symbol_t sym; @@ -2102,173 +2102,173 @@ void kmscon_vte_handle_keyboard(struct kmscon_vte *vte, case XK_2: case XK_space: vte_write(vte, "\x00", 1); - return; + return true; case XK_a: case XK_A: vte_write(vte, "\x01", 1); - return; + return true; case XK_b: case XK_B: vte_write(vte, "\x02", 1); - return; + return true; case XK_c: case XK_C: vte_write(vte, "\x03", 1); - return; + return true; case XK_d: case XK_D: vte_write(vte, "\x04", 1); - return; + return true; case XK_e: case XK_E: vte_write(vte, "\x05", 1); - return; + return true; case XK_f: case XK_F: vte_write(vte, "\x06", 1); - return; + return true; case XK_g: case XK_G: vte_write(vte, "\x07", 1); - return; + return true; case XK_h: case XK_H: vte_write(vte, "\x08", 1); - return; + return true; case XK_i: case XK_I: vte_write(vte, "\x09", 1); - return; + return true; case XK_j: case XK_J: vte_write(vte, "\x0a", 1); - return; + return true; case XK_k: case XK_K: vte_write(vte, "\x0b", 1); - return; + return true; case XK_l: case XK_L: vte_write(vte, "\x0c", 1); - return; + return true; case XK_m: case XK_M: vte_write(vte, "\x0d", 1); - return; + return true; case XK_n: case XK_N: vte_write(vte, "\x0e", 1); - return; + return true; case XK_o: case XK_O: vte_write(vte, "\x0f", 1); - return; + return true; case XK_p: case XK_P: vte_write(vte, "\x10", 1); - return; + return true; case XK_q: case XK_Q: vte_write(vte, "\x11", 1); - return; + return true; case XK_r: case XK_R: vte_write(vte, "\x12", 1); - return; + return true; case XK_s: case XK_S: vte_write(vte, "\x13", 1); - return; + return true; case XK_t: case XK_T: vte_write(vte, "\x14", 1); - return; + return true; case XK_u: case XK_U: vte_write(vte, "\x15", 1); - return; + return true; case XK_v: case XK_V: vte_write(vte, "\x16", 1); - return; + return true; case XK_w: case XK_W: vte_write(vte, "\x17", 1); - return; + return true; case XK_x: case XK_X: vte_write(vte, "\x18", 1); - return; + return true; case XK_y: case XK_Y: vte_write(vte, "\x19", 1); - return; + return true; case XK_z: case XK_Z: vte_write(vte, "\x1a", 1); - return; + return true; case XK_3: case XK_bracketleft: case XK_braceleft: vte_write(vte, "\x1b", 1); - return; + return true; case XK_4: case XK_backslash: case XK_bar: vte_write(vte, "\x1c", 1); - return; + return true; case XK_5: case XK_bracketright: case XK_braceright: vte_write(vte, "\x1d", 1); - return; + return true; case XK_6: case XK_grave: case XK_asciitilde: vte_write(vte, "\x1e", 1); - return; + return true; case XK_7: case XK_slash: case XK_question: vte_write(vte, "\x1f", 1); - return; + return true; case XK_8: vte_write(vte, "\x7f", 1); - return; + return true; } } switch (ev->keysym) { case XK_BackSpace: vte_write(vte, "\x08", 1); - return; + return true; case XK_Tab: case XK_KP_Tab: vte_write(vte, "\x09", 1); - return; + return true; case XK_Linefeed: vte_write(vte, "\x0a", 1); - return; + return true; case XK_Clear: vte_write(vte, "\x0b", 1); - return; + return true; case XK_Pause: vte_write(vte, "\x13", 1); - return; + return true; case XK_Scroll_Lock: /* TODO: do we need scroll lock impl.? */ vte_write(vte, "\x14", 1); - return; + return true; case XK_Sys_Req: vte_write(vte, "\x15", 1); - return; + return true; case XK_Escape: vte_write(vte, "\x1b", 1); - return; + return true; case XK_KP_Enter: if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE) { vte_write(vte, "\eOM", 3); - return; + return true; } /* fallthrough */ case XK_Return: @@ -2276,236 +2276,236 @@ void kmscon_vte_handle_keyboard(struct kmscon_vte *vte, vte_write(vte, "\x0d\x0a", 2); else vte_write(vte, "\x0d", 1); - return; + return true; case XK_Find: vte_write(vte, "\e[1~", 4); - return; + return true; case XK_Insert: vte_write(vte, "\e[2~", 4); - return; + return true; case XK_Delete: vte_write(vte, "\e[3~", 4); - return; + return true; case XK_Select: vte_write(vte, "\e[4~", 4); - return; + return true; case XK_Page_Up: vte_write(vte, "\e[5~", 4); - return; + return true; case XK_Page_Down: vte_write(vte, "\e[6~", 4); - return; + return true; case XK_Up: if (vte->flags & FLAG_CURSOR_KEY_MODE) vte_write(vte, "\eOA", 3); else vte_write(vte, "\e[A", 3); - return; + return true; case XK_Down: if (vte->flags & FLAG_CURSOR_KEY_MODE) vte_write(vte, "\eOB", 3); else vte_write(vte, "\e[B", 3); - return; + return true; case XK_Right: if (vte->flags & FLAG_CURSOR_KEY_MODE) vte_write(vte, "\eOC", 3); else vte_write(vte, "\e[C", 3); - return; + return true; case XK_Left: if (vte->flags & FLAG_CURSOR_KEY_MODE) vte_write(vte, "\eOD", 3); else vte_write(vte, "\e[D", 3); - return; + return true; case XK_KP_Insert: case XK_KP_0: if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE) vte_write(vte, "\eOp", 3); else vte_write(vte, "0", 1); - return; + return true; case XK_KP_End: case XK_KP_1: if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE) vte_write(vte, "\eOq", 3); else vte_write(vte, "1", 1); - return; + return true; case XK_KP_Down: case XK_KP_2: if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE) vte_write(vte, "\eOr", 3); else vte_write(vte, "2", 1); - return; + return true; case XK_KP_Page_Down: case XK_KP_3: if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE) vte_write(vte, "\eOs", 3); else vte_write(vte, "3", 1); - return; + return true; case XK_KP_Left: case XK_KP_4: if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE) vte_write(vte, "\eOt", 3); else vte_write(vte, "4", 1); - return; + return true; case XK_KP_Begin: case XK_KP_5: if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE) vte_write(vte, "\eOu", 3); else vte_write(vte, "5", 1); - return; + return true; case XK_KP_Right: case XK_KP_6: if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE) vte_write(vte, "\eOv", 3); else vte_write(vte, "6", 1); - return; + return true; case XK_KP_Home: case XK_KP_7: if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE) vte_write(vte, "\eOw", 3); else vte_write(vte, "7", 1); - return; + return true; case XK_KP_Up: case XK_KP_8: if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE) vte_write(vte, "\eOx", 3); else vte_write(vte, "8", 1); - return; + return true; case XK_KP_Page_Up: case XK_KP_9: if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE) vte_write(vte, "\eOy", 3); else vte_write(vte, "9", 1); - return; + return true; case XK_KP_Subtract: if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE) vte_write(vte, "\eOm", 3); else vte_write(vte, "-", 1); - return; + return true; case XK_KP_Separator: if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE) vte_write(vte, "\eOl", 3); else vte_write(vte, ",", 1); - return; + return true; case XK_KP_Delete: case XK_KP_Decimal: if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE) vte_write(vte, "\eOn", 3); else vte_write(vte, ".", 1); - return; + return true; case XK_KP_Equal: case XK_KP_Divide: if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE) vte_write(vte, "\eOj", 3); else vte_write(vte, "/", 1); - return; + return true; case XK_KP_Multiply: if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE) vte_write(vte, "\eOo", 3); else vte_write(vte, "*", 1); - return; + return true; case XK_KP_Add: if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE) vte_write(vte, "\eOk", 3); else vte_write(vte, "+", 1); - return; + return true; case XK_F1: case XK_KP_F1: vte_write(vte, "\eOP", 3); - return; + return true; case XK_F2: case XK_KP_F2: vte_write(vte, "\eOQ", 3); - return; + return true; case XK_F3: case XK_KP_F3: vte_write(vte, "\eOR", 3); - return; + return true; case XK_F4: case XK_KP_F4: vte_write(vte, "\eOS", 3); - return; + return true; case XK_KP_Space: vte_write(vte, " ", 1); - return; + return true; case XK_Home: if (vte->flags & FLAG_CURSOR_KEY_MODE) vte_write(vte, "\eOH", 3); else vte_write(vte, "\e[H", 3); - return; + return true; case XK_End: if (vte->flags & FLAG_CURSOR_KEY_MODE) vte_write(vte, "\eOF", 3); else vte_write(vte, "\e[F", 3); - return; + return true; case XK_F5: vte_write(vte, "\e[15~", 5); - return; + return true; case XK_F6: vte_write(vte, "\e[17~", 5); - return; + return true; case XK_F7: vte_write(vte, "\e[18~", 5); - return; + return true; case XK_F8: vte_write(vte, "\e[19~", 5); - return; + return true; case XK_F9: vte_write(vte, "\e[20~", 5); - return; + return true; case XK_F10: vte_write(vte, "\e[21~", 5); - return; + return true; case XK_F11: vte_write(vte, "\e[23~", 5); - return; + return true; case XK_F12: vte_write(vte, "\e[24~", 5); - return; + return true; case XK_F13: vte_write(vte, "\e[25~", 5); - return; + return true; case XK_F14: vte_write(vte, "\e[26~", 5); - return; + return true; case XK_F15: vte_write(vte, "\e[28~", 5); - return; + return true; case XK_F16: vte_write(vte, "\e[29~", 5); - return; + return true; case XK_F17: vte_write(vte, "\e[31~", 5); - return; + return true; case XK_F18: vte_write(vte, "\e[32~", 5); - return; + return true; case XK_F19: vte_write(vte, "\e[33~", 5); - return; + return true; case XK_F20: vte_write(vte, "\e[34~", 5); - return; + return true; } if (ev->unicode != UTERM_INPUT_INVALID) { @@ -2529,6 +2529,8 @@ void kmscon_vte_handle_keyboard(struct kmscon_vte *vte, vte_write_raw(vte, u8, len); kmscon_symbol_free_u8(u8); } - return; + return true; } + + return false; } diff --git a/src/vte.h b/src/vte.h index 2cd830c..8f3c87d 100644 --- a/src/vte.h +++ b/src/vte.h @@ -67,7 +67,7 @@ void kmscon_vte_unref(struct kmscon_vte *vte); void kmscon_vte_reset(struct kmscon_vte *vte); void kmscon_vte_input(struct kmscon_vte *vte, const char *u8, size_t len); -void kmscon_vte_handle_keyboard(struct kmscon_vte *vte, +bool kmscon_vte_handle_keyboard(struct kmscon_vte *vte, const struct uterm_input_event *ev); #endif /* KMSCON_VTE_H */