From 593fddf84b6ae661df46597a22107babcc77efd5 Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 28 Mar 2020 09:51:12 +0000 Subject: [PATCH 1/2] Make two -E only close popup automatically if the command exited with 0. --- popup.c | 5 ++++- tmux.1 | 5 +++++ tmux.h | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/popup.c b/popup.c index f4afbd85..f2b9bd11 100644 --- a/popup.c +++ b/popup.c @@ -260,7 +260,8 @@ popup_key_cb(struct client *c, struct key_event *event) if (pd->ictx != NULL && (pd->flags & POPUP_WRITEKEYS)) { if (KEYC_IS_MOUSE(event->key)) return (0); - if ((~pd->flags & POPUP_CLOSEEXIT) && + if (((pd->flags & (POPUP_CLOSEEXIT|POPUP_CLOSEEXITZERO)) == 0 || + pd->job == NULL) && (event->key == '\033' || event->key == '\003')) return (1); if (pd->job == NULL) @@ -347,6 +348,8 @@ popup_job_complete_cb(struct job *job) if (pd->flags & POPUP_CLOSEEXIT) server_client_clear_overlay(pd->c); + if ((pd->flags & POPUP_CLOSEEXITZERO) && pd->status == 0) + server_client_clear_overlay(pd->c); } u_int diff --git a/tmux.1 b/tmux.1 index aec7f79e..5ee1a5aa 100644 --- a/tmux.1 +++ b/tmux.1 @@ -5032,6 +5032,11 @@ shell command. closes the popup automatically when .Ar shell-command exits. +Two +.Fl E +closes the popup only if +.Ar shell-command +exited with success. With .Fl K , .Ql Escape diff --git a/tmux.h b/tmux.h index bcec0a23..a9f4de8a 100644 --- a/tmux.h +++ b/tmux.h @@ -2761,6 +2761,7 @@ int menu_display(struct menu *, int, struct cmdq_item *, u_int, /* popup.c */ #define POPUP_WRITEKEYS 0x1 #define POPUP_CLOSEEXIT 0x2 +#define POPUP_CLOSEEXITZERO 0x4 u_int popup_width(struct cmdq_item *, u_int, const char **, struct client *, struct cmd_find_state *); u_int popup_height(u_int, const char **); From 8036d0f834bbcce1a0eeff983750086354aec1e2 Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 28 Mar 2020 09:55:30 +0000 Subject: [PATCH 2/2] Change default position for menu and popup to centre rather than top left. --- cmd-display-menu.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/cmd-display-menu.c b/cmd-display-menu.c index e12a24ab..3e756116 100644 --- a/cmd-display-menu.c +++ b/cmd-display-menu.c @@ -73,12 +73,10 @@ cmd_display_menu_get_position(struct client *c, struct cmdq_item *item, u_int ox, oy, sx, sy; xp = args_get(args, 'x'); - if (xp == NULL) - *px = 0; + if (xp == NULL || strcmp(xp, "C") == 0) + *px = (c->tty.sx - 1) / 2 - w / 2; else if (strcmp(xp, "R") == 0) *px = c->tty.sx - 1; - else if (strcmp(xp, "C") == 0) - *px = (c->tty.sx - 1) / 2 - w / 2; else if (strcmp(xp, "P") == 0) { tty_window_offset(&c->tty, &ox, &oy, &sx, &sy); if (wp->xoff >= ox) @@ -111,9 +109,7 @@ cmd_display_menu_get_position(struct client *c, struct cmdq_item *item, *px = c->tty.sx - w; yp = args_get(args, 'y'); - if (yp == NULL) - *py = 0; - else if (strcmp(yp, "C") == 0) + if (yp == NULL || strcmp(yp, "C") == 0) *py = (c->tty.sy - 1) / 2 + h / 2; else if (strcmp(yp, "P") == 0) { tty_window_offset(&c->tty, &ox, &oy, &sx, &sy); @@ -280,7 +276,9 @@ cmd_display_popup_exec(struct cmd *self, struct cmdq_item *item) if (args_has(args, 'K')) flags |= POPUP_WRITEKEYS; - if (args_has(args, 'E')) + if (args_has(args, 'E') > 1) + flags |= POPUP_CLOSEEXITZERO; + else if (args_has(args, 'E')) flags |= POPUP_CLOSEEXIT; if (popup_display(flags, item, px, py, w, h, nlines, lines, shellcmd, cmd, cwd, c, fs) != 0)