vt: handle insert/delete/home/end keys for vt220/xterm
This commit is contained in:
parent
f2b7f24e4e
commit
c029a0c913
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 },
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue