X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/3ea863a3e893904b45674642afb3146bec8ce7e4..c85623f918b8a6c639afc15604414f9b113bb20d:/unix/pterm.c diff --git a/unix/pterm.c b/unix/pterm.c index a5367a0b..402a4e7f 100644 --- a/unix/pterm.c +++ b/unix/pterm.c @@ -67,6 +67,7 @@ struct gui_data { void *backhandle; Terminal *term; void *logctx; + struct unicode_data ucsdata; Config cfg; }; @@ -79,7 +80,7 @@ static int send_raw_mouse; static char *app_name = "pterm"; -char *x_get_default(char *key) +char *x_get_default(const char *key) { return XGetDefault(GDK_DISPLAY(), app_name, key); } @@ -87,14 +88,14 @@ char *x_get_default(char *key) /* * Default settings that are specific to pterm. */ -char *platform_default_s(char *name) +char *platform_default_s(const char *name) { if (!strcmp(name, "Font")) return "fixed"; /* COE_NORMAL works badly in an xterm */ return NULL; } -int platform_default_i(char *name, int def) +int platform_default_i(const char *name, int def) { if (!strcmp(name, "CloseOnExit")) return COE_ALWAYS; /* COE_NORMAL works badly in an xterm */ @@ -483,10 +484,18 @@ gint key_event(GtkWidget *widget, GdkEventKey *event, gpointer data) term_scroll(inst->term, 0, -inst->cfg.height/2); return TRUE; } + if (event->keyval == GDK_Page_Up && (event->state & GDK_CONTROL_MASK)) { + term_scroll(inst->term, 0, -1); + return TRUE; + } if (event->keyval == GDK_Page_Down && (event->state & GDK_SHIFT_MASK)) { term_scroll(inst->term, 0, +inst->cfg.height/2); return TRUE; } + if (event->keyval == GDK_Page_Down && (event->state & GDK_CONTROL_MASK)) { + term_scroll(inst->term, 0, +1); + return TRUE; + } /* * Neither does Shift-Ins. @@ -1275,9 +1284,10 @@ void write_clip(void *frontend, wchar_t * data, int len, int must_deselect) inst->pasteout_data = smalloc(len*6); inst->pasteout_data_len = len*6; - inst->pasteout_data_len = wc_to_mb(line_codepage, 0, data, len, - inst->pasteout_data, - inst->pasteout_data_len, NULL, NULL); + inst->pasteout_data_len = wc_to_mb(inst->ucsdata.line_codepage, 0, + data, len, inst->pasteout_data, + inst->pasteout_data_len, + NULL, NULL, NULL); if (inst->pasteout_data_len == 0) { sfree(inst->pasteout_data); inst->pasteout_data = NULL; @@ -1388,7 +1398,7 @@ void selection_received(GtkWidget *widget, GtkSelectionData *seldata, inst->pastein_data_len = seldata->length; inst->pastein_data_len = mb_to_wc((seldata->type == inst->utf8_string_atom ? - CS_UTF8 : line_codepage), + CS_UTF8 : inst->ucsdata.line_codepage), 0, seldata->data, seldata->length, inst->pastein_data, inst->pastein_data_len); @@ -1638,7 +1648,7 @@ void do_text_internal(Context ctx, int x, int y, char *text, int len, } else { gcs = smalloc(sizeof(GdkWChar) * (len+1)); wc_to_mb(inst->fontinfo[fontid].charset, 0, - wcs, len, gcs, len, ".", NULL); + wcs, len, gcs, len, ".", NULL, NULL); gdk_draw_text(inst->pixmap, inst->fonts[fontid], gc, x*inst->font_width+inst->cfg.window_border, y*inst->font_height+inst->cfg.window_border+inst->fonts[0]->ascent, @@ -2061,7 +2071,7 @@ int do_cmdline(int argc, char **argv, int do_everything, Config *cfg) } else if (!strcmp(p, "-fg") || !strcmp(p, "-bg") || !strcmp(p, "-bfg") || !strcmp(p, "-bbg") || - !strcmp(p, "-inst->cfg") || !strcmp(p, "-cbg")) { + !strcmp(p, "-cfg") || !strcmp(p, "-cbg")) { GdkColor col; EXPECTS_ARG; @@ -2075,7 +2085,7 @@ int do_cmdline(int argc, char **argv, int do_everything, Config *cfg) !strcmp(p, "-bg") ? 2 : !strcmp(p, "-bfg") ? 1 : !strcmp(p, "-bbg") ? 3 : - !strcmp(p, "-inst->cfg") ? 4 : + !strcmp(p, "-cfg") ? 4 : !strcmp(p, "-cbg") ? 5 : -1); assert(index != -1); cfg->colours[index][0] = col.red / 256; @@ -2251,12 +2261,6 @@ int main(int argc, char **argv) gtk_init(&argc, &argv); - if (do_cmdline(argc, argv, 0, &inst->cfg)) - exit(1); /* pre-defaults pass to get -class */ - do_defaults(NULL, &inst->cfg); - if (do_cmdline(argc, argv, 1, &inst->cfg)) - exit(1); /* post-defaults, do everything */ - /* * Create an instance structure and initialise to zeroes */ @@ -2264,6 +2268,12 @@ int main(int argc, char **argv) memset(inst, 0, sizeof(*inst)); inst->alt_keycode = -1; /* this one needs _not_ to be zero */ + if (do_cmdline(argc, argv, 0, &inst->cfg)) + exit(1); /* pre-defaults pass to get -class */ + do_defaults(NULL, &inst->cfg); + if (do_cmdline(argc, argv, 1, &inst->cfg)) + exit(1); /* post-defaults, do everything */ + inst->fonts[0] = gdk_font_load(inst->cfg.font); if (!inst->fonts[0]) { fprintf(stderr, "pterm: unable to load font \"%s\"\n", inst->cfg.font); @@ -2307,7 +2317,8 @@ int main(int argc, char **argv) inst->compound_text_atom = gdk_atom_intern("COMPOUND_TEXT", FALSE); inst->utf8_string_atom = gdk_atom_intern("UTF8_STRING", FALSE); - inst->direct_to_font = init_ucs(inst->cfg.line_codepage, font_charset); + inst->direct_to_font = init_ucs(&inst->ucsdata, + inst->cfg.line_codepage, font_charset); inst->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); @@ -2407,7 +2418,7 @@ int main(int argc, char **argv) inst->currcursor = inst->textcursor; show_mouseptr(inst, 1); - inst->term = term_init(&inst->cfg, inst); + inst->term = term_init(&inst->cfg, &inst->ucsdata, inst); inst->logctx = log_init(inst, &inst->cfg); term_provide_logctx(inst->term, inst->logctx);