0
0
mirror of https://github.com/vim/vim.git synced 2025-09-04 21:33:48 -04:00

patch 8.1.0695: internal error when using :popup

Problem:    Internal error when using :popup.
Solution:   When a menu only exists in Terminal mode give an error. (Naruhiko
            Nishino, closes #3765)
This commit is contained in:
Bram Moolenaar 2019-01-06 13:11:05 +01:00
parent 4614f53e0f
commit f42b45d719
6 changed files with 32 additions and 5 deletions

View File

@ -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 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* > To remove all menus use: *:unmenu-all* >
:unmenu * " remove all menus in Normal and visual mode :unmenu * " remove all menus in Normal and visual mode
:unmenu! * " remove all menus in Insert and Command-line 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: > If you want to get rid of the menu bar: >
:set guioptions-=m :set guioptions-=m

View File

@ -1583,6 +1583,9 @@ EXTERN char_u e_invalidreg[] INIT(= N_("E850: Invalid register name"));
#endif #endif
EXTERN char_u e_dirnotf[] INIT(= N_("E919: Directory not found in '%s': \"%s\"")); 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")); 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 #ifdef FEAT_GUI_MAC
EXTERN short disallow_gui INIT(= FALSE); EXTERN short disallow_gui INIT(= FALSE);

View File

@ -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 *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_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\""); static char_u e_nomenu[] = N_("E329: No menu \"%s\"");
#ifdef FEAT_TOOLBAR #ifdef FEAT_TOOLBAR
@ -956,7 +955,7 @@ remove_menu(
else if (*name != NUL) else if (*name != NUL)
{ {
if (!silent) if (!silent)
EMSG(_(e_othermode)); EMSG(_(e_menuothermode));
return FAIL; return FAIL;
} }
@ -1130,7 +1129,7 @@ show_menus(char_u *path_name, int modes)
} }
else if ((menu->modes & modes) == 0x0) else if ((menu->modes & modes) == 0x0)
{ {
EMSG(_(e_othermode)); EMSG(_(e_menuothermode));
vim_free(path_name); vim_free(path_name);
return FAIL; return FAIL;
} }

View File

@ -1195,6 +1195,14 @@ pum_show_popupmenu(vimmenu_T *menu)
|| (mp->modes & mp->enabled & mode)) || (mp->modes & mp->enabled & mode))
++pum_size; ++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); array = (pumitem_T *)alloc_clear((unsigned)sizeof(pumitem_T) * pum_size);
if (array == NULL) if (array == NULL)
return; return;

View File

@ -882,5 +882,18 @@ func Test_complete_o_tab()
delfunc s:act_on_text_changed delfunc s:act_on_text_changed
endfunc 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 " vim: shiftwidth=2 sts=2 expandtab

View File

@ -799,6 +799,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
695,
/**/ /**/
694, 694,
/**/ /**/