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:
David Herrmann 2012-08-14 17:01:55 +02:00
parent 4f7188337e
commit 681c9acb4c
2 changed files with 97 additions and 95 deletions

190
src/vte.c
View File

@ -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;
}

View File

@ -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 */