mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-03 16:46:18 +00: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:
		
							
								
								
									
										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) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user