when a window was closed.
- do not (wrongly) adjust the virtual line length inside
scr_insdel_chars/ERASE (Miroslav Lichvar).
+ - fix an issue where wide tab characters caused character shifts
+ when part of them was deleted (tracked down by Miroslav Lichvar).
- remove bogus "setuid/setgid security issues" from rxvt.1.pod, they
no longer apply.
- the urgency hint is now cleared on both focus in and focus out.
rend_t rend = l.r[col] & ~RS_baseattrMask;
rend = SET_FONT (rend, FONTSET (rend)->find_font (' '));
- // found begin, nuke
+ // found start, nuke
do {
l.t[col] = ' ';
l.r[col] = rend;
line->touch ();
line->is_longer (0);
- // nuke wide char at beginning
+ // nuke wide spanning the start
if (line->t[screen.cur.col] == NOCHAR)
scr_kill_char (*line, screen.cur.col);
break;
case DELETE:
- {
- line->l = max (line->l - count, 0);
-
- rend_t tr = line->r[ncol - 1] & (RS_fgMask | RS_bgMask | RS_baseattrMask);
+ line->l = max (line->l - count, 0);
- for (int col = screen.cur.col; (col + count) < ncol; col++)
- {
- line->t[col] = line->t[col + count];
- line->r[col] = line->r[col + count];
- }
+ // nuke wide char spanning the end
+ if (screen.cur.col + count < ncol && line->t[screen.cur.col + count] == NOCHAR)
+ scr_kill_char (*line, screen.cur.col + count);
- // nuke wide char at the end
- if (line->t[screen.cur.col] == NOCHAR)
- scr_kill_char (*line, screen.cur.col);
+ for (int col = screen.cur.col; (col + count) < ncol; col++)
+ {
+ line->t[col] = line->t[col + count];
+ line->r[col] = line->r[col + count];
+ }
- scr_blank_line (*line, ncol - count, count, tr);
+ scr_blank_line (*line, ncol - count, count,
+ line->r[ncol - 1] & (RS_fgMask | RS_bgMask | RS_baseattrMask));
- if (selection.op && current_screen == selection.screen
- && ROWCOL_IN_ROW_AT_OR_AFTER (selection.beg, screen.cur))
- {
- if (selection.end.row != screen.cur.row
- || (screen.cur.col >= selection.beg.col - count)
- || selection.end.col >= ncol)
- CLEAR_SELECTION ();
- else
- {
- /* shift selection */
- selection.beg.col -= count;
- selection.mark.col -= count; /* XXX: yes? */
- selection.end.col -= count;
- }
- }
+ if (selection.op && current_screen == selection.screen
+ && ROWCOL_IN_ROW_AT_OR_AFTER (selection.beg, screen.cur))
+ {
+ if (selection.end.row != screen.cur.row
+ || (screen.cur.col >= selection.beg.col - count)
+ || selection.end.col >= ncol)
+ CLEAR_SELECTION ();
+ else
+ {
+ /* shift selection */
+ selection.beg.col -= count;
+ selection.mark.col -= count; /* XXX: yes? */
+ selection.end.col -= count;
+ }
}
break;