]> granicus.if.org Git - vim/commitdiff
patch 8.1.1274: after :unmenu can still execute the menu with :emenu v8.1.1274
authorBram Moolenaar <Bram@vim.org>
Sun, 5 May 2019 12:19:20 +0000 (14:19 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 5 May 2019 12:19:20 +0000 (14:19 +0200)
Problem:    After :unmenu can still execute the menu with :emenu.
Solution:   Do not execute a menu that was disabled for the specified mode.

src/menu.c
src/testdir/test_menu.vim
src/version.c

index 21d3e11766aa6073d18fa4beef7194304969679e..6e0c02ec3b42b673ee6c6c16f747a77fe182955e 100644 (file)
@@ -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.
index 6462d5196c762acc523c9cf76b959426955fd0cf..b57fdc3de2fc30416a011f1506c368fe300bef2c 100644 (file)
@@ -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'<CR>
+  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'<CR>
index c8038f36f48f7fdae145cf2f7317df6b530455b5..a2e23978db768261e91c7e9445960a130efa6561 100644 (file)
@@ -767,6 +767,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1274,
 /**/
     1273,
 /**/