summaryrefslogtreecommitdiff
path: root/sys/src/cmd/vt/main.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2017-04-22 20:16:07 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2017-04-22 20:16:07 +0200
commitf2b7f24e4e14099251dd0ed8e7e13d7ca466b0cf (patch)
tree6930eb16d09e714fe20d550bef270dedfe965bfd /sys/src/cmd/vt/main.c
parentb58584b0578617f6cabcae6e51c6e3e0dc51fec1 (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.c41
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));