--- rxvt-unicode/src/screen.C 2005/02/19 19:37:34 1.158 +++ rxvt-unicode/src/screen.C 2005/04/17 22:36:13 1.162 @@ -204,17 +204,17 @@ * Note: this is still needed so that all the scrollback lines are NULL */ screen.text = (text_t **)rxvt_calloc (total_rows, sizeof (text_t *)); - buf_text = (text_t **)rxvt_calloc (total_rows, sizeof (text_t *)); - drawn_text = (text_t **)rxvt_calloc (nrow, sizeof (text_t *)); - swap.text = (text_t **)rxvt_calloc (nrow, sizeof (text_t *)); + buf_text = (text_t **)rxvt_calloc (total_rows, sizeof (text_t *)); + drawn_text = (text_t **)rxvt_calloc (nrow, sizeof (text_t *)); + swap.text = (text_t **)rxvt_calloc (nrow, sizeof (text_t *)); screen.tlen = (int16_t *)rxvt_calloc (total_rows, sizeof (int16_t)); - swap.tlen = (int16_t *)rxvt_calloc (nrow, sizeof (int16_t)); + swap.tlen = (int16_t *)rxvt_calloc (nrow, sizeof (int16_t)); screen.rend = (rend_t **)rxvt_calloc (total_rows, sizeof (rend_t *)); - buf_rend = (rend_t **)rxvt_calloc (total_rows, sizeof (rend_t *)); - drawn_rend = (rend_t **)rxvt_calloc (nrow, sizeof (rend_t *)); - swap.rend = (rend_t **)rxvt_calloc (nrow, sizeof (rend_t *)); + buf_rend = (rend_t **)rxvt_calloc (total_rows, sizeof (rend_t *)); + drawn_rend = (rend_t **)rxvt_calloc (nrow, sizeof (rend_t *)); + swap.rend = (rend_t **)rxvt_calloc (nrow, sizeof (rend_t *)); for (p = 0; p < nrow; p++) { @@ -701,8 +701,8 @@ else if (j >= row1 && j <= row2) { /* move selected region too */ - selection.beg.row -= count; - selection.end.row -= count; + selection.beg.row -= count; + selection.end.row -= count; selection.mark.row -= count; } } @@ -720,13 +720,13 @@ if (j > 0) { - /* A: scroll up */ + /* scroll up */ - /* A1: Copy lines that will get clobbered by the rotation */ + /* Copy lines that will get clobbered by the rotation */ memcpy (buf_text, screen.text + row1, count * sizeof (text_t *)); memcpy (buf_rend, screen.rend + row1, count * sizeof (rend_t *)); - /* A2: Rotate lines */ + /* Rotate lines */ i = row2 - row1 - count + 1; memmove (screen.tlen + row1, screen.tlen + row1 + count, i * sizeof (int16_t)); memmove (screen.text + row1, screen.text + row1 + count, i * sizeof (text_t *)); @@ -736,16 +736,16 @@ } else /* if (j < 0) */ { - /* B: scroll down */ + /* scroll down */ - /* B1: Copy lines that will get clobbered by the rotation */ + /* Copy lines that will get clobbered by the rotation */ for (i = 0, j = row2; i < count; i++, j--) { buf_text[i] = screen.text[j]; buf_rend[i] = screen.rend[j]; } - /* B2: Rotate lines */ + /* Rotate lines */ for (j = row2, i = j - count; i >= row1; i--, j--) { screen.tlen[j] = screen.tlen[i]; @@ -757,7 +757,7 @@ count = -count; } - /* C: Resurrect lines */ + /* Resurrect lines */ memset (screen.tlen + j, 0, i * sizeof (int16_t)); memcpy (screen.text + j, buf_text, i * sizeof (text_t *)); memcpy (screen.rend + j, buf_rend, i * sizeof (text_t *)); @@ -1163,7 +1163,7 @@ void rxvt_term::scr_forwardindex () { - int row; + int row; if (screen.cur.col < TermWin.ncol - 1) scr_gotorc (0, 1, R_RELATIVE | C_RELATIVE); @@ -1392,6 +1392,17 @@ } } +#if ENABLE_FRILLS +void +rxvt_term::scr_erase_savelines () +{ + want_refresh = 1; + ZERO_SCROLLBACK (); + + TermWin.nscrolled = 0; +} +#endif + /* ------------------------------------------------------------------------- */ /* * Fill the screen with `E's @@ -1400,8 +1411,8 @@ void rxvt_term::scr_E () { - int i, j, k; - rend_t *r1, fs; + int i, j, k; + rend_t *r1, fs; want_refresh = 1; ZERO_SCROLLBACK (); @@ -2004,16 +2015,6 @@ * drawn_text/drawn_rend contain the screen information before the update. * screen.text/screen.rend contain what the screen will change to. */ - -#define FONT_WIDTH(X, Y) \ - (X)->per_char[ (Y) - (X)->min_char_or_byte2].width -#define FONT_RBEAR(X, Y) \ - (X)->per_char[ (Y) - (X)->min_char_or_byte2].rbearing -#define FONT_LBEAR(X, Y) \ - (X)->per_char[ (Y) - (X)->min_char_or_byte2].lbearing -#define IS_FONT_CHAR(X, Y) \ - ((Y) >= (X)->min_char_or_byte2 && (Y) <= (X)->max_char_or_byte2) - void rxvt_term::scr_refresh (unsigned char refresh_type) { @@ -2042,10 +2043,10 @@ row_offset = TermWin.saveLines - TermWin.view_start; #if XPM_BACKGROUND - must_clear |= (bgPixmap.pixmap != None); + must_clear |= bgPixmap.pixmap != None; #endif #if TRANSPARENT - must_clear |= ((options & Opt_transparent) && am_transparent); + must_clear |= (options & Opt_transparent) && am_transparent; #endif ocrow = oldcursor.row; /* is there an old outline cursor on screen? */ @@ -2079,28 +2080,34 @@ if (showcursor && TermWin.focus) { - *crp ^= RS_RVid; -#ifndef NO_CURSORCOLOR - cc1 = *crp & (RS_fgMask | RS_bgMask); - if (ISSET_PIXCOLOR (Color_cursor)) - ccol1 = Color_cursor; + if (options & Opt_cursorUnderline) + *crp ^= RS_Uline; else + { + *crp ^= RS_RVid; + +#ifndef NO_CURSORCOLOR + cc1 = *crp & (RS_fgMask | RS_bgMask); + if (ISSET_PIXCOLOR (Color_cursor)) + ccol1 = Color_cursor; + else #ifdef CURSOR_COLOR_IS_RENDITION_COLOR - ccol1 = GET_FGCOLOR (rstyle); + ccol1 = GET_FGCOLOR (rstyle); #else - ccol1 = Color_fg; + ccol1 = Color_fg; #endif - if (ISSET_PIXCOLOR (Color_cursor2)) - ccol2 = Color_cursor2; - else + if (ISSET_PIXCOLOR (Color_cursor2)) + ccol2 = Color_cursor2; + else #ifdef CURSOR_COLOR_IS_RENDITION_COLOR - ccol2 = GET_BGCOLOR (rstyle); + ccol2 = GET_BGCOLOR (rstyle); #else - ccol2 = Color_bg; + ccol2 = Color_bg; #endif - *crp = SET_FGCOLOR (*crp, ccol1); - *crp = SET_BGCOLOR (*crp, ccol2); + *crp = SET_FGCOLOR (*crp, ccol1); + *crp = SET_BGCOLOR (*crp, ccol2); #endif + } } } @@ -2416,10 +2423,15 @@ { if (TermWin.focus) { - *crp ^= RS_RVid; + if (options & Opt_cursorUnderline) + *crp ^= RS_Uline; + else + { + *crp ^= RS_RVid; #ifndef NO_CURSORCOLOR - *crp = (*crp & ~ (RS_fgMask | RS_bgMask)) | cc1; + *crp = (*crp & ~ (RS_fgMask | RS_bgMask)) | cc1; #endif + } } else if (oldcursor.row >= 0) { @@ -2902,9 +2914,6 @@ rxvt_term::selection_request_other (Atom target, int selnum) { Atom sel; -#ifdef DEBUG_SELECT - char *debug_xa_names[] = { "PRIMARY", "SECONDARY", "CLIPBOARD" }; -#endif selection_type |= selnum;