From: Bram Moolenaar Date: Sun, 5 May 2019 12:19:20 +0000 (+0200) Subject: patch 8.1.1274: after :unmenu can still execute the menu with :emenu X-Git-Tag: v8.1.1274 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ce79353ace9e21238f13655089363cd23cbb6b32;p=vim patch 8.1.1274: after :unmenu can still execute the menu with :emenu Problem: After :unmenu can still execute the menu with :emenu. Solution: Do not execute a menu that was disabled for the specified mode. --- diff --git a/src/menu.c b/src/menu.c index 21d3e1176..6e0c02ec3 100644 --- a/src/menu.c +++ b/src/menu.c @@ -2337,7 +2337,8 @@ execute_menu(exarg_T *eap, vimmenu_T *menu, int mode_idx) if (idx == -1 || eap == NULL) idx = MENU_INDEX_NORMAL; - if (idx != MENU_INDEX_INVALID && menu->strings[idx] != NULL) + if (idx != MENU_INDEX_INVALID && menu->strings[idx] != NULL + && (menu->modes & (1 << idx))) { /* When executing a script or function execute the commands right now. * Also for the window toolbar. diff --git a/src/testdir/test_menu.vim b/src/testdir/test_menu.vim index 6462d5196..b57fdc3de 100644 --- a/src/testdir/test_menu.vim +++ b/src/testdir/test_menu.vim @@ -54,8 +54,23 @@ func Test_menu_commands() emenu c Test.FooBar call assert_equal('cmdline', g:did_menu) - aunmenu Test.FooBar + nunmenu Test.FooBar + call assert_fails('emenu n Test.FooBar', 'E335: Menu not defined for Normal mode') + vunmenu Test.FooBar + call assert_fails('emenu v Test.FooBar', 'E335: Menu not defined for Visual mode') + vmenu 2 Test.FooBar :let g:did_menu = 'visual' + sunmenu Test.FooBar + call assert_fails('emenu s Test.FooBar', 'E335: Menu not defined for Select mode') + ounmenu Test.FooBar + call assert_fails('emenu o Test.FooBar', 'E335: Menu not defined for Op-pending mode') + iunmenu Test.FooBar + call assert_fails('emenu i Test.FooBar', 'E335: Menu not defined for Insert mode') + cunmenu Test.FooBar + call assert_fails('emenu c Test.FooBar', 'E335: Menu not defined for Cmdline mode') tlunmenu Test.FooBar + call assert_fails('emenu t Test.FooBar', 'E335: Menu not defined for Terminal mode') + + aunmenu Test.FooBar call assert_fails('emenu n Test.FooBar', 'E334:') nmenu 2 Test.FooBar.Child :let g:did_menu = 'foobar' diff --git a/src/version.c b/src/version.c index c8038f36f..a2e23978d 100644 --- a/src/version.c +++ b/src/version.c @@ -767,6 +767,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1274, /**/ 1273, /**/