diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2017-04-22 20:16:07 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2017-04-22 20:16:07 +0200 |
commit | f2b7f24e4e14099251dd0ed8e7e13d7ca466b0cf (patch) | |
tree | 6930eb16d09e714fe20d550bef270dedfe965bfd /sys/src/cmd/vt/main.c | |
parent | b58584b0578617f6cabcae6e51c6e3e0dc51fec1 (diff) |
vt: handle application/normal mode (really fixes cursor keys)
Diffstat (limited to 'sys/src/cmd/vt/main.c')
-rw-r--r-- | sys/src/cmd/vt/main.c | 41 |
1 files changed, 19 insertions, 22 deletions
diff --git a/sys/src/cmd/vt/main.c b/sys/src/cmd/vt/main.c index 7cecb4b49..8006c8184 100644 --- a/sys/src/cmd/vt/main.c +++ b/sys/src/cmd/vt/main.c @@ -110,7 +110,7 @@ char sendbuf[BSIZE]; /* hope you can't type ahead more than BSIZE chars */ char *sendbufp = sendbuf; char *term; -struct funckey *fk; +struct funckey *fk, *appfk; /* functions */ void initialize(int, char **); @@ -212,19 +212,17 @@ initialize(int argc, char **argv) char *fontname, *p; fontname = nil; + fk = ansifk; term = "vt100"; - fk = vt100fk; blkbg = 0; rflag = 0; attr = defattr; ARGBEGIN{ case '2': term = "vt220"; - fk = vt220fk; break; case 'a': term = "ansi"; - fk = ansifk; break; case 'b': blkbg = 1; /* e.g., for linux colored output */ @@ -521,17 +519,26 @@ canon(char *ep, Rune c) return(OTHER); } -void -sendfk(char *name) +char* +lookfk(struct funckey *fk, char *name) { int i; - static int fd; - for(i=0; fk[i].name; i++) - if(strcmp(name, fk[i].name)==0){ - sendnchars(strlen(fk[i].sequence), fk[i].sequence); - return; - } + for(i=0; fk[i].name; i++){ + if(strcmp(name, fk[i].name)==0) + return fk[i].sequence; + } + return nil; +} + +void +sendfk(char *name) +{ + char *s = lookfk(appfk != nil ? appfk : fk, name); + if(s == nil && appfk != nil) + s = lookfk(fk, name); + if(s != nil) + sendnchars(strlen(s), s); } int @@ -1111,16 +1118,6 @@ escapedump(int fd,uchar *str,int len) } void -funckey(int key) -{ - if(key >= NKEYS) - return; - if(fk[key].name == 0) - return; - sendnchars(strlen(fk[key].sequence), fk[key].sequence); -} - -void drawstring(Rune *str, int n) { memmove(onscreenr(x, y), str, n*sizeof(Rune)); |