1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-06-30 11:02:48 -05:00

I'm sick of all those #ifdefs in settings.c, and in any case plink

and pterm need at least one default setting to be _different_ (pterm
needs the default term type to be `xterm', while plink needs it to
be taken from $TERM). So here's a completely new alternative
mechanism for platform- and app-specific default settings. Ben will
probably want to check the integrity of the Mac port, since I've
fiddled with it without testing that it still compiles.

[originally from svn r2513]
This commit is contained in:
Simon Tatham
2003-01-09 18:06:29 +00:00
parent 10c1d43ac6
commit 4d86f5979d
7 changed files with 154 additions and 41 deletions

View File

@ -83,6 +83,23 @@ char *x_get_default(char *key)
return XGetDefault(GDK_DISPLAY(), app_name, key);
}
/*
* Default settings that are specific to pterm.
*/
char *platform_default_s(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)
{
if (!strcmp(name, "CloseOnExit"))
return COE_ALWAYS; /* COE_NORMAL works badly in an xterm */
return def;
}
void ldisc_update(void *frontend, int echo, int edit)
{
/*

View File

@ -9,6 +9,8 @@
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>
#include <pwd.h>
#include <sys/ioctl.h>
/* More helpful version of the FD_SET macro, to also handle maxfd. */
#define FD_SET_MAX(fd, max, set) do { \
@ -69,6 +71,68 @@ struct termios orig_termios;
static Backend *back;
static void *backhandle;
/*
* Default settings that are specific to pterm.
*/
char *platform_default_s(char *name)
{
if (!strcmp(name, "X11Display"))
return getenv("DISPLAY");
if (!strcmp(name, "TermType"))
return getenv("TERM");
if (!strcmp(name, "UserName")) {
/*
* Remote login username will default to the local username.
*/
struct passwd *p;
uid_t uid = getuid();
char *user, *ret = NULL;
/*
* First, find who we think we are using getlogin. If this
* agrees with our uid, we'll go along with it. This should
* allow sharing of uids between several login names whilst
* coping correctly with people who have su'ed.
*/
user = getlogin();
setpwent();
if (user)
p = getpwnam(user);
else
p = NULL;
if (p && p->pw_uid == uid) {
/*
* The result of getlogin() really does correspond to
* our uid. Fine.
*/
ret = user;
} else {
/*
* If that didn't work, for whatever reason, we'll do
* the simpler version: look up our uid in the password
* file and map it straight to a name.
*/
p = getpwuid(uid);
ret = p->pw_name;
}
endpwent();
return ret;
}
return NULL;
}
int platform_default_i(char *name, int def)
{
if (!strcmp(name, "TermWidth") ||
!strcmp(name, "TermHeight")) {
struct winsize size;
if (ioctl(0, TIOCGWINSZ, (void *)&size) >= 0)
return (!strcmp(name, "TermWidth") ? size.ws_col : size.ws_row);
}
return def;
}
char *x_get_default(char *key)
{
return NULL; /* this is a stub */