summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pttbbs/mbbsd/screen.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/pttbbs/mbbsd/screen.c b/pttbbs/mbbsd/screen.c
index 711103fc..98352e0d 100644
--- a/pttbbs/mbbsd/screen.c
+++ b/pttbbs/mbbsd/screen.c
@@ -543,8 +543,13 @@ outc(unsigned char c)
slp->len = cur_col + 1;
}
- // always invalid escapes
- if (c == ESC_CHR || slp->data[cur_col] != c) {
+ // Escape processing is a mess here. If we don't always invalid ESC,
+ // attributes will be not updated if some ouptut generates ESC on same
+ // position; if we do that, cross-line outputs also corrupted, or more:
+ // #1FX6qLcO (PttCurrent). This has been turned on/off several times - and
+ // I still don't know how to make a perfect workaround.
+ // Well, we probably still need to call SOLVE_ANSI_CACHE everywhere...
+ if (slp->data[cur_col] != c) {
slp->data[cur_col] = c;
if (!(slp->mode & MODIFIED))
slp->smod = slp->emod = cur_col;