Brian Mays <[EMAIL PROTECTED]> typed:
:This bug is present in both the "stable" and "developer's" versions of
:rxvt.
:------- Forwarded Message
:Date: Thu, 13 Jul 2000 00:51:33 +0200 (CEST)
:There is a bug with underlining.
:Here is an example (for bash):
:Please scroll to the lowest line and enter the following:
:> echo -e "\e[4mTEST" ; echo -ne "\e[24m" ; echo " "
:You will see that the last line is completely "underlined" with a few
:spaces at the left.
:Test it with xterm and you will not see such a behaviour.
:------- End of Forwarded Message
Here's a patch for 2.6.2:
diff -u -r1.76.2.14 -r1.76.2.15
--- src/screen.c 2000/05/08 23:58:14 1.76.2.14
+++ src/screen.c 2000/07/14 03:29:29 1.76.2.15
@@ -178,7 +178,7 @@
/* Fill a full line with blanks - make sure it is allocated first */
/* INTPROTO */
void
-blank_screen_mem(text_t ** tp, rend_t ** rp, int row, rend_t efs)
+blank_screen_mem(text_t ** tp, rend_t ** rp, int row, rend_t efs, char keepr)
{
int width = TermWin.ncol;
rend_t *er;
@@ -187,6 +187,8 @@
tp[row] = MALLOC(sizeof(text_t) * TermWin.ncol);
rp[row] = MALLOC(sizeof(rend_t) * TermWin.ncol);
}
+ if (!keepr)
+ efs &= ~(RS_Uline);
MEMSET(tp[row], ' ', width);
for (er = rp[row]; width--;)
*er++ = efs;
@@ -251,10 +253,10 @@
for (i = 0; i < TermWin.nrow; i++) {
j = i + TermWin.saveLines;
- blank_screen_mem(screen.text, screen.rend, j, DEFAULT_RSTYLE);
- blank_screen_mem(swap.text, swap.rend, i, DEFAULT_RSTYLE);
+ blank_screen_mem(screen.text, screen.rend, j, DEFAULT_RSTYLE, 1);
+ blank_screen_mem(swap.text, swap.rend, i, DEFAULT_RSTYLE, 1);
screen.tlen[j] = swap.tlen[i] = 0;
- blank_screen_mem(drawn_text, drawn_rend, i, DEFAULT_RSTYLE);
+ blank_screen_mem(drawn_text, drawn_rend, i, DEFAULT_RSTYLE, 1);
}
TermWin.nscrolled = 0; /* no saved lines */
screen.flags = swap.flags = Screen_DefaultFlags;
@@ -321,7 +323,7 @@
for (i = prev_total_rows; i < total_rows - k; i++) {
screen.tlen[i] = 0;
screen.text[i] = NULL;
- blank_screen_mem(screen.text, screen.rend, i, setrstyle);
+ blank_screen_mem(screen.text, screen.rend, i, setrstyle, 1);
}
for (i = total_rows - k; i < total_rows; i++) {
screen.tlen[i] = 0;
@@ -332,8 +334,8 @@
swap.tlen[i] = 0;
swap.text[i] = NULL;
drawn_text[i] = NULL;
- blank_screen_mem(swap.text, swap.rend, i, setrstyle);
- blank_screen_mem(drawn_text, drawn_rend, i, setrstyle);
+ blank_screen_mem(swap.text, swap.rend, i, setrstyle, 1);
+ blank_screen_mem(drawn_text, drawn_rend, i, setrstyle, 1);
}
if (k > 0) {
scroll_text(0, TermWin.nrow - 1, -k, 1);
@@ -342,7 +344,7 @@
for (i = TermWin.saveLines - TermWin.nscrolled; k--; i--)
if (screen.text[i] == NULL) {
blank_screen_mem(screen.text, screen.rend, i,
- setrstyle);
+ setrstyle, 1);
screen.tlen[i] = 0;
}
}
@@ -617,7 +619,8 @@
scroll_text(0, (TermWin.nrow - 1), TermWin.nrow, 0);
for (i = TermWin.saveLines; i < TermWin.nrow + TermWin.saveLines; i++)
if (screen.text[i] == NULL) {
- blank_screen_mem(screen.text, screen.rend, i, DEFAULT_RSTYLE);
+ blank_screen_mem(screen.text, screen.rend, i, DEFAULT_RSTYLE,
+ 0);
screen.tlen[i] = 0;
}
}
@@ -857,7 +860,7 @@
}
for (; row < erow; row++)
if (screen.text[row] == NULL)
- blank_screen_mem(screen.text, screen.rend, row, rstyle);
+ blank_screen_mem(screen.text, screen.rend, row, rstyle, 0);
}
/* ------------------------------------------------------------------------- */
@@ -889,7 +892,7 @@
/* _at least_ this many lines need to be scrolled */
scroll_text(screen.tscroll, screen.bscroll, nlines, 0);
for (i = nlines, j = screen.bscroll + TermWin.saveLines; i--; j--) {
- blank_screen_mem(screen.text, screen.rend, j, rstyle);
+ blank_screen_mem(screen.text, screen.rend, j, rstyle, 0);
screen.tlen[j] = 0;
}
screen.cur.row -= nlines;
@@ -933,7 +936,7 @@
scroll_text(screen.tscroll, screen.bscroll, 1, 0);
j = screen.bscroll + TermWin.saveLines;
blank_screen_mem(screen.text, screen.rend, j,
- rstyle);
+ rstyle, 0);
screen.tlen[j] = 0;
} else if (screen.cur.row < (TermWin.nrow - 1))
row = (++screen.cur.row) + TermWin.saveLines;
@@ -981,7 +984,7 @@
if (screen.cur.row == screen.bscroll) {
scroll_text(screen.tscroll, screen.bscroll, 1, 0);
j = screen.bscroll + TermWin.saveLines;
- blank_screen_mem(screen.text, screen.rend, j, rstyle);
+ blank_screen_mem(screen.text, screen.rend, j, rstyle, 0);
screen.tlen[j] = 0;
} else if (screen.cur.row < (TermWin.nrow - 1))
row = (++screen.cur.row) + TermWin.saveLines;
@@ -1256,7 +1259,7 @@
dirn = screen.bscroll + TermWin.saveLines;
else
dirn = screen.tscroll + TermWin.saveLines;
- blank_screen_mem(screen.text, screen.rend, dirn, rstyle);
+ blank_screen_mem(screen.text, screen.rend, dirn, rstyle, 0);
screen.tlen[dirn] = 0;
} else
screen.cur.row += dirn;
@@ -1321,7 +1324,7 @@
blank_line(&(screen.text[row][col]), &(screen.rend[row][col]), num,
rstyle & ~RS_Uline);
else
- blank_screen_mem(screen.text, screen.rend, row, rstyle & ~RS_Uline);
+ blank_screen_mem(screen.text, screen.rend, row, rstyle, 0);
}
/* ------------------------------------------------------------------------- */
@@ -1390,7 +1393,7 @@
}
for (; num--; row++) {
blank_screen_mem(screen.text, screen.rend, row + row_offset,
- rstyle & ~RS_Uline);
+ rstyle, 0);
screen.tlen[row + row_offset] = 0;
blank_line(drawn_text[row], drawn_rend[row], TermWin.ncol, ren);
}
@@ -1464,7 +1467,7 @@
else if (insdel == INSERT)
end = screen.cur.row + count - 1 + TermWin.saveLines;
for (; count--;) {
- blank_screen_mem(screen.text, screen.rend, end, rstyle);
+ blank_screen_mem(screen.text, screen.rend, end, rstyle, 0);
screen.tlen[end--] = 0;
}
}
--
Geoff Wing : <[EMAIL PROTECTED]> Work URL: http://www.primenet.com.au/
Rxvt Stuff : <[EMAIL PROTECTED]> Ego URL : http://pobox.com/~gcw/
Zsh Stuff : <[EMAIL PROTECTED]> Phone : (Australia) 0413 431 874