1.  Expose server_client_clear_overlay() to enable menus to be
manpulated outside of the client which has the menu open.  If the client
receives a command from a different client to display a new menu, tear
the current one down and use the new one.

2.  Start the menu selection at 0 so the first item is highlighted by
default.

I'm not precious about either change...
---
 cmd-display-menu.c | 2 +-
 menu.c             | 2 +-
 server-client.c    | 3 +--
 tmux.h             | 1 +
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/cmd-display-menu.c b/cmd-display-menu.c
index 27bf454d..582a59c4 100644
--- a/cmd-display-menu.c
+++ b/cmd-display-menu.c
@@ -63,7 +63,7 @@ cmd_display_menu_exec(struct cmd *self, struct cmdq_item 
*item)
        if ((c = cmd_find_client(item, args_get(args, 'c'), 0)) == NULL)
                return (CMD_RETURN_ERROR);
        if (c->overlay_draw != NULL)
-               return (CMD_RETURN_NORMAL);
+               server_client_clear_overlay(c);
        at = status_at_line(c);
 
        string = args_get(args, 'M');
diff --git a/menu.c b/menu.c
index 0443d22f..9c0a93d6 100644
--- a/menu.c
+++ b/menu.c
@@ -331,7 +331,7 @@ menu_display(struct menu *menu, int flags, struct cmdq_item 
*item, u_int px,
        md->py = py;
 
        md->menu = menu;
-       md->choice = -1;
+       md->choice = 0;
 
        md->cb = cb;
        md->data = data;
diff --git a/server-client.c b/server-client.c
index fdc40d8d..f131bfd0 100644
--- a/server-client.c
+++ b/server-client.c
@@ -41,7 +41,6 @@ static void   server_client_check_redraw(struct client *);
 static void    server_client_set_title(struct client *);
 static void    server_client_reset_state(struct client *);
 static int     server_client_assume_paste(struct session *);
-static void    server_client_clear_overlay(struct client *);
 
 static void    server_client_dispatch(struct imsg *, void *);
 static void    server_client_dispatch_command(struct client *, struct imsg *);
@@ -99,7 +98,7 @@ server_client_set_overlay(struct client *c, u_int delay, 
overlay_draw_cb drawcb,
 }
 
 /* Clear overlay mode on client. */
-static void
+void
 server_client_clear_overlay(struct client *c)
 {
        if (c->overlay_draw == NULL)
diff --git a/tmux.h b/tmux.h
index 794dd3d7..67e93631 100644
--- a/tmux.h
+++ b/tmux.h
@@ -2049,6 +2049,7 @@ void       server_add_accept(int);
 u_int   server_client_how_many(void);
 void    server_client_set_overlay(struct client *, u_int, overlay_draw_cb,
     overlay_key_cb, overlay_free_cb, void *);
+void    server_client_clear_overlay(struct client *);
 void    server_client_set_key_table(struct client *, const char *);
 const char *server_client_get_key_table(struct client *);
 int     server_client_check_nested(struct client *);
-- 
2.20.1

-- 
You received this message because you are subscribed to the Google Groups 
"tmux-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send an email to [email protected].
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/tmux-users/20190510220541.7689-1-thomas%40xteddy.org.
For more options, visit https://groups.google.com/d/optout.

Reply via email to