Factor keypad translation code into a function.
authorayin <ayin>
Sat, 16 Feb 2008 13:36:10 +0000 (13:36 +0000)
committerayin <ayin>
Sat, 16 Feb 2008 13:36:10 +0000 (13:36 +0000)
src/command.C

index 0fa4a9248ebf9ef2181242a7bdfd255d5efd8d7a..b3c0046f00bc1d2dfaef4f3ebbccf4853b3ae850 100644 (file)
@@ -300,6 +300,42 @@ hex_keyval (XKeyEvent &ev)
 }
 #endif
 
+static inline KeySym
+translate_keypad (KeySym keysym, bool kp)
+{
+#ifdef XK_KP_Home
+  static const KeySym keypadtrans[] = {
+    XK_KP_7, // XK_KP_Home
+    XK_KP_4, // XK_KP_Left
+    XK_KP_8, // XK_KP_Up
+    XK_KP_6, // XK_KP_Right
+    XK_KP_2, // XK_KP_Down
+# ifndef UNSHIFTED_SCROLLKEYS
+    XK_KP_9, // XK_KP_Prior
+    XK_KP_3, // XK_KP_Next
+# else
+    XK_Prior,
+    XK_Next,
+# endif
+    XK_KP_1, // XK_KP_End
+    XK_KP_5, // XK_KP_Begin
+  };
+
+  if (IN_RANGE_INC (keysym, XK_KP_Home, XK_KP_Begin))
+    {
+      unsigned int index = keysym - XK_KP_Home;
+      keysym = kp ? keypadtrans[index] : XK_Home + index;
+    }
+  else if (keysym == XK_KP_Insert)
+    keysym = kp ? XK_KP_0 : XK_Insert;
+# ifndef NO_DELETE_KEY
+  else if (keysym == XK_KP_Delete)
+    keysym = kp ? XK_KP_Decimal : XK_Delete;
+# endif
+#endif
+  return keysym;
+}
+
 void
 rxvt_term::key_press (XKeyEvent &ev)
 {
@@ -550,37 +586,8 @@ rxvt_term::key_press (XKeyEvent &ev)
         {
               bool kp = priv_modes & PrivMode_aplKP ? !shft : shft;
               unsigned int newlen = 1;
-#ifdef XK_KP_Home
-              static const KeySym keypadtrans[] = {
-                XK_KP_7, // XK_KP_Home
-                XK_KP_4, // XK_KP_Left
-                XK_KP_8, // XK_KP_Up
-                XK_KP_6, // XK_KP_Right
-                XK_KP_2, // XK_KP_Down
-#ifndef UNSHIFTED_SCROLLKEYS
-                XK_KP_9, // XK_KP_Prior
-                XK_KP_3, // XK_KP_Next
-#else
-                XK_Prior,
-                XK_Next,
-#endif
-                XK_KP_1, // XK_KP_End
-                XK_KP_5, // XK_KP_Begin
-              };
 
-              if (IN_RANGE_INC (keysym, XK_KP_Home, XK_KP_Begin))
-                {
-                  unsigned int index = keysym - XK_KP_Home;
-                  keysym = kp ? keypadtrans[index] : XK_Home + index;
-                }
-              else if (keysym == XK_KP_Insert)
-                keysym = kp ? XK_KP_0 : XK_Insert;
-#ifndef NO_DELETE_KEY
-              else if (keysym == XK_KP_Delete)
-                keysym = kp ? XK_KP_Decimal : XK_Delete;
-#endif
-#endif
-              switch (keysym)
+              switch (translate_keypad (keysym, kp))
                 {
 #ifndef NO_BACKSPACE_KEY
                   case XK_BackSpace: