Mercurial > vim
changeset 15375:6012cc6936f7 v8.1.0695
patch 8.1.0695: internal error when using :popup
commit https://github.com/vim/vim/commit/f42b45d719e03218735b3c2845a74dca9c0efd60
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Jan 6 13:11:05 2019 +0100
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)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 06 Jan 2019 13:15:09 +0100 |
parents | 13a34f8e996b |
children | e2a7a22c6b53 |
files | runtime/doc/gui.txt src/globals.h src/menu.c src/popupmnu.c src/testdir/test_popup.vim src/version.c |
diffstat | 6 files changed, 32 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- 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 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
--- a/src/globals.h +++ b/src/globals.h @@ -1583,6 +1583,9 @@ EXTERN char_u e_invalidreg[] INIT(= N #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);
--- a/src/menu.c +++ b/src/menu.c @@ -61,7 +61,6 @@ static char_u *menu_translate_tab_and_sh 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; }
--- 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;
--- 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