diff options
-rw-r--r-- | usr.bin/window/main.c | 2 | ||||
-rw-r--r-- | usr.bin/window/wwinit.c | 33 |
2 files changed, 31 insertions, 4 deletions
diff --git a/usr.bin/window/main.c b/usr.bin/window/main.c index 4b95868..3613ca1 100644 --- a/usr.bin/window/main.c +++ b/usr.bin/window/main.c @@ -46,6 +46,7 @@ static char sccsid[] = "@(#)main.c 8.2 (Berkeley) 4/2/94"; #include "defs.h" #include <paths.h> +#include <locale.h> #include <stdio.h> #include "string.h" #include "char.h" @@ -120,6 +121,7 @@ char **argv; default_nline = NLINE; default_smooth = 1; (void) gettimeofday(&starttime, (struct timezone *)0); + (void) setlocale(LC_CTYPE, ""); if (wwinit() < 0) { (void) fprintf(stderr, "%s.\n", wwerror()); exit(1); 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; |