--- rxvt-unicode/src/screen.C 2011/11/15 19:54:30 1.403 +++ rxvt-unicode/src/screen.C 2011/11/24 18:09:54 1.410 @@ -551,7 +551,12 @@ want_refresh = 1; view_start = 0; - selection_check (2); /* check for boundary cross */ + /* check for boundary cross */ + row_col_t pos; + pos.row = pos.col = 0; + if (ROWCOL_IS_BEFORE (selection.beg, pos) + && ROWCOL_IS_AFTER (selection.end, pos)) + CLEAR_SELECTION (); current_screen = scrn; @@ -1309,7 +1314,7 @@ /* ------------------------------------------------------------------------- */ /* - * Erase part of whole of the screen + * Erase part or whole of the screen * XTERM_SEQ: Clear screen after cursor : ESC [ 0 J * XTERM_SEQ: Clear screen before cursor: ESC [ 1 J * XTERM_SEQ: Clear whole screen : ESC [ 2 J @@ -1328,19 +1333,16 @@ switch (mode) { case 0: /* erase to end of screen */ - selection_check (1); scr_erase_line (0); row = screen.cur.row + 1; /* possible OOB */ num = nrow - row; break; case 1: /* erase to beginning of screen */ - selection_check (3); scr_erase_line (1); row = 0; num = screen.cur.row; break; case 2: /* erase whole screen */ - selection_check (3); row = 0; num = nrow; break; @@ -1421,7 +1423,11 @@ ZERO_SCROLLBACK (); num_scr_allow = 0; - selection_check (3); + + row_col_t pos; + pos.row = pos.col = 0; + if (ROWCOL_IS_AFTER (selection.end, pos)) + CLEAR_SELECTION (); fs = SET_FONT (rstyle, FONTSET (rstyle)->find_font ('E')); for (int row = nrow; row--; ) @@ -2044,7 +2050,7 @@ refresh_count = 0; unsigned int old_screen_flags = screen.flags; - char have_bg = 0; + bool have_bg = 0; #ifdef HAVE_BG_PIXMAP have_bg = bg_pixmap != None; #endif @@ -2163,7 +2169,6 @@ int i = num_scr; int j; int len, wlen; - dLocal (int, num_scr); j = nrow; wlen = len = -1; @@ -2664,26 +2669,8 @@ void rxvt_term::scr_dump (int fd) NOTHROW { - int row, wrote; - unsigned int width, towrite; - const char r1[] = "\n"; - - for (row = saveLines + top_row; - row < saveLines + nrow - 1; row++) - { - width = row_buf[row].l >= 0 ? row_buf[row].l - : ncol; - for (towrite = width; towrite; towrite -= wrote) - { - wrote = write (fd, & (row_buf[row].t[width - towrite]), - towrite); - if (wrote < 0) - return; /* XXX: death, no report */ - } - if (row_buf[row].l >= 0) - if (write (fd, r1, 1) <= 0) - return; /* XXX: death, no report */ - } + // if this method is needed, it can be implemented by factoring the + // relevant code in scr_printscreen } #endif @@ -2696,21 +2683,13 @@ if (!selection.op) return; - row_col_t pos; - pos.row = pos.col = 0; - if (!IN_RANGE_EXC (selection.beg.row, top_row, nrow) || !IN_RANGE_EXC (selection.mark.row, top_row, nrow) || !IN_RANGE_EXC (selection.end.row, top_row, nrow) || (check_more == 1 && current_screen == selection.screen && !ROWCOL_IS_BEFORE (screen.cur, selection.beg) - && ROWCOL_IS_BEFORE (screen.cur, selection.end)) - || (check_more == 2 - && ROWCOL_IS_BEFORE (selection.beg, pos) - && ROWCOL_IS_AFTER (selection.end, pos)) - || (check_more == 3 - && ROWCOL_IS_AFTER (selection.end, pos))) + && ROWCOL_IS_BEFORE (screen.cur, selection.end))) CLEAR_ALL_SELECTION (); }