X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/57e636ca459fb23c1ebf9c0e2c9c9b0391e2e6ef..417d19722e3535ab06bfb59d8e570f5e053489eb:/unix/pterm.c diff --git a/unix/pterm.c b/unix/pterm.c index 228f4dfb..b18fc1f7 100644 --- a/unix/pterm.c +++ b/unix/pterm.c @@ -384,6 +384,32 @@ gint key_event(GtkWidget *widget, GdkEventKey *event, gpointer data) } /* + * 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. */ if (app_keypad_keys && !cfg.no_applic_k) { @@ -748,6 +774,13 @@ gint timer_func(gpointer data) return TRUE; } +gint idle_func(gpointer data) +{ + /* struct gui_data *inst = (struct gui_data *)data; */ + term_paste(); + return TRUE; +} + void pty_input_func(gpointer data, gint sourcefd, GdkInputCondition condition) { /* struct gui_data *inst = (struct gui_data *)data; */ @@ -1197,6 +1230,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); @@ -1273,6 +1309,7 @@ int main(int argc, char **argv) GTK_SIGNAL_FUNC(selection_clear), inst); gtk_signal_connect(GTK_OBJECT(inst->sbar_adjust), "value_changed", GTK_SIGNAL_FUNC(scrollbar_moved), inst); + gtk_idle_add(idle_func, inst); gtk_timeout_add(20, timer_func, inst); gdk_input_add(pty_master_fd, GDK_INPUT_READ, pty_input_func, inst); gtk_widget_add_events(GTK_WIDGET(inst->area),