1#ifndef NVIM_MENU_H
2#define NVIM_MENU_H
3
4#include <stdbool.h> // for bool
5
6#include "nvim/types.h" // for char_u and expand_T
7#include "nvim/ex_cmds_defs.h" // for exarg_T
8
9/// Indices into vimmenu_T->strings[] and vimmenu_T->noremap[] for each mode
10/// \addtogroup MENU_INDEX
11/// @{
12#define MENU_INDEX_INVALID -1
13#define MENU_INDEX_NORMAL 0
14#define MENU_INDEX_VISUAL 1
15#define MENU_INDEX_SELECT 2
16#define MENU_INDEX_OP_PENDING 3
17#define MENU_INDEX_INSERT 4
18#define MENU_INDEX_CMDLINE 5
19#define MENU_INDEX_TIP 6
20#define MENU_MODES 7
21/// @}
22/// note MENU_INDEX_TIP is not a 'real' mode
23
24/// Menu modes
25/// \addtogroup MENU_MODES
26/// @{
27#define MENU_NORMAL_MODE (1 << MENU_INDEX_NORMAL)
28#define MENU_VISUAL_MODE (1 << MENU_INDEX_VISUAL)
29#define MENU_SELECT_MODE (1 << MENU_INDEX_SELECT)
30#define MENU_OP_PENDING_MODE (1 << MENU_INDEX_OP_PENDING)
31#define MENU_INSERT_MODE (1 << MENU_INDEX_INSERT)
32#define MENU_CMDLINE_MODE (1 << MENU_INDEX_CMDLINE)
33#define MENU_TIP_MODE (1 << MENU_INDEX_TIP)
34#define MENU_ALL_MODES ((1 << MENU_INDEX_TIP) - 1)
35/// @}
36
37/// Start a menu name with this to not include it on the main menu bar
38#define MNU_HIDDEN_CHAR ']'
39
40typedef struct VimMenu vimmenu_T;
41
42struct VimMenu {
43 int modes; ///< Which modes is this menu visible for
44 int enabled; ///< for which modes the menu is enabled
45 char_u *name; ///< Name of menu, possibly translated
46 char_u *dname; ///< Displayed Name ("name" without '&')
47 char_u *en_name; ///< "name" untranslated, NULL when
48 ///< was not translated
49 char_u *en_dname; ///< NULL when "dname" untranslated
50 int mnemonic; ///< mnemonic key (after '&')
51 char_u *actext; ///< accelerator text (after TAB)
52 long priority; ///< Menu order priority
53 char_u *strings[MENU_MODES]; ///< Mapped string for each mode
54 int noremap[MENU_MODES]; ///< A \ref REMAP_VALUES flag for each mode
55 bool silent[MENU_MODES]; ///< A silent flag for each mode
56 vimmenu_T *children; ///< Children of sub-menu
57 vimmenu_T *parent; ///< Parent of menu
58 vimmenu_T *next; ///< Next item in menu
59};
60
61
62#ifdef INCLUDE_GENERATED_DECLARATIONS
63# include "menu.h.generated.h"
64#endif
65#endif // NVIM_MENU_H
66