ref: 937b2afc145b074e18c73d3615780c449813046d
parent: df10e898b9db49472ef47d9679f777a310fe0517
author: Ori Bernstein <ori@eigenstate.org>
date: Thu Sep 25 22:29:41 EDT 2025
vt: don't reapply side effects when replaying terminal state
--- a/sys/src/cmd/vt/cons.h
+++ b/sys/src/cmd/vt/cons.h
@@ -63,6 +63,7 @@
extern Point pos(Point);
extern void funckey(int);
extern void drawstring(Rune*, int);
+extern int rewound(void);
extern int yscrmin, yscrmax;
extern int attr;
--- a/sys/src/cmd/vt/main.c
+++ b/sys/src/cmd/vt/main.c
@@ -652,6 +652,12 @@
}
int
+rewound(void)
+{+ return backp != nil;
+}
+
+int
input(void)
{static char echobuf[4*BSIZE];
--- a/sys/src/cmd/vt/vt.c
+++ b/sys/src/cmd/vt/vt.c
@@ -200,7 +200,6 @@
buf[0] = get_next_char();
buf[1] = '\0';
switch(buf[0]) {-
case '\000':
case '\001':
case '\002':
@@ -361,7 +360,8 @@
*/
case 'Z':
Ident:
- sendnchars(7, "\033[?1;2c"); /* VT100 with AVO option */
+ if(!rewound() && operand[0] == 0)
+ sendnchars(7, "\033[?1;2c"); /* VT100 with AVO option */
break;
/*
@@ -436,6 +436,8 @@
* c - same as ESC Z: what are you?
*/
case 'c':
+ if(operand[0] != 0)
+ break;
goto Ident;
/*
@@ -473,7 +475,8 @@
case 2: /* set VT52 mode (not implemented) */
break;
case 3: /* set 80 columns */
- setdim(-1, 80);
+ if(!rewound())
+ setdim(-1, 80);
break;
case 4: /* set jump scrolling */
break;
@@ -530,7 +533,8 @@
case 2: /* set ANSI */
break;
case 3: /* set 132 columns */
- setdim(-1, 132);
+ if(!rewound())
+ setdim(-1, 132);
break;
case 4: /* set smooth scrolling */
break;
@@ -569,6 +573,8 @@
* n - request various reports
*/
case 'n':
+ if(rewound())
+ break;
switch(operand[0]){case 5: /* status */
sendnchars(4, "\033[0n"); /* terminal ok */
@@ -612,7 +618,8 @@
* x - report terminal parameters
*/
case 'x':
- sendnchars(20, "\033[3;1;1;120;120;1;0x");
+ if(!rewound())
+ sendnchars(20, "\033[3;1;1;120;120;1;0x");
break;
/*
--
⑨