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

Reply via email to