mirror of
https://github.com/tmate-io/tmate.git
synced 2024-11-23 00:23:08 +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 */
|
||||
screen_write_mode_clear(&ictx->ctx, MODE_INSERT);
|
||||
break;
|
||||
case 34:
|
||||
screen_write_mode_set(&ictx->ctx, MODE_BLINKING);
|
||||
break;
|
||||
default:
|
||||
log_debug("%s: unknown '%c'", __func__, ictx->ch);
|
||||
break;
|
||||
@ -1368,6 +1371,9 @@ input_csi_dispatch_rm_private(struct input_ctx *ictx)
|
||||
case 7: /* DECAWM */
|
||||
screen_write_mode_clear(&ictx->ctx, MODE_WRAP);
|
||||
break;
|
||||
case 12:
|
||||
screen_write_mode_clear(&ictx->ctx, MODE_BLINKING);
|
||||
break;
|
||||
case 25: /* TCEM */
|
||||
screen_write_mode_clear(&ictx->ctx, MODE_CURSOR);
|
||||
break;
|
||||
@ -1413,6 +1419,9 @@ input_csi_dispatch_sm(struct input_ctx *ictx)
|
||||
case 4: /* IRM */
|
||||
screen_write_mode_set(&ictx->ctx, MODE_INSERT);
|
||||
break;
|
||||
case 34:
|
||||
screen_write_mode_clear(&ictx->ctx, MODE_BLINKING);
|
||||
break;
|
||||
default:
|
||||
log_debug("%s: unknown '%c'", __func__, ictx->ch);
|
||||
break;
|
||||
@ -1439,6 +1448,9 @@ input_csi_dispatch_sm_private(struct input_ctx *ictx)
|
||||
case 7: /* DECAWM */
|
||||
screen_write_mode_set(&ictx->ctx, MODE_WRAP);
|
||||
break;
|
||||
case 12:
|
||||
screen_write_mode_set(&ictx->ctx, MODE_BLINKING);
|
||||
break;
|
||||
case 25: /* TCEM */
|
||||
screen_write_mode_set(&ictx->ctx, MODE_CURSOR);
|
||||
break;
|
||||
|
3
tmux.h
3
tmux.h
@ -175,6 +175,7 @@ enum tty_code_code {
|
||||
TTYC_CUP, /* cursor_address, cm */
|
||||
TTYC_CUU, /* parm_up_cursor, UP */
|
||||
TTYC_CUU1, /* cursor_up, up */
|
||||
TTYC_CVVIS, /* cursor_visible, vs */
|
||||
TTYC_DCH, /* parm_dch, DC */
|
||||
TTYC_DCH1, /* delete_character, dc */
|
||||
TTYC_DIM, /* enter_dim_mode, mh */
|
||||
@ -600,7 +601,7 @@ struct mode_key_table {
|
||||
#define MODE_WRAP 0x10 /* whether lines wrap */
|
||||
#define MODE_MOUSE_STANDARD 0x20
|
||||
#define MODE_MOUSE_BUTTON 0x40
|
||||
/* 0x80 unused */
|
||||
#define MODE_BLINKING 0x80
|
||||
#define MODE_MOUSE_UTF8 0x100
|
||||
#define MODE_MOUSE_SGR 0x200
|
||||
#define MODE_BRACKETPASTE 0x400
|
||||
|
@ -54,6 +54,7 @@ const struct tty_term_code_entry tty_term_codes[NTTYCODE] = {
|
||||
{ TTYC_CUP, TTYCODE_STRING, "cup" },
|
||||
{ TTYC_CUU, TTYCODE_STRING, "cuu" },
|
||||
{ TTYC_CUU1, TTYCODE_STRING, "cuu1" },
|
||||
{ TTYC_CVVIS, TTYCODE_STRING, "cvvis" },
|
||||
{ TTYC_DCH, TTYCODE_STRING, "dch" },
|
||||
{ TTYC_DCH1, TTYCODE_STRING, "dch1" },
|
||||
{ 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;
|
||||
|
||||
changed = mode ^ tty->mode;
|
||||
if (changed & MODE_CURSOR) {
|
||||
if (mode & MODE_CURSOR)
|
||||
tty_putcode(tty, TTYC_CNORM);
|
||||
else
|
||||
if (changed & (MODE_CURSOR|MODE_BLINKING)) {
|
||||
if (mode & MODE_CURSOR) {
|
||||
if (mode & MODE_BLINKING &&
|
||||
tty_term_has(tty->term, TTYC_CVVIS))
|
||||
tty_putcode(tty, TTYC_CVVIS);
|
||||
else
|
||||
tty_putcode(tty, TTYC_CNORM);
|
||||
} else
|
||||
tty_putcode(tty, TTYC_CIVIS);
|
||||
}
|
||||
if (tty->cstyle != s->cstyle) {
|
||||
|
Loading…
Reference in New Issue
Block a user