mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:26:05 +00:00 
			
		
		
		
	Merge branch 'obsd-master'
This commit is contained in:
		
							
								
								
									
										6
									
								
								file.c
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								file.c
									
									
									
									
									
								
							@@ -174,9 +174,9 @@ file_fire_read(struct client_file *cf)
 | 
			
		||||
int
 | 
			
		||||
file_can_print(struct client *c)
 | 
			
		||||
{
 | 
			
		||||
	if (c == NULL)
 | 
			
		||||
		return (0);
 | 
			
		||||
	if (c->session != NULL && (~c->flags & CLIENT_CONTROL))
 | 
			
		||||
	if (c == NULL ||
 | 
			
		||||
	    (c->flags & CLIENT_ATTACHED) ||
 | 
			
		||||
	    (c->flags & CLIENT_CONTROL))
 | 
			
		||||
		return (0);
 | 
			
		||||
	return (1);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								format.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								format.c
									
									
									
									
									
								
							@@ -1885,6 +1885,18 @@ format_cb_pane_input_off(struct format_tree *ft)
 | 
			
		||||
	return (NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Callback for pane_unseen_changes. */
 | 
			
		||||
static void *
 | 
			
		||||
format_cb_pane_unseen_changes(struct format_tree *ft)
 | 
			
		||||
{
 | 
			
		||||
	if (ft->wp != NULL) {
 | 
			
		||||
		if (ft->wp->flags & PANE_UNSEENCHANGES)
 | 
			
		||||
			return (xstrdup("1"));
 | 
			
		||||
		return (xstrdup("0"));
 | 
			
		||||
	}
 | 
			
		||||
	return (NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Callback for pane_last. */
 | 
			
		||||
static void *
 | 
			
		||||
format_cb_pane_last(struct format_tree *ft)
 | 
			
		||||
@@ -2953,6 +2965,9 @@ static const struct format_table_entry format_table[] = {
 | 
			
		||||
	{ "pane_tty", FORMAT_TABLE_STRING,
 | 
			
		||||
	  format_cb_pane_tty
 | 
			
		||||
	},
 | 
			
		||||
	{ "pane_unseen_changes", FORMAT_TABLE_STRING,
 | 
			
		||||
	  format_cb_pane_unseen_changes
 | 
			
		||||
	},
 | 
			
		||||
	{ "pane_width", FORMAT_TABLE_STRING,
 | 
			
		||||
	  format_cb_pane_width
 | 
			
		||||
	},
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								input.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								input.c
									
									
									
									
									
								
							@@ -971,6 +971,10 @@ input_parse_buffer(struct window_pane *wp, u_char *buf, size_t len)
 | 
			
		||||
	window_update_activity(wp->window);
 | 
			
		||||
	wp->flags |= PANE_CHANGED;
 | 
			
		||||
 | 
			
		||||
	/* Flag new input while in a mode. */
 | 
			
		||||
	if (!TAILQ_EMPTY(&wp->modes))
 | 
			
		||||
		wp->flags |= PANE_UNSEENCHANGES;
 | 
			
		||||
 | 
			
		||||
	/* NULL wp if there is a mode set as don't want to update the tty. */
 | 
			
		||||
	if (TAILQ_EMPTY(&wp->modes))
 | 
			
		||||
		screen_write_start_pane(sctx, wp, &wp->base);
 | 
			
		||||
 
 | 
			
		||||
@@ -132,6 +132,12 @@ screen_write_set_client_cb(struct tty_ctx *ttyctx, struct client *c)
 | 
			
		||||
{
 | 
			
		||||
	struct window_pane	*wp = ttyctx->arg;
 | 
			
		||||
 | 
			
		||||
	if (ttyctx->allow_invisible_panes) {
 | 
			
		||||
		if (session_has(c->session, wp->window))
 | 
			
		||||
			return (1);
 | 
			
		||||
		return (0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (c->session->curw->window != wp->window)
 | 
			
		||||
		return (0);
 | 
			
		||||
	if (wp->layout_cell == NULL)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								status.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								status.c
									
									
									
									
									
								
							@@ -1471,8 +1471,6 @@ process_key:
 | 
			
		||||
	return (0);
 | 
			
		||||
 | 
			
		||||
append_key:
 | 
			
		||||
	if (key <= 0x1f || (key >= KEYC_BASE && key < KEYC_BASE_END))
 | 
			
		||||
		return (0);
 | 
			
		||||
	if (key <= 0x7f)
 | 
			
		||||
		utf8_set(&tmp, key);
 | 
			
		||||
	else if (KEYC_IS_UNICODE(key))
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								tmux.1
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								tmux.1
									
									
									
									
									
								
							@@ -1281,7 +1281,10 @@ behave like
 | 
			
		||||
.Ic attach-session
 | 
			
		||||
if
 | 
			
		||||
.Ar session-name
 | 
			
		||||
already exists; in this case,
 | 
			
		||||
already exists;
 | 
			
		||||
if
 | 
			
		||||
.Fl A
 | 
			
		||||
is given,
 | 
			
		||||
.Fl D
 | 
			
		||||
behaves like
 | 
			
		||||
.Fl d
 | 
			
		||||
@@ -5260,6 +5263,7 @@ The following variables are available, where appropriate:
 | 
			
		||||
.It Li "pane_title" Ta "#T" Ta "Title of pane (can be set by application)"
 | 
			
		||||
.It Li "pane_top" Ta "" Ta "Top of pane"
 | 
			
		||||
.It Li "pane_tty" Ta "" Ta "Pseudo terminal of pane"
 | 
			
		||||
.It Li "pane_unseen_changes" Ta "" Ta "1 if there were changes in pane while in mode"
 | 
			
		||||
.It Li "pane_width" Ta "" Ta "Width of pane"
 | 
			
		||||
.It Li "pid" Ta "" Ta "Server PID"
 | 
			
		||||
.It Li "rectangle_toggle" Ta "" Ta "1 if rectangle selection is activated"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								tmux.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								tmux.c
									
									
									
									
									
								
							@@ -391,7 +391,7 @@ main(int argc, char **argv)
 | 
			
		||||
			cfg_quiet = 0;
 | 
			
		||||
			break;
 | 
			
		||||
 		case 'V':
 | 
			
		||||
			printf("%s %s\n", getprogname(), getversion());
 | 
			
		||||
			printf("tmux %s\n", getversion());
 | 
			
		||||
 			exit(0);
 | 
			
		||||
		case 'l':
 | 
			
		||||
			flags |= CLIENT_LOGIN;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										31
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								tmux.h
									
									
									
									
									
								
							@@ -161,7 +161,9 @@ struct winlink;
 | 
			
		||||
#define KEYC_IS_UNICODE(key) \
 | 
			
		||||
	(((key) & KEYC_MASK_KEY) > 0x7f && \
 | 
			
		||||
	 (((key) & KEYC_MASK_KEY) < KEYC_BASE || \
 | 
			
		||||
	  ((key) & KEYC_MASK_KEY) >= KEYC_BASE_END))
 | 
			
		||||
	  ((key) & KEYC_MASK_KEY) >= KEYC_BASE_END) && \
 | 
			
		||||
	 (((key) & KEYC_MASK_KEY) < KEYC_USER || \
 | 
			
		||||
	  ((key) & KEYC_MASK_KEY) >= KEYC_USER + KEYC_NUSER))
 | 
			
		||||
 | 
			
		||||
/* Multiple click timeout. */
 | 
			
		||||
#define KEYC_CLICK_TIMEOUT 300
 | 
			
		||||
@@ -1049,6 +1051,7 @@ struct window_pane {
 | 
			
		||||
#define PANE_STATUSDRAWN 0x400
 | 
			
		||||
#define PANE_EMPTY 0x800
 | 
			
		||||
#define PANE_STYLECHANGED 0x1000
 | 
			
		||||
#define PANE_UNSEENCHANGES 0x2000
 | 
			
		||||
 | 
			
		||||
	int		 argc;
 | 
			
		||||
	char	       **argv;
 | 
			
		||||
@@ -2297,12 +2300,12 @@ void	tty_margin_off(struct tty *);
 | 
			
		||||
void	tty_cursor(struct tty *, u_int, u_int);
 | 
			
		||||
void	tty_clipboard_query(struct tty *);
 | 
			
		||||
void	tty_putcode(struct tty *, enum tty_code_code);
 | 
			
		||||
void	tty_putcode1(struct tty *, enum tty_code_code, int);
 | 
			
		||||
void	tty_putcode2(struct tty *, enum tty_code_code, int, int);
 | 
			
		||||
void	tty_putcode3(struct tty *, enum tty_code_code, int, int, int);
 | 
			
		||||
void	tty_putcode_ptr1(struct tty *, enum tty_code_code, const void *);
 | 
			
		||||
void	tty_putcode_ptr2(struct tty *, enum tty_code_code, const void *,
 | 
			
		||||
	    const void *);
 | 
			
		||||
void	tty_putcode_i(struct tty *, enum tty_code_code, int);
 | 
			
		||||
void	tty_putcode_ii(struct tty *, enum tty_code_code, int, int);
 | 
			
		||||
void	tty_putcode_iii(struct tty *, enum tty_code_code, int, int, int);
 | 
			
		||||
void	tty_putcode_s(struct tty *, enum tty_code_code, const char *);
 | 
			
		||||
void	tty_putcode_ss(struct tty *, enum tty_code_code, const char *,
 | 
			
		||||
	    const char *);
 | 
			
		||||
void	tty_puts(struct tty *, const char *);
 | 
			
		||||
void	tty_putc(struct tty *, u_char);
 | 
			
		||||
void	tty_putn(struct tty *, const void *, size_t, u_int);
 | 
			
		||||
@@ -2366,15 +2369,15 @@ int		 tty_term_read_list(const char *, int, char ***, u_int *,
 | 
			
		||||
void		 tty_term_free_list(char **, u_int);
 | 
			
		||||
int		 tty_term_has(struct tty_term *, enum tty_code_code);
 | 
			
		||||
const char	*tty_term_string(struct tty_term *, enum tty_code_code);
 | 
			
		||||
const char	*tty_term_string1(struct tty_term *, enum tty_code_code, int);
 | 
			
		||||
const char	*tty_term_string2(struct tty_term *, enum tty_code_code, int,
 | 
			
		||||
const char	*tty_term_string_i(struct tty_term *, enum tty_code_code, int);
 | 
			
		||||
const char	*tty_term_string_ii(struct tty_term *, enum tty_code_code, int,
 | 
			
		||||
		     int);
 | 
			
		||||
const char	*tty_term_string3(struct tty_term *, enum tty_code_code, int,
 | 
			
		||||
const char	*tty_term_string_iii(struct tty_term *, enum tty_code_code, int,
 | 
			
		||||
		     int, int);
 | 
			
		||||
const char	*tty_term_ptr1(struct tty_term *, enum tty_code_code,
 | 
			
		||||
		     const void *);
 | 
			
		||||
const char	*tty_term_ptr2(struct tty_term *, enum tty_code_code,
 | 
			
		||||
		     const void *, const void *);
 | 
			
		||||
const char	*tty_term_string_s(struct tty_term *, enum tty_code_code,
 | 
			
		||||
		     const char *);
 | 
			
		||||
const char	*tty_term_string_ss(struct tty_term *, enum tty_code_code,
 | 
			
		||||
		     const char *, const char *);
 | 
			
		||||
int		 tty_term_number(struct tty_term *, enum tty_code_code);
 | 
			
		||||
int		 tty_term_flag(struct tty_term *, enum tty_code_code);
 | 
			
		||||
const char	*tty_term_describe(struct tty_term *, enum tty_code_code);
 | 
			
		||||
 
 | 
			
		||||
@@ -1008,7 +1008,8 @@ tty_keys_extended_key(struct tty *tty, const char *buf, size_t len,
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Handle mouse key input. Returns 0 for success, -1 for failure, 1 for partial
 | 
			
		||||
 * (probably a mouse sequence but need more data).
 | 
			
		||||
 * (probably a mouse sequence but need more data), -2 if an invalid mouse
 | 
			
		||||
 * sequence.
 | 
			
		||||
 */
 | 
			
		||||
static int
 | 
			
		||||
tty_keys_mouse(struct tty *tty, const char *buf, size_t len, size_t *size,
 | 
			
		||||
@@ -1069,7 +1070,7 @@ tty_keys_mouse(struct tty *tty, const char *buf, size_t len, size_t *size,
 | 
			
		||||
		if (b < MOUSE_PARAM_BTN_OFF ||
 | 
			
		||||
		    x < MOUSE_PARAM_POS_OFF ||
 | 
			
		||||
		    y < MOUSE_PARAM_POS_OFF)
 | 
			
		||||
			return (-1);
 | 
			
		||||
			return (-2);
 | 
			
		||||
		b -= MOUSE_PARAM_BTN_OFF;
 | 
			
		||||
		x -= MOUSE_PARAM_POS_OFF;
 | 
			
		||||
		y -= MOUSE_PARAM_POS_OFF;
 | 
			
		||||
@@ -1111,7 +1112,7 @@ tty_keys_mouse(struct tty *tty, const char *buf, size_t len, size_t *size,
 | 
			
		||||
 | 
			
		||||
		/* Check and return the mouse input. */
 | 
			
		||||
		if (x < 1 || y < 1)
 | 
			
		||||
			return (-1);
 | 
			
		||||
			return (-2);
 | 
			
		||||
		x--;
 | 
			
		||||
		y--;
 | 
			
		||||
		b = sgr_b;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										47
									
								
								tty-term.c
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								tty-term.c
									
									
									
									
									
								
							@@ -766,35 +766,60 @@ tty_term_string(struct tty_term *term, enum tty_code_code code)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char *
 | 
			
		||||
tty_term_string1(struct tty_term *term, enum tty_code_code code, int a)
 | 
			
		||||
tty_term_string_i(struct tty_term *term, enum tty_code_code code, int a)
 | 
			
		||||
{
 | 
			
		||||
	return (tparm((char *) tty_term_string(term, code), a, 0, 0, 0, 0, 0, 0, 0, 0));
 | 
			
		||||
	const char	*x = tty_term_string(term, code), *s;
 | 
			
		||||
 | 
			
		||||
	s = tparm((char *)x, a);
 | 
			
		||||
	if (s == NULL)
 | 
			
		||||
		fatalx("could not expand %s", tty_term_codes[code].name);
 | 
			
		||||
	return (s);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char *
 | 
			
		||||
tty_term_string2(struct tty_term *term, enum tty_code_code code, int a, int b)
 | 
			
		||||
tty_term_string_ii(struct tty_term *term, enum tty_code_code code, int a, int b)
 | 
			
		||||
{
 | 
			
		||||
	return (tparm((char *) tty_term_string(term, code), a, b, 0, 0, 0, 0, 0, 0, 0));
 | 
			
		||||
	const char	*x = tty_term_string(term, code), *s;
 | 
			
		||||
 | 
			
		||||
	s = tparm((char *)x, a, b);
 | 
			
		||||
	if (s == NULL)
 | 
			
		||||
		fatalx("could not expand %s", tty_term_codes[code].name);
 | 
			
		||||
	return (s);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char *
 | 
			
		||||
tty_term_string3(struct tty_term *term, enum tty_code_code code, int a, int b,
 | 
			
		||||
tty_term_string_iii(struct tty_term *term, enum tty_code_code code, int a, int b,
 | 
			
		||||
    int c)
 | 
			
		||||
{
 | 
			
		||||
	return (tparm((char *) tty_term_string(term, code), a, b, c, 0, 0, 0, 0, 0, 0));
 | 
			
		||||
	const char	*x = tty_term_string(term, code), *s;
 | 
			
		||||
 | 
			
		||||
	s = tparm((char *)x, a, b, c);
 | 
			
		||||
	if (s == NULL)
 | 
			
		||||
		fatalx("could not expand %s", tty_term_codes[code].name);
 | 
			
		||||
	return (s);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char *
 | 
			
		||||
tty_term_ptr1(struct tty_term *term, enum tty_code_code code, const void *a)
 | 
			
		||||
tty_term_string_s(struct tty_term *term, enum tty_code_code code, const char *a)
 | 
			
		||||
{
 | 
			
		||||
	return (tparm((char *) tty_term_string(term, code), (long)a, 0, 0, 0, 0, 0, 0, 0, 0));
 | 
			
		||||
	const char	*x = tty_term_string(term, code), *s;
 | 
			
		||||
 | 
			
		||||
	s = tparm((char *)x, (long)a);
 | 
			
		||||
	if (s == NULL)
 | 
			
		||||
		fatalx("could not expand %s", tty_term_codes[code].name);
 | 
			
		||||
	return (s);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char *
 | 
			
		||||
tty_term_ptr2(struct tty_term *term, enum tty_code_code code, const void *a,
 | 
			
		||||
    const void *b)
 | 
			
		||||
tty_term_string_ss(struct tty_term *term, enum tty_code_code code, const char *a,
 | 
			
		||||
    const char *b)
 | 
			
		||||
{
 | 
			
		||||
	return (tparm((char *) tty_term_string(term, code), (long)a, (long)b, 0, 0, 0, 0, 0, 0, 0));
 | 
			
		||||
	const char	*x = tty_term_string(term, code), *s;
 | 
			
		||||
 | 
			
		||||
	s = tparm((char *)x, (long)a, (long)b);
 | 
			
		||||
	if (s == NULL)
 | 
			
		||||
		fatalx("could not expand %s", tty_term_codes[code].name);
 | 
			
		||||
	return (s);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										153
									
								
								tty.c
									
									
									
									
									
								
							
							
						
						
									
										153
									
								
								tty.c
									
									
									
									
									
								
							@@ -34,8 +34,6 @@
 | 
			
		||||
 | 
			
		||||
static int	tty_log_fd = -1;
 | 
			
		||||
 | 
			
		||||
static int	tty_client_ready(struct client *);
 | 
			
		||||
 | 
			
		||||
static void	tty_set_italics(struct tty *);
 | 
			
		||||
static int	tty_try_colour(struct tty *, int, const char *);
 | 
			
		||||
static void	tty_force_cursor_colour(struct tty *, int);
 | 
			
		||||
@@ -407,7 +405,7 @@ tty_stop_tty(struct tty *tty)
 | 
			
		||||
	if (tcsetattr(c->fd, TCSANOW, &tty->tio) == -1)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	tty_raw(tty, tty_term_string2(tty->term, TTYC_CSR, 0, ws.ws_row - 1));
 | 
			
		||||
	tty_raw(tty, tty_term_string_ii(tty->term, TTYC_CSR, 0, ws.ws_row - 1));
 | 
			
		||||
	if (tty_acs_needed(tty))
 | 
			
		||||
		tty_raw(tty, tty_term_string(tty->term, TTYC_RMACS));
 | 
			
		||||
	tty_raw(tty, tty_term_string(tty->term, TTYC_SGR0));
 | 
			
		||||
@@ -417,7 +415,7 @@ tty_stop_tty(struct tty *tty)
 | 
			
		||||
		if (tty_term_has(tty->term, TTYC_SE))
 | 
			
		||||
			tty_raw(tty, tty_term_string(tty->term, TTYC_SE));
 | 
			
		||||
		else if (tty_term_has(tty->term, TTYC_SS))
 | 
			
		||||
			tty_raw(tty, tty_term_string1(tty->term, TTYC_SS, 0));
 | 
			
		||||
			tty_raw(tty, tty_term_string_i(tty->term, TTYC_SS, 0));
 | 
			
		||||
	}
 | 
			
		||||
	if (tty->ccolour != -1)
 | 
			
		||||
		tty_raw(tty, tty_term_string(tty->term, TTYC_CR));
 | 
			
		||||
@@ -484,6 +482,8 @@ tty_update_features(struct tty *tty)
 | 
			
		||||
		tty_puts(tty, tty_term_string(tty->term, TTYC_ENFCS));
 | 
			
		||||
	if (tty->term->flags & TERM_VT100LIKE)
 | 
			
		||||
		tty_puts(tty, "\033[?7727h");
 | 
			
		||||
 | 
			
		||||
	tty_invalidate(tty);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
@@ -514,42 +514,42 @@ tty_putcode(struct tty *tty, enum tty_code_code code)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
tty_putcode1(struct tty *tty, enum tty_code_code code, int a)
 | 
			
		||||
tty_putcode_i(struct tty *tty, enum tty_code_code code, int a)
 | 
			
		||||
{
 | 
			
		||||
	if (a < 0)
 | 
			
		||||
		return;
 | 
			
		||||
	tty_puts(tty, tty_term_string1(tty->term, code, a));
 | 
			
		||||
	tty_puts(tty, tty_term_string_i(tty->term, code, a));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
tty_putcode2(struct tty *tty, enum tty_code_code code, int a, int b)
 | 
			
		||||
tty_putcode_ii(struct tty *tty, enum tty_code_code code, int a, int b)
 | 
			
		||||
{
 | 
			
		||||
	if (a < 0 || b < 0)
 | 
			
		||||
		return;
 | 
			
		||||
	tty_puts(tty, tty_term_string2(tty->term, code, a, b));
 | 
			
		||||
	tty_puts(tty, tty_term_string_ii(tty->term, code, a, b));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
tty_putcode3(struct tty *tty, enum tty_code_code code, int a, int b, int c)
 | 
			
		||||
tty_putcode_iii(struct tty *tty, enum tty_code_code code, int a, int b, int c)
 | 
			
		||||
{
 | 
			
		||||
	if (a < 0 || b < 0 || c < 0)
 | 
			
		||||
		return;
 | 
			
		||||
	tty_puts(tty, tty_term_string3(tty->term, code, a, b, c));
 | 
			
		||||
	tty_puts(tty, tty_term_string_iii(tty->term, code, a, b, c));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
tty_putcode_ptr1(struct tty *tty, enum tty_code_code code, const void *a)
 | 
			
		||||
tty_putcode_s(struct tty *tty, enum tty_code_code code, const char *a)
 | 
			
		||||
{
 | 
			
		||||
	if (a != NULL)
 | 
			
		||||
		tty_puts(tty, tty_term_ptr1(tty->term, code, a));
 | 
			
		||||
		tty_puts(tty, tty_term_string_s(tty->term, code, a));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
tty_putcode_ptr2(struct tty *tty, enum tty_code_code code, const void *a,
 | 
			
		||||
    const void *b)
 | 
			
		||||
tty_putcode_ss(struct tty *tty, enum tty_code_code code, const char *a,
 | 
			
		||||
    const char *b)
 | 
			
		||||
{
 | 
			
		||||
	if (a != NULL && b != NULL)
 | 
			
		||||
		tty_puts(tty, tty_term_ptr2(tty->term, code, a, b));
 | 
			
		||||
		tty_puts(tty, tty_term_string_ss(tty->term, code, a, b));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -611,7 +611,7 @@ tty_putc(struct tty *tty, u_char ch)
 | 
			
		||||
			 * it works on sensible terminals as well.
 | 
			
		||||
			 */
 | 
			
		||||
			if (tty->term->flags & TERM_NOAM)
 | 
			
		||||
				tty_putcode2(tty, TTYC_CUP, tty->cy, tty->cx);
 | 
			
		||||
				tty_putcode_ii(tty, TTYC_CUP, tty->cy, tty->cx);
 | 
			
		||||
		} else
 | 
			
		||||
			tty->cx++;
 | 
			
		||||
	}
 | 
			
		||||
@@ -690,7 +690,7 @@ tty_force_cursor_colour(struct tty *tty, int c)
 | 
			
		||||
	else {
 | 
			
		||||
		colour_split_rgb(c, &r, &g, &b);
 | 
			
		||||
		xsnprintf(s, sizeof s, "rgb:%02hhx/%02hhx/%02hhx", r, g, b);
 | 
			
		||||
		tty_putcode_ptr1(tty, TTYC_CS, s);
 | 
			
		||||
		tty_putcode_s(tty, TTYC_CS, s);
 | 
			
		||||
	}
 | 
			
		||||
	tty->ccolour = c;
 | 
			
		||||
}
 | 
			
		||||
@@ -751,7 +751,7 @@ tty_update_cursor(struct tty *tty, int mode, struct screen *s)
 | 
			
		||||
			if (tty_term_has(tty->term, TTYC_SE))
 | 
			
		||||
				tty_putcode(tty, TTYC_SE);
 | 
			
		||||
			else
 | 
			
		||||
				tty_putcode1(tty, TTYC_SS, 0);
 | 
			
		||||
				tty_putcode_i(tty, TTYC_SS, 0);
 | 
			
		||||
		}
 | 
			
		||||
		if (cmode & (MODE_CURSOR_BLINKING|MODE_CURSOR_VERY_VISIBLE))
 | 
			
		||||
			tty_putcode(tty, TTYC_CVVIS);
 | 
			
		||||
@@ -759,27 +759,27 @@ tty_update_cursor(struct tty *tty, int mode, struct screen *s)
 | 
			
		||||
	case SCREEN_CURSOR_BLOCK:
 | 
			
		||||
		if (tty_term_has(tty->term, TTYC_SS)) {
 | 
			
		||||
			if (cmode & MODE_CURSOR_BLINKING)
 | 
			
		||||
				tty_putcode1(tty, TTYC_SS, 1);
 | 
			
		||||
				tty_putcode_i(tty, TTYC_SS, 1);
 | 
			
		||||
			else
 | 
			
		||||
				tty_putcode1(tty, TTYC_SS, 2);
 | 
			
		||||
				tty_putcode_i(tty, TTYC_SS, 2);
 | 
			
		||||
		} else if (cmode & MODE_CURSOR_BLINKING)
 | 
			
		||||
			tty_putcode(tty, TTYC_CVVIS);
 | 
			
		||||
		break;
 | 
			
		||||
	case SCREEN_CURSOR_UNDERLINE:
 | 
			
		||||
		if (tty_term_has(tty->term, TTYC_SS)) {
 | 
			
		||||
			if (cmode & MODE_CURSOR_BLINKING)
 | 
			
		||||
				tty_putcode1(tty, TTYC_SS, 3);
 | 
			
		||||
				tty_putcode_i(tty, TTYC_SS, 3);
 | 
			
		||||
			else
 | 
			
		||||
				tty_putcode1(tty, TTYC_SS, 4);
 | 
			
		||||
				tty_putcode_i(tty, TTYC_SS, 4);
 | 
			
		||||
		} else if (cmode & MODE_CURSOR_BLINKING)
 | 
			
		||||
			tty_putcode(tty, TTYC_CVVIS);
 | 
			
		||||
		break;
 | 
			
		||||
	case SCREEN_CURSOR_BAR:
 | 
			
		||||
		if (tty_term_has(tty->term, TTYC_SS)) {
 | 
			
		||||
			if (cmode & MODE_CURSOR_BLINKING)
 | 
			
		||||
				tty_putcode1(tty, TTYC_SS, 5);
 | 
			
		||||
				tty_putcode_i(tty, TTYC_SS, 5);
 | 
			
		||||
			else
 | 
			
		||||
				tty_putcode1(tty, TTYC_SS, 6);
 | 
			
		||||
				tty_putcode_i(tty, TTYC_SS, 6);
 | 
			
		||||
		} else if (cmode & MODE_CURSOR_BLINKING)
 | 
			
		||||
			tty_putcode(tty, TTYC_CVVIS);
 | 
			
		||||
		break;
 | 
			
		||||
@@ -835,7 +835,7 @@ tty_emulate_repeat(struct tty *tty, enum tty_code_code code,
 | 
			
		||||
    enum tty_code_code code1, u_int n)
 | 
			
		||||
{
 | 
			
		||||
	if (tty_term_has(tty->term, code))
 | 
			
		||||
		tty_putcode1(tty, code, n);
 | 
			
		||||
		tty_putcode_i(tty, code, n);
 | 
			
		||||
	else {
 | 
			
		||||
		while (n-- > 0)
 | 
			
		||||
			tty_putcode(tty, code1);
 | 
			
		||||
@@ -1124,7 +1124,7 @@ tty_clear_line(struct tty *tty, const struct grid_cell *defaults, u_int py,
 | 
			
		||||
		/* Section of line. Use ECH if possible. */
 | 
			
		||||
		if (tty_term_has(tty->term, TTYC_ECH)) {
 | 
			
		||||
			tty_cursor(tty, px, py);
 | 
			
		||||
			tty_putcode1(tty, TTYC_ECH, nx);
 | 
			
		||||
			tty_putcode_i(tty, TTYC_ECH, nx);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -1265,7 +1265,7 @@ tty_clear_area(struct tty *tty, const struct grid_cell *defaults, u_int py,
 | 
			
		||||
		    tty_term_has(tty->term, TTYC_INDN)) {
 | 
			
		||||
			tty_region(tty, py, py + ny - 1);
 | 
			
		||||
			tty_margin_off(tty);
 | 
			
		||||
			tty_putcode1(tty, TTYC_INDN, ny);
 | 
			
		||||
			tty_putcode_i(tty, TTYC_INDN, ny);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -1280,7 +1280,7 @@ tty_clear_area(struct tty *tty, const struct grid_cell *defaults, u_int py,
 | 
			
		||||
		    tty_term_has(tty->term, TTYC_INDN)) {
 | 
			
		||||
			tty_region(tty, py, py + ny - 1);
 | 
			
		||||
			tty_margin(tty, px, px + nx - 1);
 | 
			
		||||
			tty_putcode1(tty, TTYC_INDN, ny);
 | 
			
		||||
			tty_putcode_i(tty, TTYC_INDN, ny);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -1587,7 +1587,7 @@ tty_sync_start(struct tty *tty)
 | 
			
		||||
 | 
			
		||||
	if (tty_term_has(tty->term, TTYC_SYNC)) {
 | 
			
		||||
		log_debug("%s sync start", tty->client->name);
 | 
			
		||||
		tty_putcode1(tty, TTYC_SYNC, 1);
 | 
			
		||||
		tty_putcode_i(tty, TTYC_SYNC, 1);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1602,16 +1602,26 @@ tty_sync_end(struct tty *tty)
 | 
			
		||||
 | 
			
		||||
	if (tty_term_has(tty->term, TTYC_SYNC)) {
 | 
			
		||||
 		log_debug("%s sync end", tty->client->name);
 | 
			
		||||
		tty_putcode1(tty, TTYC_SYNC, 2);
 | 
			
		||||
		tty_putcode_i(tty, TTYC_SYNC, 2);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
tty_client_ready(struct client *c)
 | 
			
		||||
tty_client_ready(const struct tty_ctx *ctx, struct client *c)
 | 
			
		||||
{
 | 
			
		||||
	if (c->session == NULL || c->tty.term == NULL)
 | 
			
		||||
		return (0);
 | 
			
		||||
	if (c->flags & (CLIENT_REDRAWWINDOW|CLIENT_SUSPENDED))
 | 
			
		||||
	if (c->flags & CLIENT_SUSPENDED)
 | 
			
		||||
		return (0);
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * If invisible panes are allowed (used for passthrough), don't care if
 | 
			
		||||
	 * redrawing or frozen.
 | 
			
		||||
	 */
 | 
			
		||||
	if (ctx->allow_invisible_panes)
 | 
			
		||||
		return (1);
 | 
			
		||||
 | 
			
		||||
	if (c->flags & CLIENT_REDRAWWINDOW)
 | 
			
		||||
		return (0);
 | 
			
		||||
	if (c->tty.flags & TTY_FREEZE)
 | 
			
		||||
		return (0);
 | 
			
		||||
@@ -1628,23 +1638,16 @@ tty_write(void (*cmdfn)(struct tty *, const struct tty_ctx *),
 | 
			
		||||
	if (ctx->set_client_cb == NULL)
 | 
			
		||||
		return;
 | 
			
		||||
	TAILQ_FOREACH(c, &clients, entry) {
 | 
			
		||||
		if (ctx->allow_invisible_panes) {
 | 
			
		||||
		    if (c->session == NULL ||
 | 
			
		||||
			c->tty.term == NULL ||
 | 
			
		||||
			c->flags & CLIENT_SUSPENDED)
 | 
			
		||||
			    continue;
 | 
			
		||||
		} else {
 | 
			
		||||
			if (!tty_client_ready(c))
 | 
			
		||||
				continue;
 | 
			
		||||
		if (tty_client_ready(ctx, c)) {
 | 
			
		||||
			state = ctx->set_client_cb(ctx, c);
 | 
			
		||||
			if (state == -1)
 | 
			
		||||
				break;
 | 
			
		||||
			if (state == 0)
 | 
			
		||||
				continue;
 | 
			
		||||
		}
 | 
			
		||||
			cmdfn(&c->tty, ctx);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
tty_cmd_insertcharacter(struct tty *tty, const struct tty_ctx *ctx)
 | 
			
		||||
@@ -1817,7 +1820,7 @@ tty_cmd_reverseindex(struct tty *tty, const struct tty_ctx *ctx)
 | 
			
		||||
	if (tty_term_has(tty->term, TTYC_RI))
 | 
			
		||||
		tty_putcode(tty, TTYC_RI);
 | 
			
		||||
	else
 | 
			
		||||
		tty_putcode1(tty, TTYC_RIN, 1);
 | 
			
		||||
		tty_putcode_i(tty, TTYC_RIN, 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
@@ -1898,7 +1901,7 @@ tty_cmd_scrollup(struct tty *tty, const struct tty_ctx *ctx)
 | 
			
		||||
			tty_cursor(tty, 0, 0);
 | 
			
		||||
		else
 | 
			
		||||
			tty_cursor(tty, 0, tty->cy);
 | 
			
		||||
		tty_putcode1(tty, TTYC_INDN, ctx->num);
 | 
			
		||||
		tty_putcode_i(tty, TTYC_INDN, ctx->num);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1929,7 +1932,7 @@ tty_cmd_scrolldown(struct tty *tty, const struct tty_ctx *ctx)
 | 
			
		||||
	tty_cursor_pane(tty, ctx, ctx->ocx, ctx->orupper);
 | 
			
		||||
 | 
			
		||||
	if (tty_term_has(tty->term, TTYC_RIN))
 | 
			
		||||
		tty_putcode1(tty, TTYC_RIN, ctx->num);
 | 
			
		||||
		tty_putcode_i(tty, TTYC_RIN, ctx->num);
 | 
			
		||||
	else {
 | 
			
		||||
		for (i = 0; i < ctx->num; i++)
 | 
			
		||||
			tty_putcode(tty, TTYC_RI);
 | 
			
		||||
@@ -2134,7 +2137,7 @@ tty_set_selection(struct tty *tty, const char *flags, const char *buf,
 | 
			
		||||
 | 
			
		||||
	b64_ntop(buf, len, encoded, size);
 | 
			
		||||
	tty->flags |= TTY_NOBLOCK;
 | 
			
		||||
	tty_putcode_ptr2(tty, TTYC_MS, flags, encoded);
 | 
			
		||||
	tty_putcode_ss(tty, TTYC_MS, flags, encoded);
 | 
			
		||||
 | 
			
		||||
	free(encoded);
 | 
			
		||||
}
 | 
			
		||||
@@ -2207,7 +2210,7 @@ tty_reset(struct tty *tty)
 | 
			
		||||
 | 
			
		||||
	if (!grid_cells_equal(gc, &grid_default_cell)) {
 | 
			
		||||
		if (gc->link != 0)
 | 
			
		||||
			tty_putcode_ptr2(tty, TTYC_HLS, "", "");
 | 
			
		||||
			tty_putcode_ss(tty, TTYC_HLS, "", "");
 | 
			
		||||
		if ((gc->attr & GRID_ATTR_CHARSET) && tty_acs_needed(tty))
 | 
			
		||||
			tty_putcode(tty, TTYC_RMACS);
 | 
			
		||||
		tty_putcode(tty, TTYC_SGR0);
 | 
			
		||||
@@ -2282,7 +2285,7 @@ tty_region(struct tty *tty, u_int rupper, u_int rlower)
 | 
			
		||||
			tty_cursor(tty, 0, tty->cy);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	tty_putcode2(tty, TTYC_CSR, tty->rupper, tty->rlower);
 | 
			
		||||
	tty_putcode_ii(tty, TTYC_CSR, tty->rupper, tty->rlower);
 | 
			
		||||
	tty->cx = tty->cy = UINT_MAX;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -2310,7 +2313,7 @@ tty_margin(struct tty *tty, u_int rleft, u_int rright)
 | 
			
		||||
	if (tty->rleft == rleft && tty->rright == rright)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	tty_putcode2(tty, TTYC_CSR, tty->rupper, tty->rlower);
 | 
			
		||||
	tty_putcode_ii(tty, TTYC_CSR, tty->rupper, tty->rlower);
 | 
			
		||||
 | 
			
		||||
	tty->rleft = rleft;
 | 
			
		||||
	tty->rright = rright;
 | 
			
		||||
@@ -2318,7 +2321,7 @@ tty_margin(struct tty *tty, u_int rleft, u_int rright)
 | 
			
		||||
	if (rleft == 0 && rright == tty->sx - 1)
 | 
			
		||||
		tty_putcode(tty, TTYC_CLMG);
 | 
			
		||||
	else
 | 
			
		||||
		tty_putcode2(tty, TTYC_CMG, rleft, rright);
 | 
			
		||||
		tty_putcode_ii(tty, TTYC_CMG, rleft, rright);
 | 
			
		||||
	tty->cx = tty->cy = UINT_MAX;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -2428,7 +2431,7 @@ tty_cursor(struct tty *tty, u_int cx, u_int cy)
 | 
			
		||||
		 * the cursor with CUB/CUF.
 | 
			
		||||
		 */
 | 
			
		||||
		if ((u_int) abs(change) > cx && tty_term_has(term, TTYC_HPA)) {
 | 
			
		||||
			tty_putcode1(tty, TTYC_HPA, cx);
 | 
			
		||||
			tty_putcode_i(tty, TTYC_HPA, cx);
 | 
			
		||||
			goto out;
 | 
			
		||||
		} else if (change > 0 &&
 | 
			
		||||
		    tty_term_has(term, TTYC_CUB) &&
 | 
			
		||||
@@ -2438,12 +2441,12 @@ tty_cursor(struct tty *tty, u_int cx, u_int cy)
 | 
			
		||||
				tty_putcode(tty, TTYC_CUB1);
 | 
			
		||||
				goto out;
 | 
			
		||||
			}
 | 
			
		||||
			tty_putcode1(tty, TTYC_CUB, change);
 | 
			
		||||
			tty_putcode_i(tty, TTYC_CUB, change);
 | 
			
		||||
			goto out;
 | 
			
		||||
		} else if (change < 0 &&
 | 
			
		||||
		    tty_term_has(term, TTYC_CUF) &&
 | 
			
		||||
		    !tty_use_margin(tty)) {
 | 
			
		||||
			tty_putcode1(tty, TTYC_CUF, -change);
 | 
			
		||||
			tty_putcode_i(tty, TTYC_CUF, -change);
 | 
			
		||||
			goto out;
 | 
			
		||||
		}
 | 
			
		||||
	} else if (cx == thisx) {
 | 
			
		||||
@@ -2476,21 +2479,21 @@ tty_cursor(struct tty *tty, u_int cx, u_int cy)
 | 
			
		||||
		    (change < 0 && cy - change > tty->rlower) ||
 | 
			
		||||
		    (change > 0 && cy - change < tty->rupper)) {
 | 
			
		||||
			    if (tty_term_has(term, TTYC_VPA)) {
 | 
			
		||||
				    tty_putcode1(tty, TTYC_VPA, cy);
 | 
			
		||||
				    tty_putcode_i(tty, TTYC_VPA, cy);
 | 
			
		||||
				    goto out;
 | 
			
		||||
			    }
 | 
			
		||||
		} else if (change > 0 && tty_term_has(term, TTYC_CUU)) {
 | 
			
		||||
			tty_putcode1(tty, TTYC_CUU, change);
 | 
			
		||||
			tty_putcode_i(tty, TTYC_CUU, change);
 | 
			
		||||
			goto out;
 | 
			
		||||
		} else if (change < 0 && tty_term_has(term, TTYC_CUD)) {
 | 
			
		||||
			tty_putcode1(tty, TTYC_CUD, -change);
 | 
			
		||||
			tty_putcode_i(tty, TTYC_CUD, -change);
 | 
			
		||||
			goto out;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
absolute:
 | 
			
		||||
	/* Absolute movement. */
 | 
			
		||||
	tty_putcode2(tty, TTYC_CUP, cy, cx);
 | 
			
		||||
	tty_putcode_ii(tty, TTYC_CUP, cy, cx);
 | 
			
		||||
 | 
			
		||||
out:
 | 
			
		||||
	tty->cx = cx;
 | 
			
		||||
@@ -2511,9 +2514,9 @@ tty_hyperlink(struct tty *tty, const struct grid_cell *gc,
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (gc->link == 0 || !hyperlinks_get(hl, gc->link, &uri, NULL, &id))
 | 
			
		||||
		tty_putcode_ptr2(tty, TTYC_HLS, "", "");
 | 
			
		||||
		tty_putcode_ss(tty, TTYC_HLS, "", "");
 | 
			
		||||
	else
 | 
			
		||||
		tty_putcode_ptr2(tty, TTYC_HLS, id, uri);
 | 
			
		||||
		tty_putcode_ss(tty, TTYC_HLS, id, uri);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
@@ -2590,13 +2593,13 @@ tty_attributes(struct tty *tty, const struct grid_cell *gc,
 | 
			
		||||
		    !tty_term_has(tty->term, TTYC_SMULX))
 | 
			
		||||
			tty_putcode(tty, TTYC_SMUL);
 | 
			
		||||
		else if (changed & GRID_ATTR_UNDERSCORE_2)
 | 
			
		||||
			tty_putcode1(tty, TTYC_SMULX, 2);
 | 
			
		||||
			tty_putcode_i(tty, TTYC_SMULX, 2);
 | 
			
		||||
		else if (changed & GRID_ATTR_UNDERSCORE_3)
 | 
			
		||||
			tty_putcode1(tty, TTYC_SMULX, 3);
 | 
			
		||||
			tty_putcode_i(tty, TTYC_SMULX, 3);
 | 
			
		||||
		else if (changed & GRID_ATTR_UNDERSCORE_4)
 | 
			
		||||
			tty_putcode1(tty, TTYC_SMULX, 4);
 | 
			
		||||
			tty_putcode_i(tty, TTYC_SMULX, 4);
 | 
			
		||||
		else if (changed & GRID_ATTR_UNDERSCORE_5)
 | 
			
		||||
			tty_putcode1(tty, TTYC_SMULX, 5);
 | 
			
		||||
			tty_putcode_i(tty, TTYC_SMULX, 5);
 | 
			
		||||
	}
 | 
			
		||||
	if (changed & GRID_ATTR_BLINK)
 | 
			
		||||
		tty_putcode(tty, TTYC_BLINK);
 | 
			
		||||
@@ -2653,14 +2656,14 @@ tty_colours(struct tty *tty, const struct grid_cell *gc)
 | 
			
		||||
				if (have_ax)
 | 
			
		||||
					tty_puts(tty, "\033[39m");
 | 
			
		||||
				else if (tc->fg != 7)
 | 
			
		||||
					tty_putcode1(tty, TTYC_SETAF, 7);
 | 
			
		||||
					tty_putcode_i(tty, TTYC_SETAF, 7);
 | 
			
		||||
				tc->fg = gc->fg;
 | 
			
		||||
			}
 | 
			
		||||
			if (COLOUR_DEFAULT(gc->bg) && !COLOUR_DEFAULT(tc->bg)) {
 | 
			
		||||
				if (have_ax)
 | 
			
		||||
					tty_puts(tty, "\033[49m");
 | 
			
		||||
				else if (tc->bg != 0)
 | 
			
		||||
					tty_putcode1(tty, TTYC_SETAB, 0);
 | 
			
		||||
					tty_putcode_i(tty, TTYC_SETAB, 0);
 | 
			
		||||
				tc->bg = gc->bg;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
@@ -2830,12 +2833,12 @@ tty_colours_fg(struct tty *tty, const struct grid_cell *gc)
 | 
			
		||||
			xsnprintf(s, sizeof s, "\033[%dm", gc->fg);
 | 
			
		||||
			tty_puts(tty, s);
 | 
			
		||||
		} else
 | 
			
		||||
			tty_putcode1(tty, TTYC_SETAF, gc->fg - 90 + 8);
 | 
			
		||||
			tty_putcode_i(tty, TTYC_SETAF, gc->fg - 90 + 8);
 | 
			
		||||
		goto save;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Otherwise set the foreground colour. */
 | 
			
		||||
	tty_putcode1(tty, TTYC_SETAF, gc->fg);
 | 
			
		||||
	tty_putcode_i(tty, TTYC_SETAF, gc->fg);
 | 
			
		||||
 | 
			
		||||
save:
 | 
			
		||||
	/* Save the new values in the terminal current cell. */
 | 
			
		||||
@@ -2862,12 +2865,12 @@ tty_colours_bg(struct tty *tty, const struct grid_cell *gc)
 | 
			
		||||
			xsnprintf(s, sizeof s, "\033[%dm", gc->bg + 10);
 | 
			
		||||
			tty_puts(tty, s);
 | 
			
		||||
		} else
 | 
			
		||||
			tty_putcode1(tty, TTYC_SETAB, gc->bg - 90 + 8);
 | 
			
		||||
			tty_putcode_i(tty, TTYC_SETAB, gc->bg - 90 + 8);
 | 
			
		||||
		goto save;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Otherwise set the background colour. */
 | 
			
		||||
	tty_putcode1(tty, TTYC_SETAB, gc->bg);
 | 
			
		||||
	tty_putcode_i(tty, TTYC_SETAB, gc->bg);
 | 
			
		||||
 | 
			
		||||
save:
 | 
			
		||||
	/* Save the new values in the terminal current cell. */
 | 
			
		||||
@@ -2903,10 +2906,10 @@ tty_colours_us(struct tty *tty, const struct grid_cell *gc)
 | 
			
		||||
	 * non-RGB version may be wrong.
 | 
			
		||||
	 */
 | 
			
		||||
	if (tty_term_has(tty->term, TTYC_SETULC))
 | 
			
		||||
		tty_putcode1(tty, TTYC_SETULC, c);
 | 
			
		||||
		tty_putcode_i(tty, TTYC_SETULC, c);
 | 
			
		||||
	else if (tty_term_has(tty->term, TTYC_SETAL) &&
 | 
			
		||||
	    tty_term_has(tty->term, TTYC_RGB))
 | 
			
		||||
		tty_putcode1(tty, TTYC_SETAL, c);
 | 
			
		||||
		tty_putcode_i(tty, TTYC_SETAL, c);
 | 
			
		||||
 | 
			
		||||
save:
 | 
			
		||||
	/* Save the new values in the terminal current cell. */
 | 
			
		||||
@@ -2920,18 +2923,18 @@ tty_try_colour(struct tty *tty, int colour, const char *type)
 | 
			
		||||
 | 
			
		||||
	if (colour & COLOUR_FLAG_256) {
 | 
			
		||||
		if (*type == '3' && tty_term_has(tty->term, TTYC_SETAF))
 | 
			
		||||
			tty_putcode1(tty, TTYC_SETAF, colour & 0xff);
 | 
			
		||||
			tty_putcode_i(tty, TTYC_SETAF, colour & 0xff);
 | 
			
		||||
		else if (tty_term_has(tty->term, TTYC_SETAB))
 | 
			
		||||
			tty_putcode1(tty, TTYC_SETAB, colour & 0xff);
 | 
			
		||||
			tty_putcode_i(tty, TTYC_SETAB, colour & 0xff);
 | 
			
		||||
		return (0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (colour & COLOUR_FLAG_RGB) {
 | 
			
		||||
		colour_split_rgb(colour & 0xffffff, &r, &g, &b);
 | 
			
		||||
		if (*type == '3' && tty_term_has(tty->term, TTYC_SETRGBF))
 | 
			
		||||
			tty_putcode3(tty, TTYC_SETRGBF, r, g, b);
 | 
			
		||||
			tty_putcode_iii(tty, TTYC_SETRGBF, r, g, b);
 | 
			
		||||
		else if (tty_term_has(tty->term, TTYC_SETRGBB))
 | 
			
		||||
			tty_putcode3(tty, TTYC_SETRGBB, r, g, b);
 | 
			
		||||
			tty_putcode_iii(tty, TTYC_SETRGBB, r, g, b);
 | 
			
		||||
		return (0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -3015,7 +3018,7 @@ tty_clipboard_query(struct tty *tty)
 | 
			
		||||
 | 
			
		||||
	if ((~tty->flags & TTY_STARTED) || (tty->flags & TTY_OSC52QUERY))
 | 
			
		||||
		return;
 | 
			
		||||
	tty_putcode_ptr2(tty, TTYC_MS, "", "?");
 | 
			
		||||
	tty_putcode_ss(tty, TTYC_MS, "", "?");
 | 
			
		||||
 | 
			
		||||
	tty->flags |= TTY_OSC52QUERY;
 | 
			
		||||
	evtimer_set(&tty->clipboard_timer, tty_clipboard_query_callback, tty);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user