--- rxvt-unicode/src/screen.C 2011/11/15 20:09:13 1.405 +++ rxvt-unicode/src/screen.C 2011/11/16 18:52:17 1.407 @@ -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; @@ -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--; ) @@ -2696,21 +2702,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 (); }