mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-03 16:46:18 +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",
 | 
			
		||||
	.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] "
 | 
			
		||||
		 "[-d start-directory] [-e environment] [-h height] "
 | 
			
		||||
		 CMD_TARGET_PANE_USAGE " [-T title] "
 | 
			
		||||
		 "[-w width] [-x position] [-y position] [shell-command]",
 | 
			
		||||
		 "[-s style] [-S border-style] " CMD_TARGET_PANE_USAGE
 | 
			
		||||
		 "[-T title] [-w width] [-x position] [-y position] "
 | 
			
		||||
		 "[shell-command]",
 | 
			
		||||
 | 
			
		||||
	.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 tty		*tty = &tc->tty;
 | 
			
		||||
	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;
 | 
			
		||||
	int			 flags = 0, argc = 0;
 | 
			
		||||
	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'))
 | 
			
		||||
		flags |= POPUP_CLOSEEXIT;
 | 
			
		||||
	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);
 | 
			
		||||
		if (env != NULL)
 | 
			
		||||
			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);
 | 
			
		||||
 | 
			
		||||
	memcpy(&defaults, &pd->defaults, sizeof defaults);
 | 
			
		||||
	if (COLOUR_DEFAULT(defaults.fg))
 | 
			
		||||
	if (defaults.fg == 8)
 | 
			
		||||
		defaults.fg = palette->fg;
 | 
			
		||||
	if (COLOUR_DEFAULT(defaults.bg))
 | 
			
		||||
	if (defaults.bg == 8)
 | 
			
		||||
		defaults.bg = palette->bg;
 | 
			
		||||
 | 
			
		||||
	if (pd->md != NULL) {
 | 
			
		||||
@@ -636,11 +636,13 @@ int
 | 
			
		||||
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,
 | 
			
		||||
    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;
 | 
			
		||||
	u_int			 jx, jy;
 | 
			
		||||
	struct options		*o;
 | 
			
		||||
	struct style		 sytmp;
 | 
			
		||||
 | 
			
		||||
	if (s != NULL)
 | 
			
		||||
		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;
 | 
			
		||||
	memcpy(&pd->border_cell, &grid_default_cell, sizeof pd->border_cell);
 | 
			
		||||
	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;
 | 
			
		||||
 | 
			
		||||
	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);
 | 
			
		||||
	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->px = px;
 | 
			
		||||
@@ -789,7 +805,7 @@ popup_editor(struct client *c, const char *buf, size_t len,
 | 
			
		||||
	xasprintf(&cmd, "%s %s", editor, path);
 | 
			
		||||
	if (popup_display(POPUP_INTERNAL|POPUP_CLOSEEXIT, BOX_LINES_DEFAULT,
 | 
			
		||||
	    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);
 | 
			
		||||
		free(cmd);
 | 
			
		||||
		return (-1);
 | 
			
		||||
 
 | 
			
		||||
@@ -184,9 +184,9 @@ screen_write_initctx(struct screen_write_ctx *ctx, struct tty_ctx *ttyctx,
 | 
			
		||||
	if (ctx->init_ctx_cb != NULL) {
 | 
			
		||||
		ctx->init_ctx_cb(ctx, ttyctx);
 | 
			
		||||
		if (ttyctx->palette != NULL) {
 | 
			
		||||
			if (COLOUR_DEFAULT(ttyctx->defaults.fg))
 | 
			
		||||
			if (ttyctx->defaults.fg == 8)
 | 
			
		||||
				ttyctx->defaults.fg = ttyctx->palette->fg;
 | 
			
		||||
			if (COLOUR_DEFAULT(ttyctx->defaults.bg))
 | 
			
		||||
			if (ttyctx->defaults.bg == 8)
 | 
			
		||||
				ttyctx->defaults.bg = ttyctx->palette->bg;
 | 
			
		||||
		}
 | 
			
		||||
	} 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 e Ar environment
 | 
			
		||||
.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 title
 | 
			
		||||
.Op Fl w Ar width
 | 
			
		||||
@@ -5853,6 +5855,16 @@ See
 | 
			
		||||
for possible values for
 | 
			
		||||
.Ar border-lines .
 | 
			
		||||
.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
 | 
			
		||||
takes the form
 | 
			
		||||
.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,
 | 
			
		||||
		    u_int, u_int, struct environ *, const char *, int, char **,
 | 
			
		||||
		    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,
 | 
			
		||||
		    popup_finish_edit_cb, void *);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user