--- rxvt-unicode/src/screen.C 2004/03/28 02:07:08 1.66 +++ rxvt-unicode/src/screen.C 2004/04/08 20:31:45 1.71 @@ -1,5 +1,5 @@ /*--------------------------------*-C-*--------------------------------------* - * File: screen.c + * File: screen.C *---------------------------------------------------------------------------* * * Copyright (c) 1997-2001 Geoff Wing @@ -513,6 +513,7 @@ s->s_charset = s->charset; s->s_charset_char = charsets[s->charset]; break; + case RESTORE: want_refresh = 1; s->cur.row = s->s_cur.row; @@ -558,41 +559,43 @@ TermWin.view_start = 0; if (current_screen == scrn) - return current_screen; + return scrn; selection_check (2); /* check for boundary cross */ SWAP_IT (current_screen, scrn, int); #if NSCREENS - num_scr = 0; - offset = TermWin.saveLines; - for (i = prev_nrow; i--;) + if (Options & Opt_secondaryScreen) { - SWAP_IT (screen.text[i + offset], swap.text[i], text_t *); - SWAP_IT (screen.tlen[i + offset], swap.tlen[i], int16_t); - SWAP_IT (screen.rend[i + offset], swap.rend[i], rend_t *); - } - SWAP_IT (screen.cur.row, swap.cur.row, int16_t); - SWAP_IT (screen.cur.col, swap.cur.col, int16_t); + num_scr = 0; + offset = TermWin.saveLines; + for (i = prev_nrow; i--;) + { + SWAP_IT (screen.text[i + offset], swap.text[i], text_t *); + SWAP_IT (screen.tlen[i + offset], swap.tlen[i], int16_t); + SWAP_IT (screen.rend[i + offset], swap.rend[i], rend_t *); + } + SWAP_IT (screen.cur.row, swap.cur.row, int16_t); + SWAP_IT (screen.cur.col, swap.cur.col, int16_t); # ifdef DEBUG_STRICT - assert ((screen.cur.row >= 0) && (screen.cur.row < prev_nrow)); - assert ((screen.cur.col >= 0) && (screen.cur.col < prev_ncol)); + assert ((screen.cur.row >= 0) && (screen.cur.row < prev_nrow)); + assert ((screen.cur.col >= 0) && (screen.cur.col < prev_ncol)); # else /* drive with your eyes closed */ - MAX_IT (screen.cur.row, 0); - MIN_IT (screen.cur.row, (int32_t)prev_nrow - 1); - MAX_IT (screen.cur.col, 0); - MIN_IT (screen.cur.col, (int32_t)prev_ncol - 1); -# endif - SWAP_IT (screen.charset, swap.charset, int16_t); - SWAP_IT (screen.flags, swap.flags, int); - screen.flags |= Screen_VisibleCursor; - swap.flags |= Screen_VisibleCursor; -#else -# ifdef SCROLL_ON_NO_SECONDARY - if (current_screen == PRIMARY) - scr_scroll_text (0, (prev_nrow - 1), prev_nrow, 0); + MAX_IT (screen.cur.row, 0); + MIN_IT (screen.cur.row, (int32_t)prev_nrow - 1); + MAX_IT (screen.cur.col, 0); + MIN_IT (screen.cur.col, (int32_t)prev_ncol - 1); # endif + SWAP_IT (screen.charset, swap.charset, int16_t); + SWAP_IT (screen.flags, swap.flags, int); + screen.flags |= Screen_VisibleCursor; + swap.flags |= Screen_VisibleCursor; + } + else #endif + if (Options & Opt_secondaryScroll) + //if (current_screen == PRIMARY) + scr_scroll_text (0, (prev_nrow - 1), prev_nrow, 0); return scrn; } @@ -644,7 +647,8 @@ want_refresh = 1; D_SCREEN ((stderr, "rxvt_scroll_text (%d,%d,%d,%d): %s", row1, row2, count, spec, (current_screen == PRIMARY) ? "Primary" : "Secondary")); - if ((count > 0) && (row1 == 0) && (current_screen == PRIMARY)) + if (row1 == 0 && count > 0 + && (current_screen == PRIMARY || Options & Opt_secondaryScroll)) { nscrolled = (long)TermWin.nscrolled + (long)count; @@ -809,11 +813,11 @@ if (c < 0x20) switch (c) { - case '\t': + case C0_HT: scr_tab (1); continue; - case '\n': + case C0_LF: if (screen.tlen[row] != -1) /* XXX: think about this */ MAX_IT (screen.tlen[row], screen.cur.col); @@ -828,7 +832,7 @@ srp = screen.rend[row]; /* _must_ refresh */ continue; - case '\r': + case C0_CR: if (screen.tlen[row] != -1) /* XXX: think about this */ MAX_IT (screen.tlen[row], screen.cur.col); @@ -986,6 +990,7 @@ rxvt_term::scr_backspace () { want_refresh = 1; + if (screen.cur.col == 0) { if (screen.cur.row > 0) @@ -1000,6 +1005,7 @@ } else if ((screen.flags & Screen_WrapNext) == 0) scr_gotorc (0, -1, RELATIVE); + screen.flags &= ~Screen_WrapNext; } @@ -1113,8 +1119,7 @@ D_SCREEN ((stderr, "rxvt_scr_gotorc (r:%s%d,c:%s%d): from (r:%d,c:%d)", (relative & R_RELATIVE ? "+" : ""), row, (relative & C_RELATIVE ? "+" : ""), col, screen.cur.row, screen.cur.col)); - screen.cur.col = ((relative & C_RELATIVE) ? (screen.cur.col + col) - : col); + screen.cur.col = relative & C_RELATIVE ? screen.cur.col + col : col; MAX_IT (screen.cur.col, 0); MIN_IT (screen.cur.col, (int32_t)TermWin.ncol - 1); @@ -1163,7 +1168,7 @@ void rxvt_term::scr_index (enum page_dirn direction) { - int dirn; + int dirn; want_refresh = 1; dirn = ((direction == UP) ? 1 : -1); @@ -1516,6 +1521,7 @@ rxvt_term::scr_cursor_visible (int mode) { want_refresh = 1; + if (mode) screen.flags |= Screen_VisibleCursor; else @@ -1841,6 +1847,7 @@ want_refresh = 1; num_scr -= (TermWin.view_start - oldviewstart); } + return (int) (TermWin.view_start - oldviewstart); } @@ -2516,8 +2523,8 @@ MEMCPY (ds, data + i, n); for (j = 0; j < n; j++) - if (ds[j] == '\n') - ds[j] = '\r'; + if (ds[j] == C0_LF) + ds[j] = C0_CR; tt_write (ds, (int)n); } @@ -2878,11 +2885,11 @@ } if (screen.tlen[row] != -1 && row != end_row) - new_selection_text[ofs++] = L'\n'; + new_selection_text[ofs++] = C0_LF; } if (end_col != selection.end.col) - new_selection_text[ofs++] = L'\n'; + new_selection_text[ofs++] = C0_LF; new_selection_text[ofs] = 0; @@ -3119,9 +3126,9 @@ void rxvt_term::selection_extend_colrow (int32_t col, int32_t row, int button3, int buttonpress, int clickchange) { - int16_t ncol = TermWin.ncol; - int end_col; - row_col_t pos; + int16_t ncol = TermWin.ncol; + int end_col; + row_col_t pos; enum { LEFT, RIGHT } closeto = RIGHT;