Merge branch 'obsd-master' into master

This commit is contained in:
Thomas Adam
2021-03-12 10:01:18 +00:00
2 changed files with 28 additions and 14 deletions

View File

@ -153,8 +153,10 @@ screen_reset_tabs(struct screen *s)
void void
screen_set_cursor_style(struct screen *s, u_int style) screen_set_cursor_style(struct screen *s, u_int style)
{ {
if (style <= 6) if (style <= 6) {
s->cstyle = style; s->cstyle = style;
s->mode &= ~MODE_BLINKING;
}
} }
/* Set screen cursor colour. */ /* Set screen cursor colour. */

38
tty.c
View File

@ -670,19 +670,10 @@ tty_update_mode(struct tty *tty, int mode, struct screen *s)
if (changed != 0) if (changed != 0)
log_debug("%s: update mode %x to %x", c->name, tty->mode, mode); log_debug("%s: update mode %x to %x", c->name, tty->mode, mode);
if (changed & MODE_BLINKING) { /*
if (tty_term_has(tty->term, TTYC_CVVIS)) * The cursor blinking flag can be reset by setting the cursor style, so
tty_putcode(tty, TTYC_CVVIS); * set the style first.
else */
tty_putcode(tty, TTYC_CNORM);
changed |= MODE_CURSOR;
}
if (changed & MODE_CURSOR) {
if (mode & MODE_CURSOR)
tty_putcode(tty, TTYC_CNORM);
else
tty_putcode(tty, TTYC_CIVIS);
}
if (s != NULL && tty->cstyle != s->cstyle) { if (s != NULL && tty->cstyle != s->cstyle) {
if (tty_term_has(tty->term, TTYC_SS)) { if (tty_term_has(tty->term, TTYC_SS)) {
if (s->cstyle == 0 && tty_term_has(tty->term, TTYC_SE)) if (s->cstyle == 0 && tty_term_has(tty->term, TTYC_SE))
@ -691,7 +682,28 @@ tty_update_mode(struct tty *tty, int mode, struct screen *s)
tty_putcode1(tty, TTYC_SS, s->cstyle); tty_putcode1(tty, TTYC_SS, s->cstyle);
} }
tty->cstyle = s->cstyle; tty->cstyle = s->cstyle;
changed |= (MODE_CURSOR|MODE_BLINKING);
} }
/*
* Cursor invisible (RM ?25) overrides cursor blinking (SM ?12 or RM
* 34), and we need to be careful not send cnorm after cvvis since it
* can undo it.
*/
if (changed & (MODE_CURSOR|MODE_BLINKING)) {
log_debug("%s: cursor %s, %sblinking", __func__,
(mode & MODE_CURSOR) ? "on" : "off",
(mode & MODE_BLINKING) ? "" : "not ");
if (~mode & MODE_CURSOR)
tty_putcode(tty, TTYC_CIVIS);
else if (mode & MODE_BLINKING) {
tty_putcode(tty, TTYC_CNORM);
if (tty_term_has(tty->term, TTYC_CVVIS))
tty_putcode(tty, TTYC_CVVIS);
} else
tty_putcode(tty, TTYC_CNORM);
}
if ((changed & ALL_MOUSE_MODES) && if ((changed & ALL_MOUSE_MODES) &&
tty_term_has(tty->term, TTYC_KMOUS)) { tty_term_has(tty->term, TTYC_KMOUS)) {
/* /*