vt: fix xterm cursor keys
This commit is contained in:
parent
c5b2927250
commit
5d7a77cf57
|
@ -54,6 +54,7 @@ extern void newline(void);
|
||||||
extern int get_next_char(void);
|
extern int get_next_char(void);
|
||||||
extern void ringbell(void);
|
extern void ringbell(void);
|
||||||
extern int number(Rune *, int *);
|
extern int number(Rune *, int *);
|
||||||
|
extern void shift(int,int,int,int);
|
||||||
extern void scroll(int,int,int,int);
|
extern void scroll(int,int,int,int);
|
||||||
extern void backup(int);
|
extern void backup(int);
|
||||||
extern void sendnchars(int, char *);
|
extern void sendnchars(int, char *);
|
||||||
|
|
|
@ -214,7 +214,7 @@ initialize(int argc, char **argv)
|
||||||
fontname = nil;
|
fontname = nil;
|
||||||
term = "vt100";
|
term = "vt100";
|
||||||
fk = vt100fk;
|
fk = vt100fk;
|
||||||
blkbg = nocolor = 0;
|
blkbg = 0;
|
||||||
rflag = 0;
|
rflag = 0;
|
||||||
attr = defattr;
|
attr = defattr;
|
||||||
ARGBEGIN{
|
ARGBEGIN{
|
||||||
|
@ -315,8 +315,9 @@ drawscreen(void)
|
||||||
uchar c, *ap, *cp;
|
uchar c, *ap, *cp;
|
||||||
Rune *rp;
|
Rune *rp;
|
||||||
|
|
||||||
/* draw background */
|
|
||||||
draw(screen, screen->r, bgcolor, nil, ZP);
|
draw(screen, screen->r, bgcolor, nil, ZP);
|
||||||
|
|
||||||
|
/* draw background */
|
||||||
for(y = 0; y <= ymax; y++){
|
for(y = 0; y <= ymax; y++){
|
||||||
for(x = 0; x <= xmax; x += n){
|
for(x = 0; x <= xmax; x += n){
|
||||||
cp = onscreenc(x, y);
|
cp = onscreenc(x, y);
|
||||||
|
@ -982,6 +983,18 @@ pos(Point pt)
|
||||||
return pt;
|
return pt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
shift(int x1, int y, int x2, int w)
|
||||||
|
{
|
||||||
|
if(x1+w > xmax+1)
|
||||||
|
w = xmax+1 - x1;
|
||||||
|
if(x2+w > xmax+1)
|
||||||
|
w = xmax+1 - x2;
|
||||||
|
memmove(onscreenr(x1, y), onscreenr(x2, y), w*sizeof(Rune));
|
||||||
|
memmove(onscreena(x1, y), onscreena(x2, y), w);
|
||||||
|
memmove(onscreenc(x1, y), onscreenc(x2, y), w);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
scroll(int sy, int ly, int dy, int cy) /* source, limit, dest, which line to clear */
|
scroll(int sy, int ly, int dy, int cy) /* source, limit, dest, which line to clear */
|
||||||
{
|
{
|
||||||
|
|
|
@ -68,10 +68,10 @@ struct funckey vt220fk[NKEYS] = {
|
||||||
struct funckey xtermfk[NKEYS] = {
|
struct funckey xtermfk[NKEYS] = {
|
||||||
{ "page up", "\033[5~", },
|
{ "page up", "\033[5~", },
|
||||||
{ "page down", "\033[6~", },
|
{ "page down", "\033[6~", },
|
||||||
{ "up key", "\033[A", },
|
{ "up key", "\033OA", },
|
||||||
{ "down key", "\033[B", },
|
{ "down key", "\033OB", },
|
||||||
{ "left key", "\033[D", },
|
{ "left key", "\033OD", },
|
||||||
{ "right key", "\033[C", },
|
{ "right key", "\033OC", },
|
||||||
{ "F1", "\033OP", },
|
{ "F1", "\033OP", },
|
||||||
{ "F2", "\033OQ", },
|
{ "F2", "\033OQ", },
|
||||||
{ "F3", "\033OR", },
|
{ "F3", "\033OR", },
|
||||||
|
@ -326,7 +326,6 @@ emulate(void)
|
||||||
case 'Z':
|
case 'Z':
|
||||||
Ident:
|
Ident:
|
||||||
sendnchars(7, "\033[?1;2c"); /* VT100 with AVO option */
|
sendnchars(7, "\033[?1;2c"); /* VT100 with AVO option */
|
||||||
// sendnchars(5, "\033[?6c"); /* VT102 (insert/delete-char, etc.) */
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -734,7 +733,7 @@ emulate(void)
|
||||||
case 'P':
|
case 'P':
|
||||||
fixops(operand);
|
fixops(operand);
|
||||||
i = x + operand[0];
|
i = x + operand[0];
|
||||||
draw(screen, Rpt(pt(x, y), pt(xmax+1, y+1)), screen, nil, pt(i, y));
|
shift(x, y, i, xmax+1 - i);
|
||||||
clear(xmax-operand[0], y, xmax+1, y+1);
|
clear(xmax-operand[0], y, xmax+1, y+1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -744,7 +743,7 @@ emulate(void)
|
||||||
case '@':
|
case '@':
|
||||||
fixops(operand);
|
fixops(operand);
|
||||||
i = x + operand[0];
|
i = x + operand[0];
|
||||||
draw(screen, Rpt(pt(i, y), pt(xmax+1, y+1)), screen, nil, pt(x, y));
|
shift(i, y, x, xmax+1 - i);
|
||||||
clear(x, y, i, y+1);
|
clear(x, y, i, y+1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue