updated for version 7.0230
diff --git a/src/menu.c b/src/menu.c
index e30ac18..8748740 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -739,6 +739,7 @@
 		    switch (1 << i)
 		    {
 			case MENU_VISUAL_MODE:
+			case MENU_SELECT_MODE:
 			case MENU_OP_PENDING_MODE:
 			case MENU_CMDLINE_MODE:
 			    c = Ctrl_C;
@@ -1464,8 +1465,14 @@
     switch (*cmd++)
     {
 	case 'v':			/* vmenu, vunmenu, vnoremenu */
+	    modes = MENU_VISUAL_MODE | MENU_SELECT_MODE;
+	    break;
+	case 'x':			/* xmenu, xunmenu, xnoremenu */
 	    modes = MENU_VISUAL_MODE;
 	    break;
+	case 's':			/* smenu, sunmenu, snoremenu */
+	    modes = MENU_SELECT_MODE;
+	    break;
 	case 'o':			/* omenu */
 	    modes = MENU_OP_PENDING_MODE;
 	    break;
@@ -1480,7 +1487,8 @@
 	    break;
 	case 'a':			/* amenu */
 	    modes = MENU_INSERT_MODE | MENU_CMDLINE_MODE | MENU_NORMAL_MODE
-				    | MENU_VISUAL_MODE | MENU_OP_PENDING_MODE;
+				    | MENU_VISUAL_MODE | MENU_SELECT_MODE
+                                    | MENU_OP_PENDING_MODE;
 	    break;
 	case 'n':
 	    if (*cmd != 'o')		/* nmenu, not noremenu */
@@ -1494,7 +1502,7 @@
 	    if (forceit)		/* menu!! */
 		modes = MENU_INSERT_MODE | MENU_CMDLINE_MODE;
 	    else			/* menu */
-		modes = MENU_NORMAL_MODE | MENU_VISUAL_MODE
+		modes = MENU_NORMAL_MODE | MENU_VISUAL_MODE | MENU_SELECT_MODE
 						       | MENU_OP_PENDING_MODE;
     }
 
@@ -1545,7 +1553,12 @@
 	idx = MENU_INDEX_CMDLINE;
 #ifdef FEAT_VISUAL
     else if (VIsual_active)
-	idx = MENU_INDEX_VISUAL;
+    {
+        if (VIsual_select)
+            idx = MENU_INDEX_SELECT;
+        else
+            idx = MENU_INDEX_VISUAL;
+    }
 #endif
     else if (state == HITRETURN || state == ASKMORE)
 	idx = MENU_INDEX_CMDLINE;
@@ -1712,7 +1725,11 @@
 {
 #ifdef FEAT_VISUAL
     if (VIsual_active)
+    {
+        if (VIsual_select)
+            return MENU_INDEX_SELECT;
 	return MENU_INDEX_VISUAL;
+    }
 #endif
     if (State & INSERT)
 	return MENU_INDEX_INSERT;