… | |
… | |
572 | * Change the colour for following text |
572 | * Change the colour for following text |
573 | */ |
573 | */ |
574 | void |
574 | void |
575 | rxvt_term::scr_color (unsigned int color, int fgbg) |
575 | rxvt_term::scr_color (unsigned int color, int fgbg) |
576 | { |
576 | { |
577 | if (color > maxTermCOLOR) |
577 | if (!IN_RANGE_INC (color, minCOLOR, maxTermCOLOR)) |
578 | color = fgbg; |
578 | color = fgbg; |
579 | |
579 | |
580 | if (fgbg == Color_fg) |
580 | if (fgbg == Color_fg) |
581 | rstyle = SET_FGCOLOR (rstyle, color); |
581 | rstyle = SET_FGCOLOR (rstyle, color); |
582 | else |
582 | else |
… | |
… | |
2381 | /* |
2381 | /* |
2382 | * H: cleanup selection |
2382 | * H: cleanup selection |
2383 | */ |
2383 | */ |
2384 | scr_reverse_selection (); |
2384 | scr_reverse_selection (); |
2385 | |
2385 | |
2386 | if (refresh_type & SMOOTH_REFRESH) |
|
|
2387 | XFlush (display->display); |
|
|
2388 | |
|
|
2389 | num_scr = 0; |
2386 | num_scr = 0; |
2390 | num_scr_allow = 1; |
2387 | num_scr_allow = 1; |
2391 | } |
2388 | } |
2392 | |
2389 | |
2393 | void |
2390 | void |
… | |
… | |
2457 | |
2454 | |
2458 | if (really) |
2455 | if (really) |
2459 | XClearWindow (display->display, vt); |
2456 | XClearWindow (display->display, vt); |
2460 | } |
2457 | } |
2461 | |
2458 | |
|
|
2459 | void |
|
|
2460 | rxvt_term::scr_xor_rect (int beg_row, int beg_col, int end_row, int end_col, rend_t rstyle1, rend_t rstyle2) |
|
|
2461 | { |
|
|
2462 | int view_end = -view_start + nrow; |
|
|
2463 | int row, col; |
|
|
2464 | |
|
|
2465 | for (row = max (beg_row, -view_start); row <= min (end_row, view_end); row++) |
|
|
2466 | { |
|
|
2467 | text_t *stp = ROW(row).t; |
|
|
2468 | rend_t *srp = ROW(row).r; |
|
|
2469 | |
|
|
2470 | for (col = beg_col; col < end_col; col++) |
|
|
2471 | srp[col] ^= rstyle1; |
|
|
2472 | |
|
|
2473 | while (col-- > beg_col && (stp[col] == NOCHAR || unicode::is_space (stp[col]))) |
|
|
2474 | srp[col] ^= rstyle2; |
|
|
2475 | |
|
|
2476 | if (++col < end_col) |
|
|
2477 | srp[col] ^= rstyle2; |
|
|
2478 | } |
|
|
2479 | } |
|
|
2480 | |
|
|
2481 | void |
|
|
2482 | rxvt_term::scr_xor_span (int beg_row, int beg_col, int end_row, int end_col, rend_t rstyle) |
|
|
2483 | { |
|
|
2484 | int view_end = -view_start + nrow; |
|
|
2485 | int row, col; |
|
|
2486 | |
|
|
2487 | if (beg_row >= -view_start) |
|
|
2488 | { |
|
|
2489 | col = beg_col; |
|
|
2490 | row = beg_row; |
|
|
2491 | } |
|
|
2492 | else |
|
|
2493 | { |
|
|
2494 | col = 0; |
|
|
2495 | row = -view_start; |
|
|
2496 | } |
|
|
2497 | |
|
|
2498 | for (; row < min (end_row, view_end); row++, col = 0) |
|
|
2499 | for (rend_t *srp = ROW(row).r; col < ncol; col++) |
|
|
2500 | srp[col] ^= rstyle; |
|
|
2501 | |
|
|
2502 | if (row == end_row) |
|
|
2503 | for (rend_t *srp = ROW(row).r; col < end_col; col++) |
|
|
2504 | srp[col] ^= rstyle; |
|
|
2505 | } |
|
|
2506 | |
2462 | /* ------------------------------------------------------------------------- */ |
2507 | /* ------------------------------------------------------------------------- */ |
2463 | void |
2508 | void |
2464 | rxvt_term::scr_reverse_selection () |
2509 | rxvt_term::scr_reverse_selection () |
2465 | { |
2510 | { |
2466 | if (selection.op |
2511 | if (selection.op |
2467 | && current_screen == selection.screen |
2512 | && current_screen == selection.screen |
2468 | && selection.end.row >= -view_start) |
2513 | && selection.end.row >= -view_start) |
2469 | { |
2514 | { |
2470 | int view_end = -view_start + nrow; |
|
|
2471 | int row, col; |
|
|
2472 | |
|
|
2473 | #if ENABLE_FRILLS |
2515 | #if ENABLE_FRILLS |
2474 | if (selection.rect) |
2516 | if (selection.rect) |
2475 | { |
2517 | scr_xor_rect (selection.beg.row, selection.beg.col, |
2476 | for (row = max (selection.beg.row, -view_start); row <= min (selection.end.row, view_end); row++) |
2518 | selection.end.row, selection.end.col, |
2477 | { |
2519 | RS_RVid, RS_RVid | RS_Uline); |
2478 | text_t *stp = ROW(row).t; |
|
|
2479 | rend_t *srp = ROW(row).r; |
|
|
2480 | |
|
|
2481 | for (col = selection.beg.col; col < selection.end.col; col++) |
|
|
2482 | srp[col] ^= RS_RVid; |
|
|
2483 | |
|
|
2484 | while (col-- > selection.beg.col && (stp[col] == NOCHAR || unicode::is_space (stp[col]))) |
|
|
2485 | srp[col] ^= RS_RVid | RS_Uline; |
|
|
2486 | |
|
|
2487 | if (++col < selection.end.col) |
|
|
2488 | srp[col] ^= RS_RVid | RS_Uline; |
|
|
2489 | } |
|
|
2490 | } |
|
|
2491 | else |
2520 | else |
2492 | #endif |
2521 | #endif |
2493 | { |
2522 | scr_xor_span (selection.beg.row, selection.beg.col, |
2494 | if (selection.beg.row >= -view_start) |
2523 | selection.end.row, selection.end.col, |
2495 | { |
2524 | RS_RVid); |
2496 | col = selection.beg.col; |
|
|
2497 | row = selection.beg.row; |
|
|
2498 | } |
|
|
2499 | else |
|
|
2500 | { |
|
|
2501 | col = 0; |
|
|
2502 | row = -view_start; |
|
|
2503 | } |
|
|
2504 | |
|
|
2505 | for (; row < min (selection.end.row, view_end); row++, col = 0) |
|
|
2506 | for (rend_t *srp = ROW(row).r; col < ncol; col++) |
|
|
2507 | srp[col] ^= RS_RVid; |
|
|
2508 | |
|
|
2509 | if (row == selection.end.row) |
|
|
2510 | for (rend_t *srp = ROW(row).r; col < selection.end.col; col++) |
|
|
2511 | srp[col] ^= RS_RVid; |
|
|
2512 | } |
|
|
2513 | } |
2525 | } |
2514 | } |
2526 | } |
2515 | |
2527 | |
2516 | /* ------------------------------------------------------------------------- */ |
2528 | /* ------------------------------------------------------------------------- */ |
2517 | /* |
2529 | /* |
… | |
… | |
3032 | void |
3044 | void |
3033 | rxvt_term::selection_click (int clicks, int x, int y) |
3045 | rxvt_term::selection_click (int clicks, int x, int y) |
3034 | { |
3046 | { |
3035 | clicks = ((clicks - 1) % 3) + 1; |
3047 | clicks = ((clicks - 1) % 3) + 1; |
3036 | selection.clicks = clicks; /* save clicks so extend will work */ |
3048 | selection.clicks = clicks; /* save clicks so extend will work */ |
|
|
3049 | |
|
|
3050 | if (clicks == 2 && !selection.rect |
|
|
3051 | && HOOK_INVOKE ((this, HOOK_SEL_EXTEND, DT_END))) |
|
|
3052 | { |
|
|
3053 | MEvent.clicks = 1; // what a mess |
|
|
3054 | return; |
|
|
3055 | } |
3037 | |
3056 | |
3038 | selection_start_colrow (Pixel2Col (x), Pixel2Row (y)); |
3057 | selection_start_colrow (Pixel2Col (x), Pixel2Row (y)); |
3039 | |
3058 | |
3040 | if (clicks == 2 || clicks == 3) |
3059 | if (clicks == 2 || clicks == 3) |
3041 | selection_extend_colrow (selection.mark.col, |
3060 | selection_extend_colrow (selection.mark.col, |
… | |
… | |
3337 | else if (selection.clicks == 2) |
3356 | else if (selection.clicks == 2) |
3338 | { |
3357 | { |
3339 | if (ROWCOL_IS_AFTER (selection.end, selection.beg)) |
3358 | if (ROWCOL_IS_AFTER (selection.end, selection.beg)) |
3340 | selection.end.col--; |
3359 | selection.end.col--; |
3341 | |
3360 | |
3342 | if (!HOOK_INVOKE ((this, HOOK_SEL_EXTEND, DT_END))) |
|
|
3343 | { |
|
|
3344 | selection_delimit_word (UP, &selection.beg, &selection.beg); |
3361 | selection_delimit_word (UP, &selection.beg, &selection.beg); |
3345 | selection_delimit_word (DN, &selection.end, &selection.end); |
3362 | selection_delimit_word (DN, &selection.end, &selection.end); |
3346 | } |
|
|
3347 | } |
3363 | } |
3348 | else if (selection.clicks == 3) |
3364 | else if (selection.clicks == 3) |
3349 | { |
3365 | { |
3350 | #if ENABLE_FRILLS |
3366 | #if ENABLE_FRILLS |
3351 | if (OPTION (Opt_tripleclickwords)) |
3367 | if (OPTION (Opt_tripleclickwords)) |