diff options
-rw-r--r-- | runtime/doc/gui.txt | 6 | ||||
-rw-r--r-- | src/globals.h | 3 | ||||
-rw-r--r-- | src/menu.c | 5 | ||||
-rw-r--r-- | src/popupmnu.c | 8 | ||||
-rw-r--r-- | src/testdir/test_popup.vim | 13 | ||||
-rw-r--r-- | src/version.c | 2 |
6 files changed, 32 insertions, 5 deletions
diff --git a/runtime/doc/gui.txt b/runtime/doc/gui.txt index 565f8a518..5df8f533b 100644 --- a/runtime/doc/gui.txt +++ b/runtime/doc/gui.txt @@ -1,4 +1,4 @@ -*gui.txt* For Vim version 8.1. Last change: 2018 Mar 06 +*gui.txt* For Vim version 8.1. Last change: 2019 Jan 06 VIM REFERENCE MANUAL by Bram Moolenaar @@ -914,7 +914,9 @@ may be used to complete the name of the menu item for the appropriate mode. To remove all menus use: *:unmenu-all* > :unmenu * " remove all menus in Normal and visual mode :unmenu! * " remove all menus in Insert and Command-line mode - :aunmenu * " remove all menus in all modes + :aunmenu * " remove all menus in all modes, except for Terminal + " mode + :tlunmenu * " remove all menus in Terminal mode If you want to get rid of the menu bar: > :set guioptions-=m diff --git a/src/globals.h b/src/globals.h index 2a7ecd17b..3f67d1377 100644 --- a/src/globals.h +++ b/src/globals.h @@ -1583,6 +1583,9 @@ EXTERN char_u e_invalidreg[] INIT(= N_("E850: Invalid register name")); #endif EXTERN char_u e_dirnotf[] INIT(= N_("E919: Directory not found in '%s': \"%s\"")); EXTERN char_u e_au_recursive[] INIT(= N_("E952: Autocommand caused recursive behavior")); +#ifdef FEAT_MENU +EXTERN char_u e_menuothermode[] INIT(= N_("E328: Menu only exists in another mode")); +#endif #ifdef FEAT_GUI_MAC EXTERN short disallow_gui INIT(= FALSE); diff --git a/src/menu.c b/src/menu.c index 782235a11..944211844 100644 --- a/src/menu.c +++ b/src/menu.c @@ -61,7 +61,6 @@ static char_u *menu_translate_tab_and_shift(char_u *arg_start); static char *menu_mode_chars[] = {"n", "v", "s", "o", "i", "c", "tl", "t"}; static char_u e_notsubmenu[] = N_("E327: Part of menu-item path is not sub-menu"); -static char_u e_othermode[] = N_("E328: Menu only exists in another mode"); static char_u e_nomenu[] = N_("E329: No menu \"%s\""); #ifdef FEAT_TOOLBAR @@ -956,7 +955,7 @@ remove_menu( else if (*name != NUL) { if (!silent) - EMSG(_(e_othermode)); + EMSG(_(e_menuothermode)); return FAIL; } @@ -1130,7 +1129,7 @@ show_menus(char_u *path_name, int modes) } else if ((menu->modes & modes) == 0x0) { - EMSG(_(e_othermode)); + EMSG(_(e_menuothermode)); vim_free(path_name); return FAIL; } diff --git a/src/popupmnu.c b/src/popupmnu.c index 6ef0af92a..962a59a1b 100644 --- a/src/popupmnu.c +++ b/src/popupmnu.c @@ -1195,6 +1195,14 @@ pum_show_popupmenu(vimmenu_T *menu) || (mp->modes & mp->enabled & mode)) ++pum_size; + // When there are only Terminal mode menus, using "popup Edit" results in + // pum_size being zero. + if (pum_size <= 0) + { + EMSG(e_menuothermode); + return; + } + array = (pumitem_T *)alloc_clear((unsigned)sizeof(pumitem_T) * pum_size); if (array == NULL) return; diff --git a/src/testdir/test_popup.vim b/src/testdir/test_popup.vim index 287d59d90..663a6a8e0 100644 --- a/src/testdir/test_popup.vim +++ b/src/testdir/test_popup.vim @@ -882,5 +882,18 @@ func Test_complete_o_tab() delfunc s:act_on_text_changed endfunc +func Test_menu_only_exists_in_terminal() + if !exists(':tlmenu') || has('gui_running') + return + endif + tlnoremenu &Edit.&Paste<Tab>"+gP <C-W>"+ + aunmenu * + try + popup Edit + call assert_false(1, 'command should have failed') + catch + call assert_exception('E328:') + endtry +endfunc " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index 3450325e7..790c4f770 100644 --- a/src/version.c +++ b/src/version.c @@ -800,6 +800,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 695, +/**/ 694, /**/ 693, |