summaryrefslogtreecommitdiff
path: root/sys/src/cmd/vt
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2017-04-22 21:07:53 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2017-04-22 21:07:53 +0200
commitc029a0c9130b7a9b5a9c3883e813dd8d8a0a770d (patch)
tree8059b7c09d21bdbb82a7208b56055a41c681df20 /sys/src/cmd/vt
parentf2b7f24e4e14099251dd0ed8e7e13d7ca466b0cf (diff)
vt: handle insert/delete/home/end keys for vt220/xterm
Diffstat (limited to 'sys/src/cmd/vt')
-rw-r--r--sys/src/cmd/vt/cons.h2
-rw-r--r--sys/src/cmd/vt/main.c43
-rw-r--r--sys/src/cmd/vt/vt.c10
3 files changed, 44 insertions, 11 deletions
diff --git a/sys/src/cmd/vt/cons.h b/sys/src/cmd/vt/cons.h
index 8b521af10..b4bafdb68 100644
--- a/sys/src/cmd/vt/cons.h
+++ b/sys/src/cmd/vt/cons.h
@@ -40,7 +40,7 @@ struct funckey {
char *sequence;
};
extern struct funckey *fk, *appfk;
-extern struct funckey ansifk[], ansiappfk[], xtermfk[];
+extern struct funckey ansifk[], ansiappfk[], vt220fk[];
extern int x, y, xmax, ymax, olines;
extern int peekc, attribute;
diff --git a/sys/src/cmd/vt/main.c b/sys/src/cmd/vt/main.c
index 8006c8184..467356069 100644
--- a/sys/src/cmd/vt/main.c
+++ b/sys/src/cmd/vt/main.c
@@ -219,6 +219,7 @@ initialize(int argc, char **argv)
attr = defattr;
ARGBEGIN{
case '2':
+ fk = vt220fk;
term = "vt220";
break;
case 'a':
@@ -240,7 +241,7 @@ initialize(int argc, char **argv)
sysfatal("could not create log file: %s: %r", p);
break;
case 'x':
- fk = xtermfk;
+ fk = vt220fk;
term = "xterm";
break;
case 'r':
@@ -531,14 +532,17 @@ lookfk(struct funckey *fk, char *name)
return nil;
}
-void
+int
sendfk(char *name)
{
char *s = lookfk(appfk != nil ? appfk : fk, name);
if(s == nil && appfk != nil)
s = lookfk(fk, name);
- if(s != nil)
+ if(s != nil){
sendnchars(strlen(s), s);
+ return 1;
+ }
+ return 0;
}
int
@@ -570,6 +574,30 @@ waitchar(void)
resize_flag = 1;
if(cs->raw) {
switch(kbdchar){
+ case Kins:
+ if(!sendfk("insert"))
+ goto Send;
+ break;
+ case Kdel:
+ if(!sendfk("delete"))
+ goto Send;
+ break;
+ case Khome:
+ if(!sendfk("home"))
+ goto Send;
+ break;
+ case Kend:
+ if(!sendfk("end"))
+ goto Send;
+ break;
+
+ case Kpgup:
+ sendfk("page up");
+ break;
+ case Kpgdown:
+ sendfk("page down");
+ break;
+
case Kup:
sendfk("up key");
break;
@@ -582,12 +610,7 @@ waitchar(void)
case Kright:
sendfk("right key");
break;
- case Kpgup:
- sendfk("page up");
- break;
- case Kpgdown:
- sendfk("page down");
- break;
+
case KF|1:
sendfk("F1");
break;
@@ -624,6 +647,7 @@ waitchar(void)
case KF|12:
sendfk("F12");
break;
+
case '\n':
echobuf[0] = '\r';
sendnchars(1, echobuf);
@@ -633,6 +657,7 @@ waitchar(void)
sendnchars(1, echobuf);
break;
default:
+ Send:
sendnchars(runetochar(echobuf, &kbdchar), echobuf);
break;
}
diff --git a/sys/src/cmd/vt/vt.c b/sys/src/cmd/vt/vt.c
index 457cbc94c..9a0c0fc48 100644
--- a/sys/src/cmd/vt/vt.c
+++ b/sys/src/cmd/vt/vt.c
@@ -57,16 +57,23 @@ struct funckey ansiappfk[] = {
{ "down key", "\033OB", },
{ "left key", "\033OD", },
{ "right key", "\033OC", },
+
{ 0 },
};
-struct funckey xtermfk[] = {
+struct funckey vt220fk[] = {
+ { "insert", "\033[2~", },
+ { "delete", "\033[3~", },
+ { "home", "\033[1~", },
+ { "end", "\033[4~", },
{ "page up", "\033[5~", },
{ "page down", "\033[6~", },
+
{ "up key", "\033[A", },
{ "down key", "\033[B", },
{ "left key", "\033[D", },
{ "right key", "\033[C", },
+
{ "F1", "\033OP", },
{ "F2", "\033OQ", },
{ "F3", "\033OR", },
@@ -79,6 +86,7 @@ struct funckey xtermfk[] = {
{ "F10", "\033[21~", },
{ "F11", "\033[23~", },
{ "F12", "\033[24~", },
+
{ 0 },
};