mirror of
				https://github.com/tmux/tmux.git
				synced 2025-10-26 12:27:15 +00:00 
			
		
		
		
	Some tidying and helper functions.
This commit is contained in:
		| @@ -91,9 +91,8 @@ cmd_resize_pane_exec(struct cmd *self, struct cmdq_item *item) | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if (args_has(self->args, 'x')) { | 	if (args_has(args, 'x')) { | ||||||
| 		x = args_strtonum(self->args, 'x', PANE_MINIMUM, INT_MAX, | 		x = args_strtonum(args, 'x', PANE_MINIMUM, INT_MAX, &cause); | ||||||
| 		    &cause); |  | ||||||
| 		if (cause != NULL) { | 		if (cause != NULL) { | ||||||
| 			cmdq_error(item, "width %s", cause); | 			cmdq_error(item, "width %s", cause); | ||||||
| 			free(cause); | 			free(cause); | ||||||
| @@ -101,9 +100,8 @@ cmd_resize_pane_exec(struct cmd *self, struct cmdq_item *item) | |||||||
| 		} | 		} | ||||||
| 		layout_resize_pane_to(wp, LAYOUT_LEFTRIGHT, x); | 		layout_resize_pane_to(wp, LAYOUT_LEFTRIGHT, x); | ||||||
| 	} | 	} | ||||||
| 	if (args_has(self->args, 'y')) { | 	if (args_has(args, 'y')) { | ||||||
| 		y = args_strtonum(self->args, 'y', PANE_MINIMUM, INT_MAX, | 		y = args_strtonum(args, 'y', PANE_MINIMUM, INT_MAX, &cause); | ||||||
| 		    &cause); |  | ||||||
| 		if (cause != NULL) { | 		if (cause != NULL) { | ||||||
| 			cmdq_error(item, "height %s", cause); | 			cmdq_error(item, "height %s", cause); | ||||||
| 			free(cause); | 			free(cause); | ||||||
| @@ -112,13 +110,13 @@ cmd_resize_pane_exec(struct cmd *self, struct cmdq_item *item) | |||||||
| 		layout_resize_pane_to(wp, LAYOUT_TOPBOTTOM, y); | 		layout_resize_pane_to(wp, LAYOUT_TOPBOTTOM, y); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if (args_has(self->args, 'L')) | 	if (args_has(args, 'L')) | ||||||
| 		layout_resize_pane(wp, LAYOUT_LEFTRIGHT, -adjust, 1); | 		layout_resize_pane(wp, LAYOUT_LEFTRIGHT, -adjust, 1); | ||||||
| 	else if (args_has(self->args, 'R')) | 	else if (args_has(args, 'R')) | ||||||
| 		layout_resize_pane(wp, LAYOUT_LEFTRIGHT, adjust, 1); | 		layout_resize_pane(wp, LAYOUT_LEFTRIGHT, adjust, 1); | ||||||
| 	else if (args_has(self->args, 'U')) | 	else if (args_has(args, 'U')) | ||||||
| 		layout_resize_pane(wp, LAYOUT_TOPBOTTOM, -adjust, 1); | 		layout_resize_pane(wp, LAYOUT_TOPBOTTOM, -adjust, 1); | ||||||
| 	else if (args_has(self->args, 'D')) | 	else if (args_has(args, 'D')) | ||||||
| 		layout_resize_pane(wp, LAYOUT_TOPBOTTOM, adjust, 1); | 		layout_resize_pane(wp, LAYOUT_TOPBOTTOM, adjust, 1); | ||||||
| 	server_redraw_window(wl->window); | 	server_redraw_window(wl->window); | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										11
									
								
								format.c
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								format.c
									
									
									
									
									
								
							| @@ -1447,12 +1447,13 @@ format_defaults_winlink(struct format_tree *ft, struct winlink *wl) | |||||||
| void | void | ||||||
| format_defaults_pane(struct format_tree *ft, struct window_pane *wp) | format_defaults_pane(struct format_tree *ft, struct window_pane *wp) | ||||||
| { | { | ||||||
|  | 	struct window	*w = wp->window; | ||||||
| 	struct grid	*gd = wp->base.grid; | 	struct grid	*gd = wp->base.grid; | ||||||
| 	int  		 status = wp->status; | 	int  		 status = wp->status; | ||||||
| 	u_int		 idx; | 	u_int		 idx; | ||||||
|  |  | ||||||
| 	if (ft->w == NULL) | 	if (ft->w == NULL) | ||||||
| 		ft->w = wp->window; | 		ft->w = w; | ||||||
| 	ft->wp = wp; | 	ft->wp = wp; | ||||||
|  |  | ||||||
| 	format_add(ft, "history_size", "%u", gd->hsize); | 	format_add(ft, "history_size", "%u", gd->hsize); | ||||||
| @@ -1467,7 +1468,7 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp) | |||||||
| 	format_add(ft, "pane_height", "%u", wp->sy); | 	format_add(ft, "pane_height", "%u", wp->sy); | ||||||
| 	format_add(ft, "pane_title", "%s", wp->base.title); | 	format_add(ft, "pane_title", "%s", wp->base.title); | ||||||
| 	format_add(ft, "pane_id", "%%%u", wp->id); | 	format_add(ft, "pane_id", "%%%u", wp->id); | ||||||
| 	format_add(ft, "pane_active", "%d", wp == wp->window->active); | 	format_add(ft, "pane_active", "%d", wp == w->active); | ||||||
| 	format_add(ft, "pane_input_off", "%d", !!(wp->flags & PANE_INPUTOFF)); | 	format_add(ft, "pane_input_off", "%d", !!(wp->flags & PANE_INPUTOFF)); | ||||||
| 	format_add(ft, "pane_pipe", "%d", wp->pipe_fd != -1); | 	format_add(ft, "pane_pipe", "%d", wp->pipe_fd != -1); | ||||||
|  |  | ||||||
| @@ -1483,9 +1484,9 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp) | |||||||
| 		format_add(ft, "pane_at_left", "%d", wp->xoff == 0); | 		format_add(ft, "pane_at_left", "%d", wp->xoff == 0); | ||||||
| 		format_add(ft, "pane_at_top", "%d", wp->yoff == 0); | 		format_add(ft, "pane_at_top", "%d", wp->yoff == 0); | ||||||
| 		format_add(ft, "pane_at_right", "%d", | 		format_add(ft, "pane_at_right", "%d", | ||||||
| 		    wp->xoff + wp->sx == wp->window->sx); | 		    wp->xoff + wp->sx == w->sx); | ||||||
| 		format_add(ft, "pane_at_bottom", "%d", | 		format_add(ft, "pane_at_bottom", "%d", | ||||||
| 		    wp->yoff + wp->sy == wp->window->sy); | 		    wp->yoff + wp->sy == w->sy); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	format_add(ft, "pane_in_mode", "%d", wp->screen != &wp->base); | 	format_add(ft, "pane_in_mode", "%d", wp->screen != &wp->base); | ||||||
| @@ -1493,7 +1494,7 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp) | |||||||
| 		format_add(ft, "pane_mode", "%s", wp->mode->name); | 		format_add(ft, "pane_mode", "%s", wp->mode->name); | ||||||
|  |  | ||||||
| 	format_add(ft, "pane_synchronized", "%d", | 	format_add(ft, "pane_synchronized", "%d", | ||||||
| 	    !!options_get_number(wp->window->options, "synchronize-panes")); | 	    !!options_get_number(w->options, "synchronize-panes")); | ||||||
| 	if (wp->searchstr != NULL) | 	if (wp->searchstr != NULL) | ||||||
| 		format_add(ft, "pane_search_string", "%s", wp->searchstr); | 		format_add(ft, "pane_search_string", "%s", wp->searchstr); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -35,17 +35,6 @@ struct screen_redraw_ctx { | |||||||
| 	u_int		 sy; | 	u_int		 sy; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| static int	screen_redraw_cell_border1(struct window_pane *, u_int, u_int); |  | ||||||
| static int	screen_redraw_cell_border(struct client *, u_int, u_int); |  | ||||||
| static int	screen_redraw_check_cell(struct client *, u_int, u_int, int, |  | ||||||
| 		    struct window_pane **); |  | ||||||
| static int	screen_redraw_check_is(u_int, u_int, int, int, struct window *, |  | ||||||
| 		    struct window_pane *, struct window_pane *); |  | ||||||
|  |  | ||||||
| static int 	screen_redraw_make_pane_status(struct client *, struct window *, |  | ||||||
| 		    struct window_pane *); |  | ||||||
| static void	screen_redraw_draw_pane_status(struct client *, int); |  | ||||||
|  |  | ||||||
| static void	screen_redraw_draw_borders(struct screen_redraw_ctx *); | static void	screen_redraw_draw_borders(struct screen_redraw_ctx *); | ||||||
| static void	screen_redraw_draw_panes(struct screen_redraw_ctx *); | static void	screen_redraw_draw_panes(struct screen_redraw_ctx *); | ||||||
| static void	screen_redraw_draw_status(struct screen_redraw_ctx *); | static void	screen_redraw_draw_status(struct screen_redraw_ctx *); | ||||||
| @@ -327,8 +316,9 @@ screen_redraw_make_pane_status(struct client *c, struct window *w, | |||||||
|  |  | ||||||
| /* Draw pane status. */ | /* Draw pane status. */ | ||||||
| static void | static void | ||||||
| screen_redraw_draw_pane_status(struct client *c, int pane_status) | screen_redraw_draw_pane_status(struct screen_redraw_ctx *ctx) | ||||||
| { | { | ||||||
|  | 	struct client           *c = ctx->c; | ||||||
| 	struct window		*w = c->session->curw->window; | 	struct window		*w = c->session->curw->window; | ||||||
| 	struct options		*oo = c->session->options; | 	struct options		*oo = c->session->options; | ||||||
| 	struct tty		*tty = &c->tty; | 	struct tty		*tty = &c->tty; | ||||||
| @@ -340,7 +330,7 @@ screen_redraw_draw_pane_status(struct client *c, int pane_status) | |||||||
| 	TAILQ_FOREACH(wp, &w->panes, entry) { | 	TAILQ_FOREACH(wp, &w->panes, entry) { | ||||||
| 		if (!window_pane_visible(wp)) | 		if (!window_pane_visible(wp)) | ||||||
| 			continue; | 			continue; | ||||||
| 		if (pane_status == CELL_STATUS_TOP) | 		if (ctx->pane_status == CELL_STATUS_TOP) | ||||||
| 			yoff = wp->yoff - 1; | 			yoff = wp->yoff - 1; | ||||||
| 		else | 		else | ||||||
| 			yoff = wp->yoff + wp->sy; | 			yoff = wp->yoff + wp->sy; | ||||||
| @@ -382,50 +372,51 @@ screen_redraw_update(struct client *c) | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /* Set up redraw context. */ | ||||||
|  | static void | ||||||
|  | screen_redraw_set_context(struct client *c, struct screen_redraw_ctx *ctx) | ||||||
|  | { | ||||||
|  | 	struct session  *s = c->session; | ||||||
|  | 	struct options  *oo = s->options; | ||||||
|  | 	struct window   *w = s->curw->window; | ||||||
|  | 	struct options  *wo = w->options; | ||||||
|  |  | ||||||
|  | 	memset(ctx, 0, sizeof *ctx); | ||||||
|  | 	ctx->c = c; | ||||||
|  |  | ||||||
|  | 	ctx->lines = tty_status_lines(c); | ||||||
|  | 	if (ctx->lines != 0 && options_get_number(oo, "status-position") == 0) | ||||||
|  | 		ctx->top = 1; | ||||||
|  | 	ctx->pane_status = options_get_number(wo, "pane-border-status"); | ||||||
|  |  | ||||||
|  | 	ctx->sx = c->tty.sx; | ||||||
|  | 	ctx->sy = c->tty.sy - ctx->lines; | ||||||
|  | } | ||||||
|  |  | ||||||
| /* Redraw entire screen. */ | /* Redraw entire screen. */ | ||||||
| void | void | ||||||
| screen_redraw_screen(struct client *c, int draw_panes, int draw_status, | screen_redraw_screen(struct client *c, int draw_panes, int draw_status, | ||||||
|     int draw_borders) |     int draw_borders) | ||||||
| { | { | ||||||
| 	struct options			*oo = c->session->options; |  | ||||||
| 	struct tty			*tty = &c->tty; |  | ||||||
| 	struct window			*w = c->session->curw->window; |  | ||||||
| 	struct options			*wo = w->options; |  | ||||||
| 	struct screen_redraw_ctx	 ctx; | 	struct screen_redraw_ctx	 ctx; | ||||||
|  |  | ||||||
| 	if (c->flags & CLIENT_SUSPENDED) | 	if (c->flags & CLIENT_SUSPENDED) | ||||||
| 		return; | 		return; | ||||||
|  |  | ||||||
| 	memset(&ctx, 0, sizeof ctx); | 	screen_redraw_set_context(c, &ctx); | ||||||
| 	ctx.c = c; |  | ||||||
|  |  | ||||||
| 	if (c->flags & CLIENT_STATUSOFF) |  | ||||||
| 		ctx.lines = 0; |  | ||||||
| 	else |  | ||||||
| 		ctx.lines = status_line_size(c->session); |  | ||||||
| 	if (c->message_string != NULL || c->prompt_string != NULL) |  | ||||||
| 		ctx.lines = (ctx.lines == 0) ? 1 : ctx.lines; |  | ||||||
|  |  | ||||||
| 	if (ctx.lines != 0 && options_get_number(oo, "status-position") == 0) |  | ||||||
| 		ctx.top = 1; |  | ||||||
| 	ctx.pane_status = options_get_number(wo, "pane-border-status"); |  | ||||||
|  |  | ||||||
| 	ctx.sx = tty->sx; |  | ||||||
| 	ctx.sy = tty->sy - ctx.lines; |  | ||||||
|  |  | ||||||
| 	if (ctx.lines == 0) | 	if (ctx.lines == 0) | ||||||
| 		draw_status = 0; | 		draw_status = 0; | ||||||
|  |  | ||||||
| 	if (draw_borders) { | 	if (draw_borders) | ||||||
| 		if (ctx.pane_status != CELL_STATUS_OFF) |  | ||||||
| 			screen_redraw_draw_pane_status(c, ctx.pane_status); |  | ||||||
| 		screen_redraw_draw_borders(&ctx); | 		screen_redraw_draw_borders(&ctx); | ||||||
| 	} | 	if (draw_borders && ctx.pane_status != CELL_STATUS_OFF) | ||||||
|  | 		screen_redraw_draw_pane_status(&ctx); | ||||||
| 	if (draw_panes) | 	if (draw_panes) | ||||||
| 		screen_redraw_draw_panes(&ctx); | 		screen_redraw_draw_panes(&ctx); | ||||||
| 	if (draw_status) | 	if (draw_status) | ||||||
| 		screen_redraw_draw_status(&ctx); | 		screen_redraw_draw_status(&ctx); | ||||||
| 	tty_reset(tty); | 	tty_reset(&c->tty); | ||||||
| } | } | ||||||
|  |  | ||||||
| /* Draw a single pane. */ | /* Draw a single pane. */ | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								tmux.h
									
									
									
									
									
								
							| @@ -1638,6 +1638,7 @@ struct environ *environ_for_session(struct session *, int); | |||||||
|  |  | ||||||
| /* tty.c */ | /* tty.c */ | ||||||
| void	tty_create_log(void); | void	tty_create_log(void); | ||||||
|  | u_int	tty_status_lines(struct client *); | ||||||
| void	tty_raw(struct tty *, const char *); | void	tty_raw(struct tty *, const char *); | ||||||
| void	tty_attributes(struct tty *, const struct grid_cell *, | void	tty_attributes(struct tty *, const struct grid_cell *, | ||||||
| 	    const struct window_pane *); | 	    const struct window_pane *); | ||||||
|   | |||||||
							
								
								
									
										15
									
								
								tty.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								tty.c
									
									
									
									
									
								
							| @@ -698,6 +698,21 @@ tty_repeat_space(struct tty *tty, u_int n) | |||||||
| 		tty_putn(tty, s, n, n); | 		tty_putn(tty, s, n, n); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /* How many lines are taken up by the status line on this client? */ | ||||||
|  | u_int | ||||||
|  | tty_status_lines(struct client *c) | ||||||
|  | { | ||||||
|  | 	u_int	lines; | ||||||
|  |  | ||||||
|  | 	if (c->flags & CLIENT_STATUSOFF) | ||||||
|  | 		lines = 0; | ||||||
|  | 	else | ||||||
|  | 		lines = status_line_size(c->session); | ||||||
|  | 	if (c->message_string != NULL || c->prompt_string != NULL) | ||||||
|  | 		lines = (lines == 0) ? 1 : lines; | ||||||
|  | 	return (lines); | ||||||
|  | } | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * Is the region large enough to be worth redrawing once later rather than |  * Is the region large enough to be worth redrawing once later rather than | ||||||
|  * probably several times now? Currently yes if it is more than 50% of the |  * probably several times now? Currently yes if it is more than 50% of the | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 nicm
					nicm