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 <dh.herrmann@googlemail.com>
This commit is contained in:
parent
4f7188337e
commit
681c9acb4c
190
src/vte.c
190
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;
|
||||
}
|
||||
|
@ -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 */
|
||||
|
Loading…
x
Reference in New Issue
Block a user