mirror of
				https://github.com/tmux/tmux.git
				synced 2025-10-26 12:27:15 +00:00 
			
		
		
		
	Merge branch 'obsd-master'
This commit is contained in:
		
							
								
								
									
										4
									
								
								format.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								format.c
									
									
									
									
									
								
							| @@ -1415,8 +1415,8 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp) | |||||||
|  |  | ||||||
| 	format_add(ft, "pane_synchronized", "%d", | 	format_add(ft, "pane_synchronized", "%d", | ||||||
| 	    !!options_get_number(wp->window->options, "synchronize-panes")); | 	    !!options_get_number(wp->window->options, "synchronize-panes")); | ||||||
| 	format_add(ft, "pane_search_string", "%s", | 	if (wp->searchstr != NULL) | ||||||
| 	    window_copy_search_string(wp)); | 		format_add(ft, "pane_search_string", "%s", wp->searchstr); | ||||||
|  |  | ||||||
| 	format_add(ft, "pane_tty", "%s", wp->tty); | 	format_add(ft, "pane_tty", "%s", wp->tty); | ||||||
| 	format_add(ft, "pane_pid", "%ld", (long) wp->pid); | 	format_add(ft, "pane_pid", "%ld", (long) wp->pid); | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								input.c
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								input.c
									
									
									
									
									
								
							| @@ -1308,7 +1308,8 @@ input_csi_dispatch(struct input_ctx *ictx) | |||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
