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;
|
char *sequence;
|
||||||
};
|
};
|
||||||
extern struct funckey *fk, *appfk;
|
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 x, y, xmax, ymax, olines;
|
||||||
extern int peekc, attribute;
|
extern int peekc, attribute;
|
||||||
|
|
|
@ -219,6 +219,7 @@ initialize(int argc, char **argv)
|
||||||
attr = defattr;
|
attr = defattr;
|
||||||
ARGBEGIN{
|
ARGBEGIN{
|
||||||
case '2':
|
case '2':
|
||||||
|
fk = vt220fk;
|
||||||
term = "vt220";
|
term = "vt220";
|
||||||
break;
|
break;
|
||||||
case 'a':
|
case 'a':
|
||||||
|
@ -240,7 +241,7 @@ initialize(int argc, char **argv)
|
||||||
sysfatal("could not create log file: %s: %r", p);
|
sysfatal("could not create log file: %s: %r", p);
|
||||||
break;
|
break;
|
||||||
case 'x':
|
case 'x':
|
||||||
fk = xtermfk;
|
fk = vt220fk;
|
||||||
term = "xterm";
|
term = "xterm";
|
||||||
break;
|
break;
|
||||||
case 'r':
|
case 'r':
|
||||||
|
@ -531,14 +532,17 @@ lookfk(struct funckey *fk, char *name)
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
int
|
||||||
sendfk(char *name)
|
sendfk(char *name)
|
||||||
{
|
{
|
||||||
char *s = lookfk(appfk != nil ? appfk : fk, name);
|
char *s = lookfk(appfk != nil ? appfk : fk, name);
|
||||||
if(s == nil && appfk != nil)
|
if(s == nil && appfk != nil)
|
||||||
s = lookfk(fk, name);
|
s = lookfk(fk, name);
|
||||||
if(s != nil)
|
if(s != nil){
|
||||||
sendnchars(strlen(s), s);
|
sendnchars(strlen(s), s);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -570,6 +574,30 @@ waitchar(void)
|
||||||
resize_flag = 1;
|
resize_flag = 1;
|
||||||
if(cs->raw) {
|
if(cs->raw) {
|
||||||
switch(kbdchar){
|
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:
|
case Kup:
|
||||||
sendfk("up key");
|
sendfk("up key");
|
||||||
break;
|
break;
|
||||||
|
@ -582,12 +610,7 @@ waitchar(void)
|
||||||
case Kright:
|
case Kright:
|
||||||
sendfk("right key");
|
sendfk("right key");
|
||||||
break;
|
break;
|
||||||
case Kpgup:
|
|
||||||
sendfk("page up");
|
|
||||||
break;
|
|
||||||
case Kpgdown:
|
|
||||||
sendfk("page down");
|
|
||||||
break;
|
|
||||||
case KF|1:
|
case KF|1:
|
||||||
sendfk("F1");
|
sendfk("F1");
|
||||||
break;
|
break;
|
||||||
|
@ -624,6 +647,7 @@ waitchar(void)
|
||||||
case KF|12:
|
case KF|12:
|
||||||
sendfk("F12");
|
sendfk("F12");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '\n':
|
case '\n':
|
||||||
echobuf[0] = '\r';
|
echobuf[0] = '\r';
|
||||||
sendnchars(1, echobuf);
|
sendnchars(1, echobuf);
|
||||||
|
@ -633,6 +657,7 @@ waitchar(void)
|
||||||
sendnchars(1, echobuf);
|
sendnchars(1, echobuf);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
Send:
|
||||||
sendnchars(runetochar(echobuf, &kbdchar), echobuf);
|
sendnchars(runetochar(echobuf, &kbdchar), echobuf);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,16 +57,23 @@ struct funckey ansiappfk[] = {
|
||||||
{ "down key", "\033OB", },
|
{ "down key", "\033OB", },
|
||||||
{ "left key", "\033OD", },
|
{ "left key", "\033OD", },
|
||||||
{ "right key", "\033OC", },
|
{ "right key", "\033OC", },
|
||||||
|
|
||||||
{ 0 },
|
{ 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
struct funckey xtermfk[] = {
|
struct funckey vt220fk[] = {
|
||||||
|
{ "insert", "\033[2~", },
|
||||||
|
{ "delete", "\033[3~", },
|
||||||
|
{ "home", "\033[1~", },
|
||||||
|
{ "end", "\033[4~", },
|
||||||
{ "page up", "\033[5~", },
|
{ "page up", "\033[5~", },
|
||||||
{ "page down", "\033[6~", },
|
{ "page down", "\033[6~", },
|
||||||
|
|
||||||
{ "up key", "\033[A", },
|
{ "up key", "\033[A", },
|
||||||
{ "down key", "\033[B", },
|
{ "down key", "\033[B", },
|
||||||
{ "left key", "\033[D", },
|
{ "left key", "\033[D", },
|
||||||
{ "right key", "\033[C", },
|
{ "right key", "\033[C", },
|
||||||
|
|
||||||
{ "F1", "\033OP", },
|
{ "F1", "\033OP", },
|
||||||
{ "F2", "\033OQ", },
|
{ "F2", "\033OQ", },
|
||||||
{ "F3", "\033OR", },
|
{ "F3", "\033OR", },
|
||||||
|
@ -79,6 +86,7 @@ struct funckey xtermfk[] = {
|
||||||
{ "F10", "\033[21~", },
|
{ "F10", "\033[21~", },
|
||||||
{ "F11", "\033[23~", },
|
{ "F11", "\033[23~", },
|
||||||
{ "F12", "\033[24~", },
|
{ "F12", "\033[24~", },
|
||||||
|
|
||||||
{ 0 },
|
{ 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue