ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/screen.C
(Generate patch)

Comparing rxvt-unicode/src/screen.C (file contents):
Revision 1.402 by root, Tue Nov 15 18:23:46 2011 UTC vs.
Revision 1.414 by sf-exg, Tue Jan 24 17:05:05 2012 UTC

455 scr_clear (true); 455 scr_clear (true);
456 scr_refresh (); 456 scr_refresh ();
457} 457}
458 458
459void 459void
460rxvt_term::scr_soft_reset () 460rxvt_term::scr_soft_reset () NOTHROW
461{ 461{
462 /* only affects modes, nothing drastic such as clearing the screen */ 462 /* only affects modes, nothing drastic such as clearing the screen */
463#if ENABLE_OVERLAY 463#if ENABLE_OVERLAY
464 scr_overlay_off (); 464 scr_overlay_off ();
465#endif 465#endif
520 assert (s->cur.row >= 0); 520 assert (s->cur.row >= 0);
521 assert (s->cur.col >= 0); 521 assert (s->cur.col >= 0);
522} 522}
523 523
524void 524void
525rxvt_term::scr_swap_screen () 525rxvt_term::scr_swap_screen () NOTHROW
526{ 526{
527 if (!option (Opt_secondaryScreen)) 527 if (!option (Opt_secondaryScreen))
528 return; 528 return;
529 529
530 for (int i = prev_nrow; i--; ) 530 for (int i = prev_nrow; i--; )
549 return; 549 return;
550 550
551 want_refresh = 1; 551 want_refresh = 1;
552 view_start = 0; 552 view_start = 0;
553 553
554 selection_check (2); /* check for boundary cross */ 554 /* check for boundary cross */
555 row_col_t pos;
556 pos.row = pos.col = 0;
557 if (ROWCOL_IS_BEFORE (selection.beg, pos)
558 && ROWCOL_IS_AFTER (selection.end, pos))
559 CLEAR_SELECTION ();
555 560
556 current_screen = scrn; 561 current_screen = scrn;
557 562
558#if NSCREENS 563#if NSCREENS
559 if (option (Opt_secondaryScreen)) 564 if (option (Opt_secondaryScreen))
775rxvt_term::scr_add_lines (const wchar_t *str, int len, int minlines) NOTHROW 780rxvt_term::scr_add_lines (const wchar_t *str, int len, int minlines) NOTHROW
776{ 781{
777 if (len <= 0) /* sanity */ 782 if (len <= 0) /* sanity */
778 return; 783 return;
779 784
780 unsigned char checksel; 785 bool checksel;
781 unicode_t c; 786 unicode_t c;
782 int ncol = this->ncol; 787 int ncol = this->ncol;
783 const wchar_t *strend = str + len; 788 const wchar_t *strend = str + len;
784 789
785 want_refresh = 1; 790 want_refresh = 1;
1307 scr_blank_line (line, col, num, rstyle); 1312 scr_blank_line (line, col, num, rstyle);
1308} 1313}
1309 1314
1310/* ------------------------------------------------------------------------- */ 1315/* ------------------------------------------------------------------------- */
1311/* 1316/*
1312 * Erase part of whole of the screen 1317 * Erase part or whole of the screen
1313 * XTERM_SEQ: Clear screen after cursor : ESC [ 0 J 1318 * XTERM_SEQ: Clear screen after cursor : ESC [ 0 J
1314 * XTERM_SEQ: Clear screen before cursor: ESC [ 1 J 1319 * XTERM_SEQ: Clear screen before cursor: ESC [ 1 J
1315 * XTERM_SEQ: Clear whole screen : ESC [ 2 J 1320 * XTERM_SEQ: Clear whole screen : ESC [ 2 J
1316 */ 1321 */
1317void 1322void
1326 ZERO_SCROLLBACK (); 1331 ZERO_SCROLLBACK ();
1327 1332
1328 switch (mode) 1333 switch (mode)
1329 { 1334 {
1330 case 0: /* erase to end of screen */ 1335 case 0: /* erase to end of screen */
1331 selection_check (1);
1332 scr_erase_line (0); 1336 scr_erase_line (0);
1333 row = screen.cur.row + 1; /* possible OOB */ 1337 row = screen.cur.row + 1; /* possible OOB */
1334 num = nrow - row; 1338 num = nrow - row;
1335 break; 1339 break;
1336 case 1: /* erase to beginning of screen */ 1340 case 1: /* erase to beginning of screen */
1337 selection_check (3);
1338 scr_erase_line (1); 1341 scr_erase_line (1);
1339 row = 0; 1342 row = 0;
1340 num = screen.cur.row; 1343 num = screen.cur.row;
1341 break; 1344 break;
1342 case 2: /* erase whole screen */ 1345 case 2: /* erase whole screen */
1343 selection_check (3);
1344 row = 0; 1346 row = 0;
1345 num = nrow; 1347 num = nrow;
1346 break; 1348 break;
1347 default: 1349 default:
1348 return; 1350 return;
1365 { 1367 {
1366 ren = DEFAULT_RSTYLE; 1368 ren = DEFAULT_RSTYLE;
1367 1369
1368 if (mapped) 1370 if (mapped)
1369 XClearArea (dpy, vt, 0, 1371 XClearArea (dpy, vt, 0,
1370 Row2Pixel (row - view_start), (unsigned int)width, 1372 Row2Pixel (row - view_start), (unsigned int)vt_width,
1371 (unsigned int)Height2Pixel (num), False); 1373 (unsigned int)Height2Pixel (num), False);
1372 } 1374 }
1373 else 1375 else
1374 { 1376 {
1375 ren = rstyle & (RS_fgMask | RS_bgMask); 1377 ren = rstyle & (RS_fgMask | RS_bgMask);
1378 { 1380 {
1379 gcvalue.foreground = pix_colors[bgcolor_of (rstyle)]; 1381 gcvalue.foreground = pix_colors[bgcolor_of (rstyle)];
1380 XChangeGC (dpy, gc, GCForeground, &gcvalue); 1382 XChangeGC (dpy, gc, GCForeground, &gcvalue);
1381 XFillRectangle (dpy, vt, gc, 1383 XFillRectangle (dpy, vt, gc,
1382 0, Row2Pixel (row - view_start), 1384 0, Row2Pixel (row - view_start),
1383 (unsigned int)width, 1385 (unsigned int)vt_width,
1384 (unsigned int)Height2Pixel (num)); 1386 (unsigned int)Height2Pixel (num));
1385 gcvalue.foreground = pix_colors[Color_fg]; 1387 gcvalue.foreground = pix_colors[Color_fg];
1386 XChangeGC (dpy, gc, GCForeground, &gcvalue); 1388 XChangeGC (dpy, gc, GCForeground, &gcvalue);
1387 } 1389 }
1388 } 1390 }
1419 1421
1420 want_refresh = 1; 1422 want_refresh = 1;
1421 ZERO_SCROLLBACK (); 1423 ZERO_SCROLLBACK ();
1422 1424
1423 num_scr_allow = 0; 1425 num_scr_allow = 0;
1424 selection_check (3); 1426
1427 row_col_t pos;
1428 pos.row = pos.col = 0;
1429 if (ROWCOL_IS_AFTER (selection.end, pos))
1430 CLEAR_SELECTION ();
1425 1431
1426 fs = SET_FONT (rstyle, FONTSET (rstyle)->find_font ('E')); 1432 fs = SET_FONT (rstyle, FONTSET (rstyle)->find_font ('E'));
1427 for (int row = nrow; row--; ) 1433 for (int row = nrow; row--; )
1428 { 1434 {
1429 line_t &line = ROW(row); 1435 line_t &line = ROW(row);
1870 * Refresh the entire screen 1876 * Refresh the entire screen
1871 */ 1877 */
1872void 1878void
1873rxvt_term::scr_touch (bool refresh) NOTHROW 1879rxvt_term::scr_touch (bool refresh) NOTHROW
1874{ 1880{
1875 scr_expose (0, 0, width, height, refresh); 1881 scr_expose (0, 0, vt_width, vt_height, refresh);
1876} 1882}
1877 1883
1878/* ------------------------------------------------------------------------- */ 1884/* ------------------------------------------------------------------------- */
1879/* 1885/*
1880 * Move the display so that the line represented by scrollbar value Y is at 1886 * Move the display so that the line represented by scrollbar value Y is at
2042 * A: set up vars 2048 * A: set up vars
2043 */ 2049 */
2044 refresh_count = 0; 2050 refresh_count = 0;
2045 2051
2046 unsigned int old_screen_flags = screen.flags; 2052 unsigned int old_screen_flags = screen.flags;
2047 char have_bg = 0; 2053 bool have_bg = 0;
2048#ifdef HAVE_BG_PIXMAP 2054#ifdef HAVE_BG_PIXMAP
2049 have_bg = bg_pixmap != None; 2055 have_bg = bg_pixmap != None;
2050#endif 2056#endif
2051 ocrow = oldcursor.row; /* is there an old outline cursor on screen? */ 2057 ocrow = oldcursor.row; /* is there an old outline cursor on screen? */
2052 2058
2058 HOOK_INVOKE ((this, HOOK_REFRESH_BEGIN, DT_END)); 2064 HOOK_INVOKE ((this, HOOK_REFRESH_BEGIN, DT_END));
2059#if ENABLE_OVERLAY 2065#if ENABLE_OVERLAY
2060 scr_swap_overlay (); 2066 scr_swap_overlay ();
2061#endif 2067#endif
2062 2068
2063 char showcursor = screen.flags & Screen_VisibleCursor; 2069 bool showcursor = screen.flags & Screen_VisibleCursor;
2064 2070
2065 /* 2071 /*
2066 * C: set the cursor character (s) 2072 * C: set the cursor character (s)
2067 */ 2073 */
2068 { 2074 {
2069 unsigned char setoldcursor; 2075 bool setoldcursor;
2070 2076
2071#ifdef CURSOR_BLINK 2077#ifdef CURSOR_BLINK
2072 if (hidden_cursor) 2078 if (hidden_cursor)
2073 showcursor = 0; 2079 showcursor = 0;
2074#endif 2080#endif
2161 { 2167 {
2162 int16_t nits; 2168 int16_t nits;
2163 int i = num_scr; 2169 int i = num_scr;
2164 int j; 2170 int j;
2165 int len, wlen; 2171 int len, wlen;
2166 dLocal (int, num_scr);
2167 2172
2168 j = nrow; 2173 j = nrow;
2169 wlen = len = -1; 2174 wlen = len = -1;
2170 row = i > 0 ? 0 : j - 1; 2175 row = i > 0 ? 0 : j - 1;
2171 2176
2476 2481
2477 XDrawRectangle (dpy, vt, gc, 2482 XDrawRectangle (dpy, vt, gc,
2478 Col2Pixel (col), 2483 Col2Pixel (col),
2479 Row2Pixel (oldcursor.row), 2484 Row2Pixel (oldcursor.row),
2480 (unsigned int) (Width2Pixel (cursorwidth) - 1), 2485 (unsigned int) (Width2Pixel (cursorwidth) - 1),
2481 (unsigned int) (Height2Pixel (1) - lineSpace - 1)); 2486 (unsigned int) (Height2Pixel (1) - 1));
2482 } 2487 }
2483 } 2488 }
2484 2489
2485 /* 2490 /*
2486 * H: cleanup selection 2491 * H: cleanup selection
2662 */ 2667 */
2663#if 0 2668#if 0
2664void 2669void
2665rxvt_term::scr_dump (int fd) NOTHROW 2670rxvt_term::scr_dump (int fd) NOTHROW
2666{ 2671{
2667 int row, wrote; 2672 // if this method is needed, it can be implemented by factoring the
2668 unsigned int width, towrite; 2673 // relevant code in scr_printscreen
2669 const char r1[] = "\n";
2670
2671 for (row = saveLines + top_row;
2672 row < saveLines + nrow - 1; row++)
2673 {
2674 width = row_buf[row].l >= 0 ? row_buf[row].l
2675 : ncol;
2676 for (towrite = width; towrite; towrite -= wrote)
2677 {
2678 wrote = write (fd, & (row_buf[row].t[width - towrite]),
2679 towrite);
2680 if (wrote < 0)
2681 return; /* XXX: death, no report */
2682 }
2683 if (row_buf[row].l >= 0)
2684 if (write (fd, r1, 1) <= 0)
2685 return; /* XXX: death, no report */
2686 }
2687} 2674}
2688#endif 2675#endif
2689 2676
2690/* ------------------------------------------------------------------------- * 2677/* ------------------------------------------------------------------------- *
2691 * CHARACTER SELECTION * 2678 * CHARACTER SELECTION *
2693void 2680void
2694rxvt_term::selection_check (int check_more) NOTHROW 2681rxvt_term::selection_check (int check_more) NOTHROW
2695{ 2682{
2696 if (!selection.op) 2683 if (!selection.op)
2697 return; 2684 return;
2698
2699 row_col_t pos;
2700 pos.row = pos.col = 0;
2701 2685
2702 if (!IN_RANGE_EXC (selection.beg.row, top_row, nrow) 2686 if (!IN_RANGE_EXC (selection.beg.row, top_row, nrow)
2703 || !IN_RANGE_EXC (selection.mark.row, top_row, nrow) 2687 || !IN_RANGE_EXC (selection.mark.row, top_row, nrow)
2704 || !IN_RANGE_EXC (selection.end.row, top_row, nrow) 2688 || !IN_RANGE_EXC (selection.end.row, top_row, nrow)
2705 || (check_more == 1 2689 || (check_more == 1
2706 && current_screen == selection.screen 2690 && current_screen == selection.screen
2707 && !ROWCOL_IS_BEFORE (screen.cur, selection.beg) 2691 && !ROWCOL_IS_BEFORE (screen.cur, selection.beg)
2708 && ROWCOL_IS_BEFORE (screen.cur, selection.end)) 2692 && ROWCOL_IS_BEFORE (screen.cur, selection.end)))
2709 || (check_more == 2
2710 && ROWCOL_IS_BEFORE (selection.beg, pos)
2711 && ROWCOL_IS_AFTER (selection.end, pos))
2712 || (check_more == 3
2713 && ROWCOL_IS_AFTER (selection.end, pos)))
2714 CLEAR_ALL_SELECTION (); 2693 CLEAR_ALL_SELECTION ();
2715} 2694}
2716 2695
2717/* ------------------------------------------------------------------------- */ 2696/* ------------------------------------------------------------------------- */
2718/* 2697/*
2725 for (unsigned int i = 0; i < len; i++) 2704 for (unsigned int i = 0; i < len; i++)
2726 if (data[i] == C0_LF) 2705 if (data[i] == C0_LF)
2727 data[i] = C0_CR; 2706 data[i] = C0_CR;
2728 2707
2729 if (priv_modes & PrivMode_BracketPaste) 2708 if (priv_modes & PrivMode_BracketPaste)
2730 tt_printf ("\e[200~"); 2709 tt_printf ("\x1b[200~");
2731 2710
2732 tt_write (data, len); 2711 tt_write (data, len);
2733 2712
2734 if (priv_modes & PrivMode_BracketPaste) 2713 if (priv_modes & PrivMode_BracketPaste)
2735 tt_printf ("\e[201~"); 2714 tt_printf ("\x1b[201~");
2736} 2715}
2737 2716
2738void 2717void
2739rxvt_term::paste (char *data, unsigned int len) NOTHROW 2718rxvt_term::paste (char *data, unsigned int len) NOTHROW
2740{ 2719{

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines