diff options
Diffstat (limited to 'usr.bin/window/wwinit.c')
-rw-r--r-- | usr.bin/window/wwinit.c | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/usr.bin/window/wwinit.c b/usr.bin/window/wwinit.c index 05cc0b0..7d742b7 100644 --- a/usr.bin/window/wwinit.c +++ b/usr.bin/window/wwinit.c @@ -280,10 +280,10 @@ wwinit() if (tt.tt_delchar) wwaddcap1(WWT_DC, &kp); wwaddcap("kb", &kp); - wwaddcap("ku", &kp); - wwaddcap("kd", &kp); - wwaddcap("kl", &kp); - wwaddcap("kr", &kp); + wwaddcap2("ku", &kp); + wwaddcap2("kd", &kp); + wwaddcap2("kl", &kp); + wwaddcap2("kr", &kp); wwaddcap("kh", &kp); if ((j = tgetnum("kn")) >= 0) { char cap[32]; @@ -361,6 +361,31 @@ wwaddcap1(cap, kp) (*kp)--; } +wwaddcap2(cap, kp) + register char *cap; + register char **kp; +{ + char tbuf[512]; + char *tp = tbuf; + register char *str, *p; + + if ((str = tgetstr(cap, &tp)) != 0) { + /* we don't support vt100's application key mode, remap */ + if (str[0] == ctrl('[') && str[1] == 'O') + str[1] = '['; + while (*(*kp)++ = *cap++) + ; + (*kp)[-1] = '='; + while (*str) { + for (p = unctrl(*str++); *(*kp)++ = *p++;) + ; + (*kp)--; + } + *(*kp)++ = ':'; + **kp = 0; + } +} + wwstart() { register i; |