void
-screen_handlekey(XKeyEvent *k, int ptyfd)
+screen_handlekey(state_t *st, XKeyEvent *k, int ptyfd)
{
KeySym keysym = 0;
unsigned char c = 0;
uint32_t uc = 0;
const char *send = NULL;
- bool swapped = false;
+ bool swapped = false, app = st->application_mode;
if (cfg_cursorinputreset)
send = kv(k->state,
"\033[3~", "\033[3;2~", "\033[3;5~", "\033[3;6~");
break;
- case XK_Home:
+ case XK_Begin:
+ case XK_Home: /* FALLTHROUGH */
send = kv(k->state,
- "\033OH", "\033[1;2H", "\033[1;5H", "\033[1;6H");
+ (app ? "\033OH" : "\033[H"), "\033[1;2H", "\033[1;5H",
+ "\033[1;6H");
break;
case XK_Left:
send = kv(k->state,
- "\033OD", "\033[1;2D", "\033[1;5D", "\033[1;6D");
+ (app ? "\033OD" : "\033[D"), "\033[1;2D", "\033[1;5D",
+ "\033[1;6D");
break;
case XK_Up:
send = kv(k->state,
- "\033OA", "\033[1;2A", "\033[1;5A", "\033[1;6A");
+ (app ? "\033OA" : "\033[A"), "\033[1;2A", "\033[1;5A",
+ "\033[1;6A");
break;
case XK_Right:
send = kv(k->state,
- "\033OC", "\033[1;2C", "\033[1;5C", "\033[1;6C");
+ (app ? "\033OC" : "\033[C"), "\033[1;2C", "\033[1;5C",
+ "\033[1;6C");
break;
case XK_Down:
send = kv(k->state,
- "\033OB", "\033[1;2B", "\033[1;5B", "\033[1;6B");
+ (app ? "\033OB" : "\033[B"), "\033[1;2B", "\033[1;5B",
+ "\033[1;6B");
break;
case XK_Page_Up:
send = kv(k->state,
break;
case XK_End:
send = kv(k->state,
- "\033OF", "\033[1;2F", "\033[1;5F", "\033[1;6F");
- break;
- case XK_Begin:
- send = kv(k->state,
- "\033[H", "\033[1;2H", "\033[1;5H", "\033[1;6H");
+ (app ? "\033OF" : "\033[F"), "\033[1;2F", "\033[1;5F",
+ "\033[1;6F");
break;
case XK_Tab:
send = kv(k->state,
break;
case XK_KP_Up:
send = kv(k->state,
- "\033OA", "8", "\033[1;5A", "8");
+ (app ? "\033OA" : "\033[A"), "8", "\033[1;5A", "8");
break;
case XK_KP_Right:
send = kv(k->state,
- "\033OC", "6", "\033[1;5C", "6");
+ (app ? "\033OC" : "\033[C"), "6", "\033[1;5C", "6");
break;
case XK_KP_Down:
send = kv(k->state,
- "\033OB", "2", "\033[1;5B", "2");
+ (app ? "\033OB" : "\033[B"), "2", "\033[1;5B", "2");
break;
case XK_KP_Page_Up:
send = kv(k->state,
break;
case XK_KP_End:
send = kv(k->state,
- "\033OF", "1", "\033[1;5F", "1");
+ (app ? "\033OF" : "\033[F"), "1", "\033[1;5F", "1");
break;
case XK_KP_Begin:
case XK_KP_Home: /* FALLTHROUGH */
send = kv(k->state,
- "\033[H", "7", "\033[1;5H", "7");
+ (app ? "\033OH" : "\033[H"), "7", "\033[1;5H", "7");
break;
}
if (send != NULL)
st->cursor_bright = cfg_cursorbright;
st->quotedpaste = false;
st->reverse_video = false;
+ st->application_mode = false;
st->reverse_video_timer = 0;
st->monocolor = cfg_color;
st->mode = 0;
}
for (i = 0; i <= state->curparam; i++) {
switch (state->csiparam[i]) {
+ case 1: /* Applic. mode curs. keys (DECCKM) */
+ st->application_mode = true;
+ break;
case 4: /* Smooth (slow) scroll (DECSCLM) */
st->scroll_slow = true;
break;
}
for (i = 0; i <= state->curparam; i++) {
switch (state->csiparam[i]) {
+ case 1: /* Applic. mode curs. keys (DECCKM) */
+ st->application_mode = false;
+ break;
case 4: /* Fast/jump scroll (DECSCLM) */
st->scroll_slow = false;
break;