Add support for simple menus usable with mouse or keyboard. New command

display-menu shows a menu (bound to the mouse on status line by default)
and a couple of extra formats for the default menus.
This commit is contained in:
nicm
2019-05-10 18:04:06 +00:00
parent 004a9b52f0
commit 6dcca5fda4
8 changed files with 661 additions and 17 deletions

24
tmux.h
View File

@ -748,20 +748,20 @@ struct screen_redraw_ctx {
#define screen_hsize(s) ((s)->grid->hsize)
#define screen_hlimit(s) ((s)->grid->hlimit)
/* Menu item. */
struct menu_item {
char *name;
char *command;
key_code key;
};
/* Menu. */
struct menu_item {
char *name;
char *command;
key_code key;
};
struct menu {
char *title;
struct menu_item *items;
u_int count;
u_int width;
};
typedef void (*menu_choice_cb)(struct menu *, u_int, key_code, void *);
#define MENU_NOMOUSE 0x1
/*
* Window mode. Windows can be in several modes and this is used to call the
@ -2550,6 +2550,16 @@ void printflike(1, 2) log_debug(const char *, ...);
__dead void printflike(1, 2) fatal(const char *, ...);
__dead void printflike(1, 2) fatalx(const char *, ...);
/* menu.c */
struct menu *menu_create_from_items(struct menu_item *, u_int,
struct client *, struct cmd_find_state *, const char *);
struct menu *menu_create_from_string(const char *, struct client *,
struct cmd_find_state *, const char *);
void menu_free(struct menu *);
int menu_display(struct menu *, int, struct cmdq_item *, u_int,
u_int, struct client *, struct cmd_find_state *,
menu_choice_cb, void *);
/* style.c */
int style_parse(struct style *,const struct grid_cell *,
const char *);