ref: 2d04ed6e7cc7f11cf14e14c9ef84fbd2d24783cb
parent: 564156e9dc189d02a9ab2a3a4327e9046ebfbbaa
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Sat Apr 22 17:07:53 EDT 2017
vt: handle insert/delete/home/end keys for vt220/xterm
--- a/sys/src/cmd/vt/cons.h
+++ b/sys/src/cmd/vt/cons.h
@@ -40,7 +40,7 @@
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;
--- a/sys/src/cmd/vt/main.c
+++ b/sys/src/cmd/vt/main.c
@@ -219,6 +219,7 @@
attr = defattr;
ARGBEGIN{case '2':
+ fk = vt220fk;
term = "vt220";
break;
case 'a':
@@ -240,7 +241,7 @@
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 @@
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 @@
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 @@
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 @@
case KF|12:
sendfk("F12");break;
+
case '\n':
echobuf[0] = '\r';
sendnchars(1, echobuf);
@@ -633,6 +657,7 @@
sendnchars(1, echobuf);
break;
default:
+ Send:
sendnchars(runetochar(echobuf, &kbdchar), echobuf);
break;
}
--- a/sys/src/cmd/vt/vt.c
+++ b/sys/src/cmd/vt/vt.c
@@ -57,16 +57,23 @@
{ "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 @@
{ "F10", "\033[21~", }, { "F11", "\033[23~", }, { "F12", "\033[24~", },+
{ 0 },};
--
⑨