| 	case INPUT_CSI_ECH: | 	case INPUT_CSI_ECH: | ||||||
| 		screen_write_clearcharacter(sctx, input_get(ictx, 0, 1, 1)); | 		screen_write_clearcharacter(sctx, input_get(ictx, 0, 1, 1), | ||||||
|  | 		    ictx->cell.cell.bg); | ||||||
| 		break; | 		break; | ||||||
| 	case INPUT_CSI_DCH: | 	case INPUT_CSI_DCH: | ||||||
| 		screen_write_deletecharacter(sctx, input_get(ictx, 0, 1, 1), | 		screen_write_deletecharacter(sctx, input_get(ictx, 0, 1, 1), | ||||||
|   | |||||||
| @@ -606,7 +606,7 @@ screen_write_deletecharacter(struct screen_write_ctx *ctx, u_int nx, u_int bg) | |||||||
|  |  | ||||||
| /* Clear nx characters. */ | /* Clear nx characters. */ | ||||||
| void | void | ||||||
| screen_write_clearcharacter(struct screen_write_ctx *ctx, u_int nx) | screen_write_clearcharacter(struct screen_write_ctx *ctx, u_int nx, u_int bg) | ||||||
| { | { | ||||||
| 	struct screen	*s = ctx->s; | 	struct screen	*s = ctx->s; | ||||||
| 	struct tty_ctx	 ttyctx; | 	struct tty_ctx	 ttyctx; | ||||||
| @@ -623,6 +623,7 @@ screen_write_clearcharacter(struct screen_write_ctx *ctx, u_int nx) | |||||||
| 		return; | 		return; | ||||||
|  |  | ||||||
| 	screen_write_initctx(ctx, &ttyctx); | 	screen_write_initctx(ctx, &ttyctx); | ||||||
|  | 	ttyctx.bg = bg; | ||||||
|  |  | ||||||
| 	grid_view_clear(s->grid, s->cx, s->cy, nx, 1, 8); | 	grid_view_clear(s->grid, s->cx, s->cy, nx, 1, 8); | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								tmux.h
									
									
									
									
									
								
							| @@ -796,6 +796,7 @@ struct window_pane { | |||||||
| 	struct event	 modetimer; | 	struct event	 modetimer; | ||||||
| 	time_t		 modelast; | 	time_t		 modelast; | ||||||
| 	u_int		 modeprefix; | 	u_int		 modeprefix; | ||||||
|  | 	char		*searchstr; | ||||||
|  |  | ||||||
| 	TAILQ_ENTRY(window_pane) entry; | 	TAILQ_ENTRY(window_pane) entry; | ||||||
| 	RB_ENTRY(window_pane) tree_entry; | 	RB_ENTRY(window_pane) tree_entry; | ||||||
| @@ -2000,7 +2001,7 @@ void	 screen_write_cursorleft(struct screen_write_ctx *, u_int); | |||||||
| void	 screen_write_alignmenttest(struct screen_write_ctx *); | void	 screen_write_alignmenttest(struct screen_write_ctx *); | ||||||
| void	 screen_write_insertcharacter(struct screen_write_ctx *, u_int, u_int); | void	 screen_write_insertcharacter(struct screen_write_ctx *, u_int, u_int); | ||||||
| void	 screen_write_deletecharacter(struct screen_write_ctx *, u_int, u_int); | void	 screen_write_deletecharacter(struct screen_write_ctx *, u_int, u_int); | ||||||
| void	 screen_write_clearcharacter(struct screen_write_ctx *, u_int); | void	 screen_write_clearcharacter(struct screen_write_ctx *, u_int, u_int); | ||||||
| void	 screen_write_insertline(struct screen_write_ctx *, u_int, u_int); | void	 screen_write_insertline(struct screen_write_ctx *, u_int, u_int); | ||||||
| void	 screen_write_deleteline(struct screen_write_ctx *, u_int, u_int); | void	 screen_write_deleteline(struct screen_write_ctx *, u_int, u_int); | ||||||
| void	 screen_write_clearline(struct screen_write_ctx *, u_int); | void	 screen_write_clearline(struct screen_write_ctx *, u_int); | ||||||
| @@ -2181,7 +2182,6 @@ void		 window_copy_vadd(struct window_pane *, const char *, va_list); | |||||||
| void		 window_copy_pageup(struct window_pane *, int); | void		 window_copy_pageup(struct window_pane *, int); | ||||||
| void		 window_copy_start_drag(struct client *, struct mouse_event *); | void		 window_copy_start_drag(struct client *, struct mouse_event *); | ||||||
| int		 window_copy_scroll_position(struct window_pane *); | int		 window_copy_scroll_position(struct window_pane *); | ||||||
| const char	*window_copy_search_string(struct window_pane *); |  | ||||||
|  |  | ||||||
| /* window-choose.c */ | /* window-choose.c */ | ||||||
| extern const struct window_mode window_choose_mode; | extern const struct window_mode window_choose_mode; | ||||||
|   | |||||||
							
								
								
									
										30
									
								
								tty.c
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								tty.c
									
									
									
									
									
								
							| @@ -798,6 +798,7 @@ tty_clear_area(struct tty *tty, const struct window_pane *wp, u_int py, | |||||||
|     u_int ny, u_int px, u_int nx, u_int bg) |     u_int ny, u_int px, u_int nx, u_int bg) | ||||||
| { | { | ||||||
| 	u_int	yy; | 	u_int	yy; | ||||||
|  | 	char	tmp[64]; | ||||||
|  |  | ||||||
| 	log_debug("%s: %u,%u at %u,%u", __func__, nx, ny, px, py); | 	log_debug("%s: %u,%u at %u,%u", __func__, nx, ny, px, py); | ||||||
|  |  | ||||||
| @@ -807,6 +808,7 @@ tty_clear_area(struct tty *tty, const struct window_pane *wp, u_int py, | |||||||
|  |  | ||||||
| 	/* If genuine BCE is available, can try escape sequences. */ | 	/* If genuine BCE is available, can try escape sequences. */ | ||||||
| 	if (!tty_fake_bce(tty, wp, bg)) { | 	if (!tty_fake_bce(tty, wp, bg)) { | ||||||
|  | 		/* Use ED if clearing off the bottom of the terminal. */ | ||||||
| 		if (px == 0 && | 		if (px == 0 && | ||||||
| 		    px + nx >= tty->sx && | 		    px + nx >= tty->sx && | ||||||
| 		    py + ny >= tty->sy && | 		    py + ny >= tty->sy && | ||||||
| @@ -815,6 +817,32 @@ tty_clear_area(struct tty *tty, const struct window_pane *wp, u_int py, | |||||||
| 			tty_putcode(tty, TTYC_ED); | 			tty_putcode(tty, TTYC_ED); | ||||||
| 			return; | 			return; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | 		/* | ||||||
|  | 		 * On VT420 compatible terminals we can use DECFRA if the | ||||||
|  | 		 * background colour isn't default (because it doesn't work | ||||||
|  | 		 * after SGR 0). | ||||||
|  | 		 */ | ||||||
|  | 		if (tty->term_type == TTY_VT420 && bg != 8) { | ||||||
|  | 			xsnprintf(tmp, sizeof tmp, "\033[32;%u;%u;%u;%u$x", | ||||||
|  | 			    py + 1, px + 1, py + ny, px + nx); | ||||||
|  | 			tty_puts(tty, tmp); | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		/* | ||||||
|  | 		 * If margins are supported, can just scroll the area off to | ||||||
|  | 		 * clear it. | ||||||
|  | 		 */ | ||||||
|  | 		if (nx > 2 && | ||||||
|  | 		    ny > 2 && | ||||||
|  | 		    tty_use_margin(tty) && | ||||||
|  | 		    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); | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	/* Couldn't use an escape sequence, loop over the lines. */ | 	/* Couldn't use an escape sequence, loop over the lines. */ | ||||||
| @@ -1023,7 +1051,7 @@ tty_cmd_deletecharacter(struct tty *tty, const struct tty_ctx *ctx) | |||||||
| void | void | ||||||
| tty_cmd_clearcharacter(struct tty *tty, const struct tty_ctx *ctx) | tty_cmd_clearcharacter(struct tty *tty, const struct tty_ctx *ctx) | ||||||
| { | { | ||||||
| 	tty_attributes(tty, &grid_default_cell, ctx->wp); | 	tty_default_attributes(tty, ctx->wp, ctx->bg); | ||||||
|  |  | ||||||
| 	tty_cursor_pane(tty, ctx, ctx->ocx, ctx->ocy); | 	tty_cursor_pane(tty, ctx, ctx->ocx, ctx->ocy); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -208,8 +208,13 @@ window_copy_init(struct window_pane *wp) | |||||||
| 	data->rectflag = 0; | 	data->rectflag = 0; | ||||||
| 	data->scroll_exit = 0; | 	data->scroll_exit = 0; | ||||||
|  |  | ||||||
|  | 	if (wp->searchstr != NULL) { | ||||||
|  | 		data->searchtype = WINDOW_COPY_SEARCHUP; | ||||||
|  | 		data->searchstr = xstrdup(wp->searchstr); | ||||||
|  | 	} else { | ||||||
| 		data->searchtype = WINDOW_COPY_OFF; | 		data->searchtype = WINDOW_COPY_OFF; | ||||||
| 		data->searchstr = NULL; | 		data->searchstr = NULL; | ||||||
|  | 	} | ||||||
| 	data->searchmark = NULL; | 	data->searchmark = NULL; | ||||||
| 	data->searchx = data->searchy = data->searcho = -1; | 	data->searchx = data->searchy = data->searcho = -1; | ||||||
|  |  | ||||||
| @@ -1134,6 +1139,9 @@ window_copy_search(struct window_pane *wp, int direction, int moveflag) | |||||||
| 	u_int				 fx, fy, endline; | 	u_int				 fx, fy, endline; | ||||||
| 	int				 wrapflag, cis, found; | 	int				 wrapflag, cis, found; | ||||||
|  |  | ||||||
|  | 	free(wp->searchstr); | ||||||
|  | 	wp->searchstr = xstrdup(data->searchstr); | ||||||
|  |  | ||||||
| 	fx = data->cx; | 	fx = data->cx; | ||||||
| 	fy = screen_hsize(data->backing) - data->oy + data->cy; | 	fy = screen_hsize(data->backing) - data->oy + data->cy; | ||||||
|  |  | ||||||
| @@ -2482,16 +2490,3 @@ window_copy_drag_update(__unused struct client *c, struct mouse_event *m) | |||||||
| 	if (window_copy_update_selection(wp, 1)) | 	if (window_copy_update_selection(wp, 1)) | ||||||
| 		window_copy_redraw_selection(wp, old_cy); | 		window_copy_redraw_selection(wp, old_cy); | ||||||
| } | } | ||||||
|  |  | ||||||
| const char * |  | ||||||
| window_copy_search_string(struct window_pane *wp) |  | ||||||
| { |  | ||||||
| 	struct window_copy_mode_data	*data; |  | ||||||
|  |  | ||||||
| 	if (wp->mode != &window_copy_mode) |  | ||||||
| 		return (""); |  | ||||||
| 	data = wp->modedata; |  | ||||||
| 	if (data->searchtype == WINDOW_COPY_OFF || data->searchstr == NULL) |  | ||||||
| 		return (""); |  | ||||||
| 	return (data->searchstr); |  | ||||||
| } |  | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								window.c
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								window.c
									
									
									
									
									
								
							| @@ -828,6 +828,7 @@ static void | |||||||
| window_pane_destroy(struct window_pane *wp) | window_pane_destroy(struct window_pane *wp) | ||||||
| { | { | ||||||
| 	window_pane_reset_mode(wp); | 	window_pane_reset_mode(wp); | ||||||
|  | 	free(wp->searchstr); | ||||||
|  |  | ||||||
| 	if (wp->fd != -1) { | 	if (wp->fd != -1) { | ||||||
| #ifdef HAVE_UTEMPTER | #ifdef HAVE_UTEMPTER | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Thomas Adam
					Thomas Adam