1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-05-28 15:24:49 -05:00

Make the `vtmode' config option work under X. In the process I've

had to move another of its values out into wincfg.c - paradoxically,
this was the `font has X encoding' option! (Because the Unix font
handling code expects to be able to tell for _itself_ whether it has
a font with X-encoded line drawing glyphs.)

[originally from svn r3145]
This commit is contained in:
Simon Tatham 2003-04-26 14:22:42 +00:00
parent 88e0914f91
commit 3a3e4d1818
6 changed files with 24 additions and 19 deletions

View File

@ -1143,9 +1143,9 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
HELPCTX(translation_linedraw), HELPCTX(translation_linedraw),
dlg_stdradiobutton_handler, dlg_stdradiobutton_handler,
I(offsetof(Config, vtmode)), I(offsetof(Config, vtmode)),
"Font has XWindows encoding", 'x', I(VT_XWINDOWS), "Use Unicode line drawing code points",'u',I(VT_UNICODE),
"Poor man's line drawing (+, - and |)",'p',I(VT_POORMAN), "Poor man's line drawing (+, - and |)",'p',I(VT_POORMAN),
"Unicode mode", 'u', I(VT_UNICODE), NULL); NULL);
/* /*
* The Window/Selection panel. * The Window/Selection panel.

View File

@ -2394,7 +2394,8 @@ void setup_fonts_ucs(struct gui_data *inst)
inst->font_height = inst->fonts[0]->ascent + inst->fonts[0]->descent; inst->font_height = inst->fonts[0]->ascent + inst->fonts[0]->descent;
inst->direct_to_font = init_ucs(&inst->ucsdata, inst->direct_to_font = init_ucs(&inst->ucsdata,
inst->cfg.line_codepage, font_charset); inst->cfg.line_codepage, font_charset,
inst->cfg.vtmode);
} }
void set_geom_hints(struct gui_data *inst) void set_geom_hints(struct gui_data *inst)
@ -2531,7 +2532,8 @@ void change_settings_menuitem(GtkMenuItem *item, gpointer data)
strcmp(oldcfg.boldfont.name, cfg2.boldfont.name) || strcmp(oldcfg.boldfont.name, cfg2.boldfont.name) ||
strcmp(oldcfg.widefont.name, cfg2.widefont.name) || strcmp(oldcfg.widefont.name, cfg2.widefont.name) ||
strcmp(oldcfg.wideboldfont.name, cfg2.wideboldfont.name) || strcmp(oldcfg.wideboldfont.name, cfg2.wideboldfont.name) ||
strcmp(oldcfg.line_codepage, cfg2.line_codepage)) { strcmp(oldcfg.line_codepage, cfg2.line_codepage) ||
oldcfg.vtmode != cfg2.vtmode) {
setup_fonts_ucs(inst); setup_fonts_ucs(inst);
need_size = 1; need_size = 1;
} else } else

View File

@ -115,7 +115,7 @@ void (*putty_signal(int sig, void (*func)(int)))(int);
*/ */
struct unicode_data; struct unicode_data;
int init_ucs(struct unicode_data *ucsdata, int init_ucs(struct unicode_data *ucsdata,
char *line_codepage, int font_charset); char *line_codepage, int font_charset, int vtmode);
/* /*
* Spare function exported directly from uxnet.c. * Spare function exported directly from uxnet.c.

View File

@ -14,17 +14,6 @@
/* /*
* TODO: * TODO:
* *
* - Go through all the config options and ensure they can all be
* configured and reconfigured properly.
* + icon title appears to be a non-option on Unix.
* + Why the hell did I faff about disabling two of the vtmode
* options? The rest aren't used either in pterm! Work out
* whether they should be, and how they can be.
* + Refresh in the codepage combo is badly broken.
* + `Don't translate line drawing chars' ?? What is this crap?
* It does nothing at all, and where's the option to paste as
* lqqqk? What was I smoking?
*
* - Better control of the individual config box features. * - Better control of the individual config box features.
* + SSH packet logging shouldn't be mentioned in pterm, and in * + SSH packet logging shouldn't be mentioned in pterm, and in
* fact not PuTTYtel either. * fact not PuTTYtel either.

View File

@ -107,7 +107,7 @@ int wc_to_mb(int codepage, int flags, wchar_t *wcstr, int wclen,
* Return value is TRUE if pterm is to run in direct-to-font mode. * Return value is TRUE if pterm is to run in direct-to-font mode.
*/ */
int init_ucs(struct unicode_data *ucsdata, int init_ucs(struct unicode_data *ucsdata,
char *linecharset, int font_charset) char *linecharset, int font_charset, int vtmode)
{ {
int i, ret = 0; int i, ret = 0;
@ -176,8 +176,18 @@ int init_ucs(struct unicode_data *ucsdata,
0x23bb, 0x2500, 0x23bc, 0x23bd, 0x251c, 0x2524, 0x2534, 0x252c, 0x23bb, 0x2500, 0x23bc, 0x23bd, 0x251c, 0x2524, 0x2534, 0x252c,
0x2502, 0x2264, 0x2265, 0x03c0, 0x2260, 0x00a3, 0x00b7, 0x0020 0x2502, 0x2264, 0x2265, 0x03c0, 0x2260, 0x00a3, 0x00b7, 0x0020
}; };
static const wchar_t unitab_xterm_poorman[32] =
L"*#****o~**+++++-----++++|****L. ";
const wchar_t *ptr;
if (vtmode == VT_POORMAN)
ptr = unitab_xterm_poorman;
else
ptr = unitab_xterm_std;
if (i >= 0x5F && i < 0x7F) if (i >= 0x5F && i < 0x7F)
ucsdata->unitab_xterm[i] = unitab_xterm_std[i & 0x1F]; ucsdata->unitab_xterm[i] = ptr[i & 0x1F];
else else
ucsdata->unitab_xterm[i] = ucsdata->unitab_line[i]; ucsdata->unitab_xterm[i] = ucsdata->unitab_line[i];
} }

