mirror of
https://github.com/tmate-io/tmate.git
synced 2025-02-17 02:41:07 +01:00
Support blinking cursor mode, both the xterm CSI ?12 h/l and (the
backwards) screen CSI 34 h/l. From Guanpeng Xu.
This commit is contained in:
parent
d451502676
commit
16bdd970dc
12
input.c
12
input.c
@ -1342,6 +1342,9 @@ input_csi_dispatch_rm(struct input_ctx *ictx)
|
|||||||
case 4: /* IRM */
|
case 4: /* IRM */
|
||||||
screen_write_mode_clear(&ictx->ctx, MODE_INSERT);
|
screen_write_mode_clear(&ictx->ctx, MODE_INSERT);
|
||||||
break;
|
break;
|
||||||
|
case 34:
|
||||||
|
screen_write_mode_set(&ictx->ctx, MODE_BLINKING);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
log_debug("%s: unknown '%c'", __func__, ictx->ch);
|
log_debug("%s: unknown '%c'", __func__, ictx->ch);
|
||||||
break;
|
break;
|
||||||
@ -1368,6 +1371,9 @@ input_csi_dispatch_rm_private(struct input_ctx *ictx)
|
|||||||
case 7: /* DECAWM */
|
case 7: /* DECAWM */
|
||||||
screen_write_mode_clear(&ictx->ctx, MODE_WRAP);
|
screen_write_mode_clear(&ictx->ctx, MODE_WRAP);
|
||||||
break;
|
break;
|
||||||
|
case 12:
|
||||||
|
screen_write_mode_clear(&ictx->ctx, MODE_BLINKING);
|
||||||
|
break;
|
||||||
case 25: /* TCEM */
|
case 25: /* TCEM */
|
||||||
screen_write_mode_clear(&ictx->ctx, MODE_CURSOR);
|
screen_write_mode_clear(&ictx->ctx, MODE_CURSOR);
|
||||||
break;
|
break;
|
||||||
@ -1413,6 +1419,9 @@ input_csi_dispatch_sm(struct input_ctx *ictx)
|
|||||||
case 4: /* IRM */
|
case 4: /* IRM */
|
||||||
screen_write_mode_set(&ictx->ctx, MODE_INSERT);
|
screen_write_mode_set(&ictx->ctx, MODE_INSERT);
|
||||||
break;
|
break;
|
||||||
|
case 34:
|
||||||
|
screen_write_mode_clear(&ictx->ctx, MODE_BLINKING);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
log_debug("%s: unknown '%c'", __func__, ictx->ch);
|
log_debug("%s: unknown '%c'", __func__, ictx->ch);
|
||||||
break;
|
break;
|
||||||
@ -1439,6 +1448,9 @@ input_csi_dispatch_sm_private(struct input_ctx *ictx)
|
|||||||
case 7: /* DECAWM */
|
case 7: /* DECAWM */
|
||||||
screen_write_mode_set(&ictx->ctx, MODE_WRAP);
|
screen_write_mode_set(&ictx->ctx, MODE_WRAP);
|
||||||
break;
|
break;
|
||||||
|
case 12:
|
||||||
|
screen_write_mode_set(&ictx->ctx, MODE_BLINKING);
|
||||||
|
break;
|
||||||
case 25: /* TCEM */
|
case 25: /* TCEM */
|
||||||
screen_write_mode_set(&ictx->ctx, MODE_CURSOR);
|
screen_write_mode_set(&ictx->ctx, MODE_CURSOR);
|
||||||
break;
|
break;
|
||||||
|
3
tmux.h
3
tmux.h
@ -175,6 +175,7 @@ enum tty_code_code {
|
|||||||
TTYC_CUP, /* cursor_address, cm */
|
TTYC_CUP, /* cursor_address, cm */
|
||||||
TTYC_CUU, /* parm_up_cursor, UP */
|
TTYC_CUU, /* parm_up_cursor, UP */
|
||||||
TTYC_CUU1, /* cursor_up, up */
|
TTYC_CUU1, /* cursor_up, up */
|
||||||
|
TTYC_CVVIS, /* cursor_visible, vs */
|
||||||
TTYC_DCH, /* parm_dch, DC */
|
TTYC_DCH, /* parm_dch, DC */
|
||||||
TTYC_DCH1, /* delete_character, dc */
|
TTYC_DCH1, /* delete_character, dc */
|
||||||
TTYC_DIM, /* enter_dim_mode, mh */
|
TTYC_DIM, /* enter_dim_mode, mh */
|
||||||
@ -600,7 +601,7 @@ struct mode_key_table {
|
|||||||
#define MODE_WRAP 0x10 /* whether lines wrap */
|
#define MODE_WRAP 0x10 /* whether lines wrap */
|
||||||
#define MODE_MOUSE_STANDARD 0x20
|
#define MODE_MOUSE_STANDARD 0x20
|
||||||
#define MODE_MOUSE_BUTTON 0x40
|
#define MODE_MOUSE_BUTTON 0x40
|
||||||
/* 0x80 unused */
|
#define MODE_BLINKING 0x80
|
||||||
#define MODE_MOUSE_UTF8 0x100
|
#define MODE_MOUSE_UTF8 0x100
|
||||||
#define MODE_MOUSE_SGR 0x200
|
#define MODE_MOUSE_SGR 0x200
|
||||||
#define MODE_BRACKETPASTE 0x400
|
#define MODE_BRACKETPASTE 0x400
|
||||||
|
@ -54,6 +54,7 @@ const struct tty_term_code_entry tty_term_codes[NTTYCODE] = {
|
|||||||
{ TTYC_CUP, TTYCODE_STRING, "cup" },
|
{ TTYC_CUP, TTYCODE_STRING, "cup" },
|
||||||
{ TTYC_CUU, TTYCODE_STRING, "cuu" },
|
{ TTYC_CUU, TTYCODE_STRING, "cuu" },
|
||||||
{ TTYC_CUU1, TTYCODE_STRING, "cuu1" },
|
{ TTYC_CUU1, TTYCODE_STRING, "cuu1" },
|
||||||
|
{ TTYC_CVVIS, TTYCODE_STRING, "cvvis" },
|
||||||
{ TTYC_DCH, TTYCODE_STRING, "dch" },
|
{ TTYC_DCH, TTYCODE_STRING, "dch" },
|
||||||
{ TTYC_DCH1, TTYCODE_STRING, "dch1" },
|
{ TTYC_DCH1, TTYCODE_STRING, "dch1" },
|
||||||
{ TTYC_DIM, TTYCODE_STRING, "dim" },
|
{ TTYC_DIM, TTYCODE_STRING, "dim" },
|
||||||
|
12
tty.c
12
tty.c
@ -482,10 +482,14 @@ tty_update_mode(struct tty *tty, int mode, struct screen *s)
|
|||||||
mode &= ~MODE_CURSOR;
|
mode &= ~MODE_CURSOR;
|
||||||
|
|
||||||
changed = mode ^ tty->mode;
|
changed = mode ^ tty->mode;
|
||||||
if (changed & MODE_CURSOR) {
|
if (changed & (MODE_CURSOR|MODE_BLINKING)) {
|
||||||
if (mode & MODE_CURSOR)
|
if (mode & MODE_CURSOR) {
|
||||||
tty_putcode(tty, TTYC_CNORM);
|
if (mode & MODE_BLINKING &&
|
||||||
else
|
tty_term_has(tty->term, TTYC_CVVIS))
|
||||||
|
tty_putcode(tty, TTYC_CVVIS);
|
||||||
|
else
|
||||||
|
tty_putcode(tty, TTYC_CNORM);
|
||||||
|
} else
|
||||||
tty_putcode(tty, TTYC_CIVIS);
|
tty_putcode(tty, TTYC_CIVIS);
|
||||||
}
|
}
|
||||||
if (tty->cstyle != s->cstyle) {
|
if (tty->cstyle != s->cstyle) {
|
||||||
|
Loading…
Reference in New Issue
Block a user