tsm_vte: bind non-numlock'ed keypad keys correctly
When a user presses on the 4 key on the keypad with NumLock off, the expected behavior is to move left. This commit fixes all of the main keypad keys to act like their counterparts (though KP_Begin is not bound to anything). This is also what xterm does, as far as I can tell: http://anonscm.debian.org/gitweb/?p=pkg-xorg/app/xterm.git;a=blob;f=input.c;h=f049078ed672c1da5adc169e85dc458b0fffc100;hb=HEAD#l984 Signed-off-by: Ran Benita <ran234@gmail.com> Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This commit is contained in:
parent
b5c05dd5f1
commit
c8f79aa53d
@ -2436,30 +2436,36 @@ bool tsm_vte_handle_keyboard(struct tsm_vte *vte, uint32_t keysym,
|
||||
vte_write(vte, "\e[4~", 4);
|
||||
return true;
|
||||
case XKB_KEY_Page_Up:
|
||||
case XKB_KEY_KP_Page_Up:
|
||||
vte_write(vte, "\e[5~", 4);
|
||||
return true;
|
||||
case XKB_KEY_KP_Page_Down:
|
||||
case XKB_KEY_Page_Down:
|
||||
vte_write(vte, "\e[6~", 4);
|
||||
return true;
|
||||
case XKB_KEY_Up:
|
||||
case XKB_KEY_KP_Up:
|
||||
if (vte->flags & FLAG_CURSOR_KEY_MODE)
|
||||
vte_write(vte, "\eOA", 3);
|
||||
else
|
||||
vte_write(vte, "\e[A", 3);
|
||||
return true;
|
||||
case XKB_KEY_Down:
|
||||
case XKB_KEY_KP_Down:
|
||||
if (vte->flags & FLAG_CURSOR_KEY_MODE)
|
||||
vte_write(vte, "\eOB", 3);
|
||||
else
|
||||
vte_write(vte, "\e[B", 3);
|
||||
return true;
|
||||
case XKB_KEY_Right:
|
||||
case XKB_KEY_KP_Right:
|
||||
if (vte->flags & FLAG_CURSOR_KEY_MODE)
|
||||
vte_write(vte, "\eOC", 3);
|
||||
else
|
||||
vte_write(vte, "\e[C", 3);
|
||||
return true;
|
||||
case XKB_KEY_Left:
|
||||
case XKB_KEY_KP_Left:
|
||||
if (vte->flags & FLAG_CURSOR_KEY_MODE)
|
||||
vte_write(vte, "\eOD", 3);
|
||||
else
|
||||
@ -2472,63 +2478,54 @@ bool tsm_vte_handle_keyboard(struct tsm_vte *vte, uint32_t keysym,
|
||||
else
|
||||
vte_write(vte, "0", 1);
|
||||
return true;
|
||||
case XKB_KEY_KP_End:
|
||||
case XKB_KEY_KP_1:
|
||||
if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE)
|
||||
vte_write(vte, "\eOq", 3);
|
||||
else
|
||||
vte_write(vte, "1", 1);
|
||||
return true;
|
||||
case XKB_KEY_KP_Down:
|
||||
case XKB_KEY_KP_2:
|
||||
if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE)
|
||||
vte_write(vte, "\eOr", 3);
|
||||
else
|
||||
vte_write(vte, "2", 1);
|
||||
return true;
|
||||
case XKB_KEY_KP_Page_Down:
|
||||
case XKB_KEY_KP_3:
|
||||
if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE)
|
||||
vte_write(vte, "\eOs", 3);
|
||||
else
|
||||
vte_write(vte, "3", 1);
|
||||
return true;
|
||||
case XKB_KEY_KP_Left:
|
||||
case XKB_KEY_KP_4:
|
||||
if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE)
|
||||
vte_write(vte, "\eOt", 3);
|
||||
else
|
||||
vte_write(vte, "4", 1);
|
||||
return true;
|
||||
case XKB_KEY_KP_Begin:
|
||||
case XKB_KEY_KP_5:
|
||||
if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE)
|
||||
vte_write(vte, "\eOu", 3);
|
||||
else
|
||||
vte_write(vte, "5", 1);
|
||||
return true;
|
||||
case XKB_KEY_KP_Right:
|
||||
case XKB_KEY_KP_6:
|
||||
if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE)
|
||||
vte_write(vte, "\eOv", 3);
|
||||
else
|
||||
vte_write(vte, "6", 1);
|
||||
return true;
|
||||
case XKB_KEY_KP_Home:
|
||||
case XKB_KEY_KP_7:
|
||||
if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE)
|
||||
vte_write(vte, "\eOw", 3);
|
||||
else
|
||||
vte_write(vte, "7", 1);
|
||||
return true;
|
||||
case XKB_KEY_KP_Up:
|
||||
case XKB_KEY_KP_8:
|
||||
if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE)
|
||||
vte_write(vte, "\eOx", 3);
|
||||
else
|
||||
vte_write(vte, "8", 1);
|
||||
return true;
|
||||
case XKB_KEY_KP_Page_Up:
|
||||
case XKB_KEY_KP_9:
|
||||
if (vte->flags & FLAG_KEYPAD_APPLICATION_MODE)
|
||||
vte_write(vte, "\eOy", 3);
|
||||
@ -2574,12 +2571,14 @@ bool tsm_vte_handle_keyboard(struct tsm_vte *vte, uint32_t keysym,
|
||||
vte_write(vte, "+", 1);
|
||||
return true;
|
||||
case XKB_KEY_Home:
|
||||
case XKB_KEY_KP_Home:
|
||||
if (vte->flags & FLAG_CURSOR_KEY_MODE)
|
||||
vte_write(vte, "\eOH", 3);
|
||||
else
|
||||
vte_write(vte, "\e[H", 3);
|
||||
return true;
|
||||
case XKB_KEY_End:
|
||||
case XKB_KEY_KP_End:
|
||||
if (vte->flags & FLAG_CURSOR_KEY_MODE)
|
||||
vte_write(vte, "\eOF", 3);
|
||||
else
|
||||
|
Loading…
x
Reference in New Issue
Block a user