View File

@ -197,15 +197,18 @@ void win_setup_config_box(struct controlbox *b, HWND *hwndp, int has_help,
if (c->generic.type == CTRL_RADIO && if (c->generic.type == CTRL_RADIO &&
c->generic.context.i == offsetof(Config, vtmode)) { c->generic.context.i == offsetof(Config, vtmode)) {
assert(c->generic.handler == dlg_stdradiobutton_handler); assert(c->generic.handler == dlg_stdradiobutton_handler);
c->radio.nbuttons += 2; c->radio.nbuttons += 3;
c->radio.buttons = c->radio.buttons =
sresize(c->radio.buttons, c->radio.nbuttons, char *); sresize(c->radio.buttons, c->radio.nbuttons, char *);
c->radio.buttons[c->radio.nbuttons-3] =
dupstr("Font has XWindows encoding");
c->radio.buttons[c->radio.nbuttons-2] = c->radio.buttons[c->radio.nbuttons-2] =
dupstr("Use font in both ANSI and OEM modes"); dupstr("Use font in both ANSI and OEM modes");
c->radio.buttons[c->radio.nbuttons-1] = c->radio.buttons[c->radio.nbuttons-1] =
dupstr("Use font in OEM mode only"); dupstr("Use font in OEM mode only");
c->radio.buttondata = c->radio.buttondata =
sresize(c->radio.buttondata, c->radio.nbuttons, intorptr); sresize(c->radio.buttondata, c->radio.nbuttons, intorptr);
c->radio.buttondata[c->radio.nbuttons-3] = I(VT_XWINDOWS);
c->radio.buttondata[c->radio.nbuttons-2] = I(VT_OEMANSI); c->radio.buttondata[c->radio.nbuttons-2] = I(VT_OEMANSI);
c->radio.buttondata[c->radio.nbuttons-1] = I(VT_OEMONLY); c->radio.buttondata[c->radio.nbuttons-1] = I(VT_OEMONLY);
if (!c->radio.shortcuts) { if (!c->radio.shortcuts) {
@ -217,6 +220,7 @@ void win_setup_config_box(struct controlbox *b, HWND *hwndp, int has_help,
c->radio.shortcuts = sresize(c->radio.shortcuts, c->radio.shortcuts = sresize(c->radio.shortcuts,
c->radio.nbuttons, char); c->radio.nbuttons, char);
} }
c->radio.shortcuts[c->radio.nbuttons-3] = 'x';
c->radio.shortcuts[c->radio.nbuttons-2] = 'b'; c->radio.shortcuts[c->radio.nbuttons-2] = 'b';
c->radio.shortcuts[c->radio.nbuttons-1] = 'e'; c->radio.shortcuts[c->radio.nbuttons-1] = 'e';
break; break;