mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Sync OpenBSD patchset 916:
Support DECSCUSR sequence to set the cursor style with two new terminfo(5) extensions, Cs and Csr. Written by Ailin Nemui.
This commit is contained in:
		
							
								
								
									
										8
									
								
								input.c
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								input.c
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: input.c,v 1.118 2011-05-22 16:25:02 tcunha Exp $ */
 | 
			
		||||
/* $Id: input.c,v 1.119 2011-05-22 16:26:09 tcunha Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -126,6 +126,7 @@ enum input_csi_type {
 | 
			
		||||
	INPUT_CSI_CUU,
 | 
			
		||||
	INPUT_CSI_DA,
 | 
			
		||||
	INPUT_CSI_DCH,
 | 
			
		||||
	INPUT_CSI_DECSCUSR,
 | 
			
		||||
	INPUT_CSI_DECSTBM,
 | 
			
		||||
	INPUT_CSI_DL,
 | 
			
		||||
	INPUT_CSI_DSR,
 | 
			
		||||
@@ -168,6 +169,7 @@ const struct input_table_entry input_csi_table[] = {
 | 
			
		||||
	{ 'l', "?", INPUT_CSI_RM_PRIVATE },
 | 
			
		||||
	{ 'm', "",  INPUT_CSI_SGR },
 | 
			
		||||
	{ 'n', "",  INPUT_CSI_DSR },
 | 
			
		||||
	{ 'q', " ", INPUT_CSI_DECSCUSR },
 | 
			
		||||
	{ 'r', "",  INPUT_CSI_DECSTBM },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -1259,6 +1261,10 @@ input_csi_dispatch(struct input_ctx *ictx)
 | 
			
		||||
		n = input_get(ictx, 0, 1, 1);
 | 
			
		||||
		screen_write_cursormove(sctx, s->cx, n - 1);
 | 
			
		||||
		break;
 | 
			
		||||
	case INPUT_CSI_DECSCUSR:
 | 
			
		||||
		n = input_get(ictx, 0, 0, 0);
 | 
			
		||||
		screen_set_cursor_style(s, n);
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return (0);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: options-table.c,v 1.11 2011-05-22 16:25:02 tcunha Exp $ */
 | 
			
		||||
/* $Id: options-table.c,v 1.12 2011-05-22 16:26:09 tcunha Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2011 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -367,6 +367,7 @@ const struct options_table_entry session_options_table[] = {
 | 
			
		||||
	  .default_str = "*88col*:colors=88,*256col*:colors=256"
 | 
			
		||||
	                 ",xterm*:XT:Ms=\\E]52;%p1%s;%p2%s\\007"
 | 
			
		||||
	                 ":Cc=\\E]12;%p1%s\\007:Cr=\\E]112\\007"
 | 
			
		||||
			 ":Cs=\\E[%p1%d q:Csr=\\E[2 q"
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	{ .name = "update-environment",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								screen.c
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								screen.c
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: screen.c,v 1.105 2011-05-22 16:25:02 tcunha Exp $ */
 | 
			
		||||
/* $Id: screen.c,v 1.106 2011-05-22 16:26:09 tcunha Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -41,6 +41,7 @@ screen_init(struct screen *s, u_int sx, u_int sy, u_int hlimit)
 | 
			
		||||
	else
 | 
			
		||||
		s->title = xstrdup("");
 | 
			
		||||
 | 
			
		||||
	s->cstyle = 0;
 | 
			
		||||
	s->ccolour = xstrdup("");
 | 
			
		||||
	s->tabs = NULL;
 | 
			
		||||
 | 
			
		||||
@@ -92,6 +93,14 @@ screen_reset_tabs(struct screen *s)
 | 
			
		||||
		bit_set(s->tabs, i);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Set screen cursor style. */
 | 
			
		||||
void
 | 
			
		||||
