--- /dev/null
+--- vte-0.10.25/src/keymap.c.orig Fri Feb 21 05:02:58 2003
++++ vte-0.10.25/src/keymap.c Mon Mar 3 02:33:09 2003
+@@ -184,16 +184,14 @@
+ * system to system, or mine's just broken. But anyway. */
+ static struct _vte_keymap_entry _vte_keymap_GDK_Home[] = {
+ {cursor_all, keypad_all, fkey_all, 0, NULL, 0, "kh"},
+- {cursor_all, keypad_all, fkey_vt220, 0, _VTE_CAP_CSI "1~", -1, NULL},
++ {cursor_all, keypad_all, fkey_nothp, 0, _VTE_CAP_CSI "1~", -1, NULL},
+ {cursor_all, keypad_all, fkey_hp, 0, _VTE_CAP_ESC "h", -1, NULL},
+- {cursor_all, keypad_all, fkey_nothpvt, 0, NULL, 0, "kh"},
+ {cursor_all, keypad_all, fkey_all, 0, NULL, 0, NULL},
+ };
+
+ static struct _vte_keymap_entry _vte_keymap_GDK_End[] = {
+ {cursor_all, keypad_all, fkey_all, 0, NULL, 0, "@7"},
+- {cursor_all, keypad_all, fkey_vt220, 0, _VTE_CAP_CSI "4~", -1, NULL},
+- {cursor_all, keypad_all, fkey_notvt220, 0, NULL, 0, "@7"},
++ {cursor_all, keypad_all, fkey_all, 0, _VTE_CAP_CSI "4~", -1, NULL},
+ {cursor_all, keypad_all, fkey_all, 0, NULL, 0, NULL},
+ };
+
+@@ -968,6 +966,13 @@
+ *special = NULL;
+ *normal_length = 0;
+
++ /* Map Shift-F1 to F11 ... Shift-F10 to F20 */
++ if (keyval >= GDK_F1 && keyval <= GDK_F10 &&
++ (modifiers & GDK_SHIFT_MASK)) {
++ keyval += 10;
++ modifiers &= ~GDK_SHIFT_MASK;
++ }
++
+ /* Search for the list for this key. */
+ entries = NULL;
+ for (i = 0; i < G_N_ELEMENTS(_vte_keymap); i++) {
+@@ -1223,7 +1228,7 @@
+ _vte_keymap_key_gets_modifiers(guint keyval)
+ {
+ gboolean fkey = FALSE;
+- /* Determine if this is just a modifier key. */
++ /* Determine if the key can take modifiers. */
+ switch (keyval) {
+ case GDK_Up:
+ case GDK_Down:
+@@ -1231,6 +1236,8 @@
+ case GDK_Right:
+ case GDK_Insert:
+ case GDK_Delete:
++ case GDK_Home:
++ case GDK_End:
+ case GDK_Page_Up:
+ case GDK_Page_Down:
+ case GDK_KP_Up: