mirror of
				https://github.com/tmux/tmux.git
				synced 2025-10-26 12:27:15 +00:00 
			
		
		
		
	Add -s and -S to display-popup to set popup and border style, from
Alexis Hildebrandt in GitHub issue 2931.
This commit is contained in:
		| @@ -53,11 +53,12 @@ const struct cmd_entry cmd_display_popup_entry = { | |||||||
| 	.name = "display-popup", | 	.name = "display-popup", | ||||||
| 	.alias = "popup", | 	.alias = "popup", | ||||||
|  |  | ||||||
| 	.args = { "Bb:Cc:d:e:Eh:t:T:w:x:y:", 0, -1, NULL }, | 	.args = { "Bb:Cc:d:e:Eh:s:S:t:T:w:x:y:", 0, -1, NULL }, | ||||||
| 	.usage = "[-BCE] [-b border-lines] [-c target-client] " | 	.usage = "[-BCE] [-b border-lines] [-c target-client] " | ||||||
| 		 "[-d start-directory] [-e environment] [-h height] " | 		 "[-d start-directory] [-e environment] [-h height] " | ||||||
| 		 CMD_TARGET_PANE_USAGE " [-T title] " | 		 "[-s style] [-S border-style] " CMD_TARGET_PANE_USAGE | ||||||
| 		 "[-w width] [-x position] [-y position] [shell-command]", | 		 "[-T title] [-w width] [-x position] [-y position] " | ||||||
|  | 		 "[shell-command]", | ||||||
|  |  | ||||||
| 	.target = { 't', CMD_FIND_PANE, 0 }, | 	.target = { 't', CMD_FIND_PANE, 0 }, | ||||||
|  |  | ||||||
| @@ -355,6 +356,8 @@ cmd_display_popup_exec(struct cmd *self, struct cmdq_item *item) | |||||||
| 	struct client		*tc = cmdq_get_target_client(item); | 	struct client		*tc = cmdq_get_target_client(item); | ||||||
| 	struct tty		*tty = &tc->tty; | 	struct tty		*tty = &tc->tty; | ||||||
| 	const char		*value, *shell, *shellcmd = NULL; | 	const char		*value, *shell, *shellcmd = NULL; | ||||||
|  | 	const char		*style = args_get(args, 's'); | ||||||
|  | 	const char		*border_style = args_get(args, 'S'); | ||||||
| 	char			*cwd, *cause = NULL, **argv = NULL, *title; | 	char			*cwd, *cause = NULL, **argv = NULL, *title; | ||||||
| 	int			 flags = 0, argc = 0; | 	int			 flags = 0, argc = 0; | ||||||
| 	enum box_lines		 lines = BOX_LINES_DEFAULT; | 	enum box_lines		 lines = BOX_LINES_DEFAULT; | ||||||
| @@ -448,7 +451,7 @@ cmd_display_popup_exec(struct cmd *self, struct cmdq_item *item) | |||||||
| 	else if (args_has(args, 'E')) | 	else if (args_has(args, 'E')) | ||||||
| 		flags |= POPUP_CLOSEEXIT; | 		flags |= POPUP_CLOSEEXIT; | ||||||
| 	if (popup_display(flags, lines, item, px, py, w, h, env, shellcmd, argc, | 	if (popup_display(flags, lines, item, px, py, w, h, env, shellcmd, argc, | ||||||
| 	    argv, cwd, title, tc, s, NULL, NULL) != 0) { | 	    argv, cwd, title, tc, s, style, border_style, NULL, NULL) != 0) { | ||||||
| 		cmd_free_argv(argc, argv); | 		cmd_free_argv(argc, argv); | ||||||
| 		if (env != NULL) | 		if (env != NULL) | ||||||
| 			environ_free(env); | 			environ_free(env); | ||||||
|   | |||||||
							
								
								
									
										24
									
								
								popup.c
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								popup.c
									
									
									
									
									
								
							| @@ -237,9 +237,9 @@ popup_draw_cb(struct client *c, void *data, struct screen_redraw_ctx *rctx) | |||||||
| 	screen_write_stop(&ctx); | 	screen_write_stop(&ctx); | ||||||
|  |  | ||||||
| 	memcpy(&defaults, &pd->defaults, sizeof defaults); | 	memcpy(&defaults, &pd->defaults, sizeof defaults); | ||||||
| 	if (COLOUR_DEFAULT(defaults.fg)) | 	if (defaults.fg == 8) | ||||||
| 		defaults.fg = palette->fg; | 		defaults.fg = palette->fg; | ||||||
| 	if (COLOUR_DEFAULT(defaults.bg)) | 	if (defaults.bg == 8) | ||||||
| 		defaults.bg = palette->bg; | 		defaults.bg = palette->bg; | ||||||
|  |  | ||||||
| 	if (pd->md != NULL) { | 	if (pd->md != NULL) { | ||||||
| @@ -636,11 +636,13 @@ int | |||||||
| popup_display(int flags, enum box_lines lines, struct cmdq_item *item, u_int px, | popup_display(int flags, enum box_lines lines, struct cmdq_item *item, u_int px, | ||||||
|     u_int py, u_int sx, u_int sy, struct environ *env, const char *shellcmd, |     u_int py, u_int sx, u_int sy, struct environ *env, const char *shellcmd, | ||||||
|     int argc, char **argv, const char *cwd, const char *title, struct client *c, |     int argc, char **argv, const char *cwd, const char *title, struct client *c, | ||||||
|     struct session *s, popup_close_cb cb, void *arg) |     struct session *s, const char* style, const char* border_style, | ||||||
|  |     popup_close_cb cb, void *arg) | ||||||
| { | { | ||||||
| 	struct popup_data	*pd; | 	struct popup_data	*pd; | ||||||
| 	u_int			 jx, jy; | 	u_int			 jx, jy; | ||||||
| 	struct options		*o; | 	struct options		*o; | ||||||
|  | 	struct style		 sytmp; | ||||||
|  |  | ||||||
| 	if (s != NULL) | 	if (s != NULL) | ||||||
| 		o = s->curw->window->options; | 		o = s->curw->window->options; | ||||||
| @@ -678,6 +680,13 @@ popup_display(int flags, enum box_lines lines, struct cmdq_item *item, u_int px, | |||||||
| 	pd->border_lines = lines; | 	pd->border_lines = lines; | ||||||
| 	memcpy(&pd->border_cell, &grid_default_cell, sizeof pd->border_cell); | 	memcpy(&pd->border_cell, &grid_default_cell, sizeof pd->border_cell); | ||||||
| 	style_apply(&pd->border_cell, o, "popup-border-style", NULL); | 	style_apply(&pd->border_cell, o, "popup-border-style", NULL); | ||||||
|  | 	if (border_style != NULL) { | ||||||
|  | 		style_set(&sytmp, &grid_default_cell); | ||||||
|  | 		if (style_parse(&sytmp, &pd->border_cell, border_style) == 0) { | ||||||
|  | 			pd->border_cell.fg = sytmp.gc.fg; | ||||||
|  | 			pd->border_cell.bg = sytmp.gc.bg; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
| 	pd->border_cell.attr = 0; | 	pd->border_cell.attr = 0; | ||||||
|  |  | ||||||
| 	screen_init(&pd->s, sx - 2, sy - 2, 0); | 	screen_init(&pd->s, sx - 2, sy - 2, 0); | ||||||
| @@ -686,6 +695,13 @@ popup_display(int flags, enum box_lines lines, struct cmdq_item *item, u_int px, | |||||||
|  |  | ||||||
| 	memcpy(&pd->defaults, &grid_default_cell, sizeof pd->defaults); | 	memcpy(&pd->defaults, &grid_default_cell, sizeof pd->defaults); | ||||||
| 	style_apply(&pd->defaults, o, "popup-style", NULL); | 	style_apply(&pd->defaults, o, "popup-style", NULL); | ||||||
|  | 	if (style != NULL) { | ||||||
|  | 		style_set(&sytmp, &grid_default_cell); | ||||||
|  | 		if (style_parse(&sytmp, &pd->defaults, style) == 0) { | ||||||
|  | 			pd->defaults.fg = sytmp.gc.fg; | ||||||
|  | 			pd->defaults.bg = sytmp.gc.bg; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
| 	pd->defaults.attr = 0; | 	pd->defaults.attr = 0; | ||||||
|  |  | ||||||
| 	pd->px = px; | 	pd->px = px; | ||||||
| @@ -789,7 +805,7 @@ popup_editor(struct client *c, const char *buf, size_t len, | |||||||
| 	xasprintf(&cmd, "%s %s", editor, path); | 	xasprintf(&cmd, "%s %s", editor, path); | ||||||
| 	if (popup_display(POPUP_INTERNAL|POPUP_CLOSEEXIT, BOX_LINES_DEFAULT, | 	if (popup_display(POPUP_INTERNAL|POPUP_CLOSEEXIT, BOX_LINES_DEFAULT, | ||||||
| 	    NULL, px, py, sx, sy, NULL, cmd, 0, NULL, _PATH_TMP, NULL, c, NULL, | 	    NULL, px, py, sx, sy, NULL, cmd, 0, NULL, _PATH_TMP, NULL, c, NULL, | ||||||
| 	    popup_editor_close_cb, pe) != 0) { | 	    NULL, NULL, popup_editor_close_cb, pe) != 0) { | ||||||
| 		popup_editor_free(pe); | 		popup_editor_free(pe); | ||||||
| 		free(cmd); | 		free(cmd); | ||||||
| 		return (-1); | 		return (-1); | ||||||
|   | |||||||
| @@ -184,9 +184,9 @@ screen_write_initctx(struct screen_write_ctx *ctx, struct tty_ctx *ttyctx, | |||||||
| 	if (ctx->init_ctx_cb != NULL) { | 	if (ctx->init_ctx_cb != NULL) { | ||||||
| 		ctx->init_ctx_cb(ctx, ttyctx); | 		ctx->init_ctx_cb(ctx, ttyctx); | ||||||
| 		if (ttyctx->palette != NULL) { | 		if (ttyctx->palette != NULL) { | ||||||
| 			if (COLOUR_DEFAULT(ttyctx->defaults.fg)) | 			if (ttyctx->defaults.fg == 8) | ||||||
| 				ttyctx->defaults.fg = ttyctx->palette->fg; | 				ttyctx->defaults.fg = ttyctx->palette->fg; | ||||||
| 			if (COLOUR_DEFAULT(ttyctx->defaults.bg)) | 			if (ttyctx->defaults.bg == 8) | ||||||
| 				ttyctx->defaults.bg = ttyctx->palette->bg; | 				ttyctx->defaults.bg = ttyctx->palette->bg; | ||||||
| 		} | 		} | ||||||
| 	} else { | 	} else { | ||||||
|   | |||||||
							
								
								
									
										12
									
								
								tmux.1
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								tmux.1
									
									
									
									
									
								
							| @@ -5800,6 +5800,8 @@ forwards any input read from stdin to the empty pane given by | |||||||
| .Op Fl d Ar start-directory | .Op Fl d Ar start-directory | ||||||
| .Op Fl e Ar environment | .Op Fl e Ar environment | ||||||
| .Op Fl h Ar height | .Op Fl h Ar height | ||||||
|  | .Op Fl s Ar style | ||||||
|  | .Op Fl S Ar border-style | ||||||
| .Op Fl t Ar target-pane | .Op Fl t Ar target-pane | ||||||
| .Op Fl T Ar title | .Op Fl T Ar title | ||||||
| .Op Fl w Ar width | .Op Fl w Ar width | ||||||
| @@ -5853,6 +5855,16 @@ See | |||||||
| for possible values for | for possible values for | ||||||
| .Ar border-lines . | .Ar border-lines . | ||||||
| .Pp | .Pp | ||||||
|  | .Fl s | ||||||
|  | sets the style for the popup and | ||||||
|  | .Fl S | ||||||
|  | sets the style for the popup border. | ||||||
|  | For how to specify | ||||||
|  | .Ar style , | ||||||
|  | see the | ||||||
|  | .Sx STYLES | ||||||
|  | section. | ||||||
|  | .Pp | ||||||
| .Fl e | .Fl e | ||||||
| takes the form | takes the form | ||||||
| .Ql VARIABLE=value | .Ql VARIABLE=value | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								tmux.h
									
									
									
									
									
								
							| @@ -3155,7 +3155,8 @@ typedef void (*popup_finish_edit_cb)(char *, size_t, void *); | |||||||
| int		 popup_display(int, int, struct cmdq_item *, u_int, u_int, | int		 popup_display(int, int, struct cmdq_item *, u_int, u_int, | ||||||
| 		    u_int, u_int, struct environ *, const char *, int, char **, | 		    u_int, u_int, struct environ *, const char *, int, char **, | ||||||
| 		    const char *, const char *, struct client *, | 		    const char *, const char *, struct client *, | ||||||
| 		    struct session *, popup_close_cb, void *); | 		    struct session *, const char *, const char *, | ||||||
|  | 		    popup_close_cb, void *); | ||||||
| int		 popup_editor(struct client *, const char *, size_t, | int		 popup_editor(struct client *, const char *, size_t, | ||||||
| 		    popup_finish_edit_cb, void *); | 		    popup_finish_edit_cb, void *); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 nicm
					nicm