screen_set_cursor_style(struct screen *s, u_int style)
 | 
			
		||||
{
 | 
			
		||||
	if (style <= 4)
 | 
			
		||||
		s->cstyle = style;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Set screen cursor colour. */
 | 
			
		||||
void
 | 
			
		||||
screen_set_cursor_colour(struct screen *s, const char *colour_string)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								tmux.1
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								tmux.1
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
.\" $Id: tmux.1,v 1.315 2011-05-22 16:25:02 tcunha Exp $
 | 
			
		||||
.\" $Id: tmux.1,v 1.316 2011-05-22 16:26:09 tcunha Exp $
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
.\"
 | 
			
		||||
@@ -2836,6 +2836,19 @@ See the
 | 
			
		||||
option above and the
 | 
			
		||||
.Xr xterm 1
 | 
			
		||||
man page.
 | 
			
		||||
.It Em Cs, Csr
 | 
			
		||||
Change the cursor style.
 | 
			
		||||
If set allows a sequence such as:
 | 
			
		||||
.Bd -literal -offset indent
 | 
			
		||||
$ printf '\e033[4 q'
 | 
			
		||||
.Ed
 | 
			
		||||
.Pp
 | 
			
		||||
To change the cursor to an underline.
 | 
			
		||||
If
 | 
			
		||||
.Em Csr
 | 
			
		||||
is set, it will be used to reset the cursor style instead
 | 
			
		||||
of
 | 
			
		||||
.Em Cs .
 | 
			
		||||
.It Em Cc, Cr
 | 
			
		||||
The first takes one string argument and is used to set the cursor colour;
 | 
			
		||||
the second takes no arguments and restores the default cursor colour.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								tmux.h
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: tmux.h,v 1.626 2011-05-22 16:25:02 tcunha Exp $ */
 | 
			
		||||
/* $Id: tmux.h,v 1.627 2011-05-22 16:26:09 tcunha Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -185,7 +185,9 @@ enum tty_code_code {
 | 
			
		||||
	TTYC_CNORM,	/* cursor_normal, ve */
 | 
			
		||||
	TTYC_COLORS,	/* max_colors, Co */
 | 
			
		||||
	TTYC_CR,	/* restore cursor colour, Cr */
 | 
			
		||||
	TTYC_CS1,	/* set cursor style, Cs */
 | 
			
		||||
	TTYC_CSR,	/* change_scroll_region, cs */
 | 
			
		||||
	TTYC_CSR1,	/* reset cursor style, Csr */
 | 
			
		||||
	TTYC_CUB,	/* parm_left_cursor, LE */
 | 
			
		||||
	TTYC_CUB1,	/* cursor_left, le */
 | 
			
		||||
	TTYC_CUD,	/* parm_down_cursor, DO */
 | 
			
		||||
@@ -712,6 +714,7 @@ struct screen {
 | 
			
		||||
	u_int		 cx;		/* cursor x */
 | 
			
		||||
	u_int		 cy;		/* cursor y */
 | 
			
		||||
 | 
			
		||||
	u_int		 cstyle;	/* cursor style */
 | 
			
		||||
	char		*ccolour;	/* cursor colour string */
 | 
			
		||||
 | 
			
		||||
	u_int		 rupper;	/* scroll region top */
 | 
			
		||||
@@ -1010,6 +1013,7 @@ struct tty {
 | 
			
		||||
 | 
			
		||||
	u_int		 cx;
 | 
			
		||||
	u_int		 cy;
 | 
			
		||||
	u_int		 cstyle;
 | 
			
		||||
	char		*ccolour;
 | 
			
		||||
 | 
			
		||||
	int		 mode;
 | 
			
		||||
@@ -1846,6 +1850,7 @@ void	 screen_init(struct screen *, u_int, u_int, u_int);
 | 
			
		||||
void	 screen_reinit(struct screen *);
 | 
			
		||||
void	 screen_free(struct screen *);
 | 
			
		||||
void	 screen_reset_tabs(struct screen *);
 | 
			
		||||
void	 screen_set_cursor_style(struct screen *, u_int);
 | 
			
		||||
void	 screen_set_cursor_colour(struct screen *, const char *);
 | 
			
		||||
void	 screen_set_title(struct screen *, const char *);
 | 
			
		||||
void	 screen_resize(struct screen *, u_int, u_int);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: tty-term.c,v 1.50 2011-05-22 16:25:02 tcunha Exp $ */
 | 
			
		||||
/* $Id: tty-term.c,v 1.51 2011-05-22 16:26:09 tcunha Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -47,7 +47,9 @@ const struct tty_term_code_entry tty_term_codes[NTTYCODE] = {
 | 
			
		||||
	{ TTYC_CNORM, TTYCODE_STRING, "cnorm" },
 | 
			
		||||
	{ TTYC_COLORS, TTYCODE_NUMBER, "colors" },
 | 
			
		||||
	{ TTYC_CR, TTYCODE_STRING, "Cr" },
 | 
			
		||||
	{ TTYC_CS1, TTYCODE_STRING, "Cs" },
 | 
			
		||||
	{ TTYC_CSR, TTYCODE_STRING, "csr" },
 | 
			
		||||
	{ TTYC_CSR1, TTYCODE_STRING, "Csr" },
 | 
			
		||||
	{ TTYC_CUB, TTYCODE_STRING, "cub" },
 | 
			
		||||
	{ TTYC_CUB1, TTYCODE_STRING, "cub1" },
 | 
			
		||||
	{ TTYC_CUD, TTYCODE_STRING, "cud" },
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								tty.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								tty.c
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: tty.c,v 1.211 2011-05-22 16:25:02 tcunha Exp $ */
 | 
			
		||||
/* $Id: tty.c,v 1.212 2011-05-22 16:26:09 tcunha Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -69,6 +69,7 @@ tty_init(struct tty *tty, int fd, char *term)
 | 
			
		||||
	if ((path = ttyname(fd)) == NULL)
 | 
			
		||||
		fatalx("ttyname failed");
 | 
			
		||||
	tty->path = xstrdup(path);
 | 
			
		||||
	tty->cstyle = 0;
 | 
			
		||||
	tty->ccolour = xstrdup("");
 | 
			
		||||
 | 
			
		||||
	tty->flags = 0;
 | 
			
		||||
@@ -244,6 +245,12 @@ tty_stop_tty(struct tty *tty)
 | 
			
		||||
	tty_raw(tty, tty_term_string(tty->term, TTYC_SGR0));
 | 
			
		||||
	tty_raw(tty, tty_term_string(tty->term, TTYC_RMKX));
 | 
			
		||||
	tty_raw(tty, tty_term_string(tty->term, TTYC_CLEAR));
 | 
			
		||||
	if (tty_term_has(tty->term, TTYC_CS1) && tty->cstyle != 0) {
 | 
			
		||||
		if (tty_term_has(tty->term, TTYC_CSR1))
 | 
			
		||||
			tty_raw(tty, tty_term_string(tty->term, TTYC_CSR1));
 | 
			
		||||
		else if (tty_term_has(tty->term, TTYC_CS1))
 | 
			
		||||
			tty_raw(tty, tty_term_string1(tty->term, TTYC_CS1, 0));
 | 
			
		||||
	}
 | 
			
		||||
	tty_raw(tty, tty_term_string(tty->term, TTYC_CR));
 | 
			
		||||
 | 
			
		||||
	tty_raw(tty, tty_term_string(tty->term, TTYC_CNORM));
 | 
			
		||||
@@ -429,6 +436,16 @@ tty_update_mode(struct tty *tty, int mode, struct screen *s)
 | 
			
		||||
		else
 | 
			
		||||
			tty_putcode(tty, TTYC_CIVIS);
 | 
			
		||||
	}
 | 
			
		||||
	if (tty->cstyle != s->cstyle) {
 | 
			
		||||
		if (tty_term_has(tty->term, TTYC_CS1)) {
 | 
			
		||||
			if (s->cstyle == 0 &&
 | 
			
		||||
			    tty_term_has(tty->term, TTYC_CSR1))
 | 
			
		||||
				tty_putcode(tty, TTYC_CSR1);
 | 
			
		||||
			else
 | 
			
		||||
				tty_putcode1(tty, TTYC_CS1, s->cstyle);
 | 
			
		||||
		}
 | 
			
		||||
		tty->cstyle = s->cstyle;
 | 
			
		||||
	}
 | 
			
		||||
	if (changed & ALL_MOUSE_MODES) {
 | 
			
		||||
		if (mode & ALL_MOUSE_MODES) {
 | 
			
		||||
			if (mode & MODE_MOUSE_UTF8)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user