aboutsummaryrefslogtreecommitdiff
path: root/src/menu.h
blob: 6d1732703f37bae9114c54c14484f78052f3679f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#ifndef NEOVIM_MENU_H
#define NEOVIM_MENU_H

/* Indices into vimmenu_T->strings[] and vimmenu_T->noremap[] for each mode */
#define MENU_INDEX_INVALID      -1
#define MENU_INDEX_NORMAL       0
#define MENU_INDEX_VISUAL       1
#define MENU_INDEX_SELECT       2
#define MENU_INDEX_OP_PENDING   3
#define MENU_INDEX_INSERT       4
#define MENU_INDEX_CMDLINE      5
#define MENU_INDEX_TIP          6
#define MENU_MODES              7

/* Menu modes */
#define MENU_NORMAL_MODE        (1 << MENU_INDEX_NORMAL)
#define MENU_VISUAL_MODE        (1 << MENU_INDEX_VISUAL)
#define MENU_SELECT_MODE        (1 << MENU_INDEX_SELECT)
#define MENU_OP_PENDING_MODE    (1 << MENU_INDEX_OP_PENDING)
#define MENU_INSERT_MODE        (1 << MENU_INDEX_INSERT)
#define MENU_CMDLINE_MODE       (1 << MENU_INDEX_CMDLINE)
#define MENU_TIP_MODE           (1 << MENU_INDEX_TIP)
#define MENU_ALL_MODES          ((1 << MENU_INDEX_TIP) - 1)
/*note MENU_INDEX_TIP is not a 'real' mode*/

/* Start a menu name with this to not include it on the main menu bar */
#define MNU_HIDDEN_CHAR         ']'

typedef struct VimMenu vimmenu_T;

struct VimMenu {
  int modes;                        /* Which modes is this menu visible for? */
  int enabled;                      /* for which modes the menu is enabled */
  char_u      *name;                /* Name of menu, possibly translated */
  char_u      *dname;               /* Displayed Name ("name" without '&') */
  char_u      *en_name;             /* "name" untranslated, NULL when "name"
                                     * was not translated */
  char_u      *en_dname;            /* "dname" untranslated, NULL when "dname"
                                     * was not translated */
  int mnemonic;                     /* mnemonic key (after '&') */
  char_u      *actext;              /* accelerator text (after TAB) */
  int priority;                     /* Menu order priority */
  char_u      *strings[MENU_MODES];   /* Mapped string for each mode */
  int noremap[MENU_MODES];           /* A REMAP_ flag for each mode */
  char silent[MENU_MODES];          /* A silent flag for each mode */
  vimmenu_T   *children;            /* Children of sub-menu */
  vimmenu_T   *parent;              /* Parent of menu */
  vimmenu_T   *next;                /* Next item in menu */
};

void ex_menu(exarg_T *eap);
char_u *set_context_in_menu_cmd(expand_T *xp, char_u *cmd, char_u *arg,
                                int forceit);
char_u *get_menu_name(expand_T *xp, int idx);
char_u *get_menu_names(expand_T *xp, int idx);
char_u *menu_name_skip(char_u *name);
int get_menu_index(vimmenu_T *menu, int state);
int menu_is_menubar(char_u *name);
int menu_is_popup(char_u *name);
int menu_is_child_of_popup(vimmenu_T *menu);
int menu_is_toolbar(char_u *name);
int menu_is_separator(char_u *name);
int check_menu_pointer(vimmenu_T *root, vimmenu_T *menu_to_check);
void gui_create_initial_menus(vimmenu_T *menu);
void gui_update_menus(int modes);
int gui_is_menu_shortcut(int key);
void gui_show_popupmenu(void);
void gui_mch_toggle_tearoffs(int enable);
void ex_emenu(exarg_T *eap);
vimmenu_T *gui_find_menu(char_u *path_name);
void ex_menutranslate(exarg_T *eap);
/* vim: set ft=c : */
#endif /* NEOVIM_MENU_H */