diff src/getchar.c @ 229:723a01584c3e

updated for version 7.0064
author vimboss
date Fri, 25 Mar 2005 21:45:43 +0000
parents b6450bf509d8
children fb70e333c94e
line wrap: on
line diff
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -1545,35 +1545,67 @@ vgetc()
 	    (void)vgetorpeek(TRUE);
 #endif
 
-	if (c >= FIRST_KEYPAD && c <= LAST_KEYPAD)
+	/* a keypad or special function key was not mapped, use it like
+	 * its ASCII equivalent */
+	switch (c)
 	{
-	    /* a keypad key was not mapped, use it like its ASCII equivalent */
-	    switch (c)
-	    {
-		case K_KPLUS:		c = '+'; break;
-		case K_KMINUS:		c = '-'; break;
-		case K_KDIVIDE:		c = '/'; break;
-		case K_KMULTIPLY:	c = '*'; break;
-		case K_KENTER:		c = CAR; break;
-		case K_KPOINT:
+	    case K_KPLUS:		c = '+'; break;
+	    case K_KMINUS:		c = '-'; break;
+	    case K_KDIVIDE:		c = '/'; break;
+	    case K_KMULTIPLY:	c = '*'; break;
+	    case K_KENTER:		c = CAR; break;
+	    case K_KPOINT:
 #ifdef WIN32
-					/* Can be either '.' or a ',', *
-					 * depending on the type of keypad. */
-					c = MapVirtualKey(VK_DECIMAL, 2); break;
+				    /* Can be either '.' or a ',', *
+				     * depending on the type of keypad. */
+				    c = MapVirtualKey(VK_DECIMAL, 2); break;
 #else
-					c = '.'; break;
+				    c = '.'; break;
 #endif
-		case K_K0:		c = '0'; break;
-		case K_K1:		c = '1'; break;
-		case K_K2:		c = '2'; break;
-		case K_K3:		c = '3'; break;
-		case K_K4:		c = '4'; break;
-		case K_K5:		c = '5'; break;
-		case K_K6:		c = '6'; break;
-		case K_K7:		c = '7'; break;
-		case K_K8:		c = '8'; break;
-		case K_K9:		c = '9'; break;
-	    }
+	    case K_K0:		c = '0'; break;
+	    case K_K1:		c = '1'; break;
+	    case K_K2:		c = '2'; break;
+	    case K_K3:		c = '3'; break;
+	    case K_K4:		c = '4'; break;
+	    case K_K5:		c = '5'; break;
+	    case K_K6:		c = '6'; break;
+	    case K_K7:		c = '7'; break;
+	    case K_K8:		c = '8'; break;
+	    case K_K9:		c = '9'; break;
+
+	    case K_XHOME:
+	    case K_ZHOME:	if (mod_mask == MOD_MASK_SHIFT)
+				{
+				    c = K_S_HOME;
+				    mod_mask = 0;
+				}
+				else if (mod_mask == MOD_MASK_CTRL)
+				{
+				    c = K_C_HOME;
+				    mod_mask = 0;
+				}
+				else
+				    c = K_HOME;
+				break;
+	    case K_XEND:
+	    case K_ZEND:	if (mod_mask == MOD_MASK_SHIFT)
+				{
+				    c = K_S_END;
+				    mod_mask = 0;
+				}
+				else if (mod_mask == MOD_MASK_CTRL)
+				{
+				    c = K_C_END;
+				    mod_mask = 0;
+				}
+				else
+				    c = K_END;
+				break;
+
+	    case K_XUP:		c = K_UP; break;
+	    case K_XDOWN:	c = K_DOWN; break;
+	    case K_XLEFT:	c = K_LEFT; break;
+	    case K_XRIGHT:	c = K_RIGHT; break;
 	}
 
 #ifdef FEAT_MBYTE