X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/faec60ed7e3ba7a6b0972672bea7322625a63915..12994a99cafd5cf7800fffeecd3dd9e76456b286:/unix/pterm.c diff --git a/unix/pterm.c b/unix/pterm.c index 1262782a..a4599587 100644 --- a/unix/pterm.c +++ b/unix/pterm.c @@ -11,6 +11,8 @@ #include #include #include +#include +#include #include #include @@ -430,9 +432,9 @@ gint key_event(GtkWidget *widget, GdkEventKey *event, gpointer data) output[31] = '\0'; end = strlen(output); if (event->state & GDK_MOD1_MASK) - start = 0; + start = end = 0; else - start = 1; + start = end = 1; /* Control-` is the same as Control-\ (unless gtk has a better idea) */ if (!event->string[0] && event->keyval == '`' && @@ -1294,16 +1296,9 @@ void do_text_internal(Context ctx, int x, int y, char *text, int len, y*inst->font_height+cfg.window_border+inst->fonts[0]->ascent, text, len); - /* - * X fonts seem to be pretty consistent about leaving the - * _left_ pixel of the cell blank rather than the right. Hence - * I'm going to hard-code shadow bolding as displaying one - * pixel to the left rather than try to work out whether it - * should be left or right. - */ if (shadow) { gdk_draw_text(inst->pixmap, inst->fonts[fontid], gc, - x*inst->font_width+cfg.window_border - 1, + x*inst->font_width+cfg.window_border + cfg.shadowboldoffset, y*inst->font_height+cfg.window_border+inst->fonts[0]->ascent, text, len); } @@ -1602,10 +1597,16 @@ int do_cmdline(int argc, char **argv, int do_everything) if (!do_everything) continue; \ } while (0) + /* + * TODO: + * + * finish -geometry + */ + char *val; while (--argc > 0) { char *p = *++argv; - if (!strcmp(p, "-fn")) { + if (!strcmp(p, "-fn") || !strcmp(p, "-font")) { EXPECTS_ARG; SECOND_PASS_ONLY; strncpy(cfg.font, val, sizeof(cfg.font)); @@ -1617,6 +1618,54 @@ int do_cmdline(int argc, char **argv, int do_everything) strncpy(cfg.boldfont, val, sizeof(cfg.boldfont)); cfg.boldfont[sizeof(cfg.boldfont)-1] = '\0'; + } else if (!strcmp(p, "-geometry")) { + int flags, x, y, w, h; + EXPECTS_ARG; + SECOND_PASS_ONLY; + + flags = XParseGeometry(val, &x, &y, &w, &h); + if (flags & WidthValue) + cfg.width = w; + if (flags & HeightValue) + cfg.height = h; + + /* + * Apparently setting the initial window position is + * difficult in GTK 1.2. Not entirely sure why this + * should be. 2.0 has gtk_window_parse_geometry(), + * which would help... For the moment, though, I can't + * be bothered with this. + */ + + } else if (!strcmp(p, "-sl")) { + EXPECTS_ARG; + SECOND_PASS_ONLY; + cfg.savelines = atoi(val); + + } else if (!strcmp(p, "-fg") || !strcmp(p, "-bg") || + !strcmp(p, "-bfg") || !strcmp(p, "-bbg") || + !strcmp(p, "-cfg") || !strcmp(p, "-cbg")) { + GdkColor col; + + EXPECTS_ARG; + SECOND_PASS_ONLY; + if (!gdk_color_parse(val, &col)) { + err = 1; + fprintf(stderr, "pterm: unable to parse colour \"%s\"\n", val); + } else { + int index; + index = (!strcmp(p, "-fg") ? 0 : + !strcmp(p, "-bg") ? 2 : + !strcmp(p, "-bfg") ? 1 : + !strcmp(p, "-bbg") ? 3 : + !strcmp(p, "-cfg") ? 4 : + !strcmp(p, "-cbg") ? 5 : -1); + assert(index != -1); + cfg.colours[index][0] = col.red / 256; + cfg.colours[index][1] = col.green / 256; + cfg.colours[index][2] = col.blue / 256; + } + } else if (!strcmp(p, "-e")) { /* This option swallows all further arguments. */ if (!do_everything) @@ -1646,29 +1695,42 @@ int do_cmdline(int argc, char **argv, int do_everything) cfg.logfilename[sizeof(cfg.logfilename)-1] = '\0'; cfg.logtype = LGTYP_DEBUG; - } else if (!strcmp(p, "-hide")) { + } else if (!strcmp(p, "-ut-") || !strcmp(p, "+ut")) { SECOND_PASS_ONLY; - cfg.hide_mouseptr = 1; + cfg.stamp_utmp = 0; - } else if (!strcmp(p, "-ut-")) { + } else if (!strcmp(p, "-ut")) { SECOND_PASS_ONLY; cfg.stamp_utmp = 0; - } else if (!strcmp(p, "-ls-")) { + } else if (!strcmp(p, "-ls-") || !strcmp(p, "+ls")) { SECOND_PASS_ONLY; cfg.login_shell = 0; + } else if (!strcmp(p, "-ls")) { + SECOND_PASS_ONLY; + cfg.login_shell = 1; + } else if (!strcmp(p, "-nethack")) { SECOND_PASS_ONLY; cfg.nethack_keypad = 1; - } else if (!strcmp(p, "-sb-")) { + } else if (!strcmp(p, "-sb-") || !strcmp(p, "+sb")) { + SECOND_PASS_ONLY; + cfg.scrollbar = 0; + + } else if (!strcmp(p, "-sb")) { SECOND_PASS_ONLY; cfg.scrollbar = 0; } else if (!strcmp(p, "-name")) { EXPECTS_ARG; app_name = val; + + } else if (!strcmp(p, "-xrm")) { + EXPECTS_ARG; + provide_xrm_string(val); + } }