diff --git a/unix/pterm.c b/unix/pterm.c index 228f4dfb..5bd8341f 100644 --- a/unix/pterm.c +++ b/unix/pterm.c @@ -383,6 +383,32 @@ gint key_event(GtkWidget *widget, GdkEventKey *event, gpointer data) end = 1 + sprintf(output+1, "\033[Z"); } + /* + * NetHack keypad mode. + */ + if (cfg.nethack_keypad) { + char *keys = NULL; + switch (event->keyval) { + case GDK_KP_1: case GDK_KP_End: keys = "bB"; break; + case GDK_KP_2: case GDK_KP_Down: keys = "jJ"; break; + case GDK_KP_3: case GDK_KP_Page_Down: keys = "nN"; break; + case GDK_KP_4: case GDK_KP_Left: keys = "hH"; break; + case GDK_KP_5: case GDK_KP_Begin: keys = ".."; break; + case GDK_KP_6: case GDK_KP_Right: keys = "lL"; break; + case GDK_KP_7: case GDK_KP_Home: keys = "yY"; break; + case GDK_KP_8: case GDK_KP_Up: keys = "kK"; break; + case GDK_KP_9: case GDK_KP_Page_Up: keys = "uU"; break; + } + if (keys) { + end = 2; + if (event->state & GDK_SHIFT_MASK) + output[1] = keys[1]; + else + output[1] = keys[0]; + goto done; + } + } + /* * Application keypad mode. */ @@ -1197,6 +1223,9 @@ int main(int argc, char **argv) if (!strcmp(p, "-hide")) { cfg.hide_mouseptr = 1; } + if (!strcmp(p, "-nethack")) { + cfg.nethack_keypad = 1; + } } inst->fonts[0] = gdk_font_load(cfg.font);