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.210 by root, Thu Jan 5 21:21:49 2006 UTC vs.
Revision 1.214 by root, Sun Jan 8 00:07:18 2006 UTC

1/*--------------------------------*-C-*--------------------------------------* 1/*--------------------------------*-C-*--------------------------------------*
2 * File: screen.C 2 * File: screen.C
3 *---------------------------------------------------------------------------* 3 *---------------------------------------------------------------------------*
4 * 4 *
5 * Copyright (c) 1997-2001 Geoff Wing <gcw@pobox.com> 5 * Copyright (c) 1997-2001 Geoff Wing <gcw@pobox.com>
6 * Copyright (c) 2003-2004 Marc Lehmann <pcg@goof.com> 6 * Copyright (c) 2003-2006 Marc Lehmann <pcg@goof.com>
7 * 7 *
8 * This program is free software; you can redistribute it and/or modify 8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by 9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or 10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version. 11 * (at your option) any later version.
414 for (int col = ncol; col--; ) 414 for (int col = ncol; col--; )
415 tabs [col] = col % TABSIZE == 0; 415 tabs [col] = col % TABSIZE == 0;
416 416
417 tt_winch (); 417 tt_winch ();
418 418
419 PERL_INVOKE ((this, HOOK_RESET, DT_END)); 419 HOOK_INVOKE ((this, HOOK_RESET, DT_END));
420} 420}
421 421
422/* ------------------------------------------------------------------------- */ 422/* ------------------------------------------------------------------------- */
423/* 423/*
424 * Free everything. That way malloc debugging can find leakage. 424 * Free everything. That way malloc debugging can find leakage.
618 && row2 == nrow - 1 618 && row2 == nrow - 1
619 && (current_screen == PRIMARY || OPTION (Opt_secondaryScroll))) 619 && (current_screen == PRIMARY || OPTION (Opt_secondaryScroll)))
620 { 620 {
621 nsaved = min (nsaved + count, saveLines); 621 nsaved = min (nsaved + count, saveLines);
622 622
623 PERL_INVOKE ((this, HOOK_SCROLL_BACK, DT_INT, count, DT_INT, nsaved, DT_END)); 623 HOOK_INVOKE ((this, HOOK_SCROLL_BACK, DT_INT, count, DT_INT, nsaved, DT_END));
624 624
625 term_start = (term_start + count) % total_rows; 625 term_start = (term_start + count) % total_rows;
626 626
627 if (selection.op && current_screen == selection.screen) 627 if (selection.op && current_screen == selection.screen)
628 { 628 {
700/* ------------------------------------------------------------------------- */ 700/* ------------------------------------------------------------------------- */
701/* 701/*
702 * Add text given in <str> of length <len> to screen struct 702 * Add text given in <str> of length <len> to screen struct
703 */ 703 */
704void 704void
705rxvt_term::scr_add_lines (const unicode_t *str, int nlines, int len) 705rxvt_term::scr_add_lines (const wchar_t *str, int len, int minlines)
706{ 706{
707 if (len <= 0) /* sanity */ 707 if (len <= 0) /* sanity */
708 return; 708 return;
709 709
710 unsigned char checksel; 710 unsigned char checksel;
711 unicode_t c; 711 unicode_t c;
712 int ncol = this->ncol; 712 int ncol = this->ncol;
713 const unicode_t *strend = str + len; 713 const wchar_t *strend = str + len;
714 714
715 want_refresh = 1; 715 want_refresh = 1;
716 ZERO_SCROLLBACK (); 716 ZERO_SCROLLBACK ();
717 717
718 if (nlines > 0) 718 if (minlines > 0)
719 { 719 {
720 nlines += screen.cur.row - screen.bscroll; 720 minlines += screen.cur.row - screen.bscroll;
721 721
722 if (nlines > 0 722 if (minlines > 0
723 && screen.tscroll == 0 723 && screen.tscroll == 0
724 && screen.bscroll == nrow - 1) 724 && screen.bscroll == nrow - 1)
725 { 725 {
726 /* _at least_ this many lines need to be scrolled */ 726 /* _at least_ this many lines need to be scrolled */
727 scr_scroll_text (screen.tscroll, screen.bscroll, nlines); 727 scr_scroll_text (screen.tscroll, screen.bscroll, minlines);
728 screen.cur.row -= nlines; 728 screen.cur.row -= minlines;
729 } 729 }
730 } 730 }
731 731
732#ifdef DEBUG_STRICT 732#ifdef DEBUG_STRICT
733 assert (screen.cur.col < ncol); 733 assert (screen.cur.col < ncol);
740 740
741 line_t *line = &ROW(row); 741 line_t *line = &ROW(row);
742 742
743 while (str < strend) 743 while (str < strend)
744 { 744 {
745 c = *str++; 745 c = (unicode_t)*str++; // convert to rxvt-unicodes representation
746 746
747 if (c < 0x20) 747 if (c < 0x20)
748 if (c == C0_LF) 748 if (c == C0_LF)
749 { 749 {
750 max_it (line->l, screen.cur.col); 750 max_it (line->l, screen.cur.col);
1833int 1833int
1834rxvt_term::scr_changeview (unsigned int oldviewstart) 1834rxvt_term::scr_changeview (unsigned int oldviewstart)
1835{ 1835{
1836 if (view_start != oldviewstart) 1836 if (view_start != oldviewstart)
1837 { 1837 {
1838 PERL_INVOKE ((this, HOOK_VIEW_CHANGE, DT_INT, view_start, DT_END)); 1838 HOOK_INVOKE ((this, HOOK_VIEW_CHANGE, DT_INT, view_start, DT_END));
1839 1839
1840 want_refresh = 1; 1840 want_refresh = 1;
1841 num_scr -= (view_start - oldviewstart); 1841 num_scr -= (view_start - oldviewstart);
1842 } 1842 }
1843 1843
2053 oldcursor.col = screen.cur.col; 2053 oldcursor.col = screen.cur.col;
2054 } 2054 }
2055 } 2055 }
2056 } 2056 }
2057 2057
2058 PERL_INVOKE ((this, HOOK_REFRESH_BEGIN, DT_END)); 2058 HOOK_INVOKE ((this, HOOK_REFRESH_BEGIN, DT_END));
2059#if ENABLE_OVERLAY 2059#if ENABLE_OVERLAY
2060 scr_swap_overlay (); 2060 scr_swap_overlay ();
2061#endif 2061#endif
2062 2062
2063#ifndef NO_SLOW_LINK_SUPPORT 2063#ifndef NO_SLOW_LINK_SUPPORT
2326 } /* for (row....) */ 2326 } /* for (row....) */
2327 2327
2328#if ENABLE_OVERLAY 2328#if ENABLE_OVERLAY
2329 scr_swap_overlay (); 2329 scr_swap_overlay ();
2330#endif 2330#endif
2331 PERL_INVOKE ((this, HOOK_REFRESH_END, DT_END)); 2331 HOOK_INVOKE ((this, HOOK_REFRESH_END, DT_END));
2332 2332
2333 /* 2333 /*
2334 * G: cleanup cursor and display outline cursor if necessary 2334 * G: cleanup cursor and display outline cursor if necessary
2335 */ 2335 */
2336 if (showcursor) 2336 if (showcursor)
2388rxvt_term::scr_remap_chars (line_t &l) 2388rxvt_term::scr_remap_chars (line_t &l)
2389{ 2389{
2390 if (!l.t) 2390 if (!l.t)
2391 return; 2391 return;
2392 2392
2393 l.touch (); // maybe a bit of an overkill, but its not performance-relevant 2393 l.touch (); // maybe a bit of an overkill, but it's not performance-relevant
2394 2394
2395 for (int i = ncol; i--; ) 2395 for (int i = ncol; i--; )
2396 l.r[i] = SET_FONT (l.r[i], FONTSET (l.r[i])->find_font (l.t[i])); 2396 l.r[i] = SET_FONT (l.r[i], FONTSET (l.r[i])->find_font (l.t[i]));
2397} 2397}
2398 2398
2890 selection.op = SELECTION_DONE; 2890 selection.op = SELECTION_DONE;
2891 2891
2892 if (selection.clicks == 4) 2892 if (selection.clicks == 4)
2893 return; /* nothing selected, go away */ 2893 return; /* nothing selected, go away */
2894 2894
2895 if (PERL_INVOKE ((this, HOOK_SEL_MAKE, DT_LONG, (long)tm, DT_END))) 2895 if (HOOK_INVOKE ((this, HOOK_SEL_MAKE, DT_LONG, (long)tm, DT_END)))
2896 return; 2896 return;
2897 2897
2898 i = (selection.end.row - selection.beg.row + 1) * (ncol + 1); 2898 i = (selection.end.row - selection.beg.row + 1) * (ncol + 1);
2899 new_selection_text = (wchar_t *)rxvt_malloc ((i + 4) * sizeof (wchar_t)); 2899 new_selection_text = (wchar_t *)rxvt_malloc ((i + 4) * sizeof (wchar_t));
2900 2900
2985 2985
2986 // we usually allocate much more than necessary, so realloc it smaller again 2986 // we usually allocate much more than necessary, so realloc it smaller again
2987 selection.len = ofs; 2987 selection.len = ofs;
2988 selection.text = (wchar_t *)rxvt_realloc (new_selection_text, (ofs + 1) * sizeof (wchar_t)); 2988 selection.text = (wchar_t *)rxvt_realloc (new_selection_text, (ofs + 1) * sizeof (wchar_t));
2989 2989
2990 if (PERL_INVOKE ((this, HOOK_SEL_GRAB, DT_LONG, (long)tm, DT_END))) 2990 if (HOOK_INVOKE ((this, HOOK_SEL_GRAB, DT_LONG, (long)tm, DT_END)))
2991 return; 2991 return;
2992 2992
2993 selection_grab (tm); 2993 selection_grab (tm);
2994} 2994}
2995 2995
3331 else if (selection.clicks == 2) 3331 else if (selection.clicks == 2)
3332 { 3332 {
3333 if (ROWCOL_IS_AFTER (selection.end, selection.beg)) 3333 if (ROWCOL_IS_AFTER (selection.end, selection.beg))
3334 selection.end.col--; 3334 selection.end.col--;
3335 3335
3336 if (!PERL_INVOKE ((this, HOOK_SEL_EXTEND, DT_END))) 3336 if (!HOOK_INVOKE ((this, HOOK_SEL_EXTEND, DT_END)))
3337 { 3337 {
3338 selection_delimit_word (UP, &selection.beg, &selection.beg); 3338 selection_delimit_word (UP, &selection.beg, &selection.beg);
3339 selection_delimit_word (DN, &selection.end, &selection.end); 3339 selection_delimit_word (DN, &selection.end, &selection.end);
3340 } 3340 }
3341 } 3341 }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines