X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=init.c;h=2999e7e5e9d86e2f7025a64fac207a60af84c1b4;hp=0d8b52bd389060e9433dff4046cc064fe756cc26;hb=82f35ae0a006c52d0f6e3c5e09fdac5d16cddaf3;hpb=6729a8ab646a00a661858b7ac7ee21f770bff3d3 diff --git a/init.c b/init.c index 0d8b52b..2999e7e 100644 --- a/init.c +++ b/init.c @@ -42,7 +42,7 @@ static int parse_sort (struct option_t* dst, const char *s, const struct mapping_t *map, char* errbuf, ssize_t errlen); -static HASH *ConfigOptions = NULL; +static hash_t *ConfigOptions = NULL; /* for synonym warning reports: synonym found during parsing */ typedef struct syn_t { @@ -69,10 +69,6 @@ static const char* CurRCFile = NULL; static int CurRCLine = 0; /* prototypes for checking for special vars */ -static int check_dsn_return (const char* option, unsigned long val, - char* errbuf, ssize_t errlen); -static int check_dsn_notify (const char* option, unsigned long val, - char* errbuf, ssize_t errlen); static int check_history (const char* option, unsigned long val, char* errbuf, ssize_t errlen); /* this checks that numbers are >= 0 */ @@ -92,8 +88,6 @@ static struct { int (*check) (const char* option, unsigned long val, char* errbuf, ssize_t errlen); } SpecialVars[] = { - { "dsn_notify", check_dsn_notify }, - { "dsn_return", check_dsn_return }, #if defined (USE_LIBESMTP) && (defined (USE_SSL) || defined (USE_GNUTLS)) { "smtp_use_tls", mutt_libesmtp_check_usetls }, #endif @@ -494,6 +488,20 @@ int quadoption (int opt) return (QuadOptions[n] >> b) & 0x3; } +int query_quadoption2(int v, const char *prompt) +{ + switch (v) { + case M_YES: + case M_NO: + return (v); + + default: + v = mutt_yesorno(prompt, (v == M_ASKYES)); + CLEARLINE (LINES - 1); + return (v); + } +} + int query_quadoption (int opt, const char *prompt) { int v = quadoption (opt); @@ -1305,17 +1313,6 @@ static void mutt_set_default(const char *name __attribute__ ((unused)), void* p, ptr->init = m_strdup(buf); } -static struct option_t* add_option (const char* name, const char* init, - short type, short dodup) { - struct option_t* option = p_new(struct option_t, 1); - - option->option = m_strdup(name); - option->type = type; - if (init) - option->init = dodup ? m_strdup(init) : (char*) init; - return (option); -} - static int init_expand (char** dst, struct option_t* src) { BUFFER token, in; ssize_t len = 0; @@ -1391,45 +1388,6 @@ static void mutt_restore_default (const char* name __attribute__ ((unused)), set_option (OPTREDRAWTREE); } -/* check whether value for $dsn_return would be valid */ -static int check_dsn_return (const char* option __attribute__ ((unused)), unsigned long p, - char* errbuf, ssize_t errlen) { - char* val = (char*) p; - if (val && *val && m_strncmp(val, "hdrs", 4) != 0 && - m_strncmp(val, "full", 4) != 0) { - if (errbuf) - snprintf (errbuf, errlen, _("'%s' is invalid for $%s"), val, "dsn_return"); - return (0); - } - return (1); -} - -/* check whether value for $dsn_notify would be valid */ -static int -check_dsn_notify (const char* option __attribute__ ((unused)), - unsigned long val, char* errbuf, ssize_t errlen) -{ - const char *p = (const char*)val; - - while (p && *p) { - const char *q = m_strchrnul(p, ','); - int len = q - p; - - if (!m_strncmp(p, "never", len) && !m_strncmp(p, "delay", len) - && !m_strncmp(p, "failure", len) && !m_strncmp(p, "success", len)) - { - if (errbuf) - snprintf(errbuf, errlen, _("'%.*s' is invalid for $%s"), - len, p, "dsn_notify"); - return 0; - } - - p = q + 1; - } - - return 1; -} - static int check_num (const char* option, unsigned long p, char* errbuf, ssize_t errlen) { if ((int) p < 0) { @@ -1570,11 +1528,6 @@ static int parse_set (BUFFER * tmp, BUFFER * s, unsigned long data, set_option (OPTRESORTINIT); set_option (OPTREDRAWTREE); return (0); - } - else if (!FuncTable[DTYPE (option->type)].opt_fromstr) { - snprintf (err->data, err->dsize, _("$%s is read-only"), option->option); - r = -1; - break; } else { CHECK_PAGER; mutt_restore_default (NULL, option, 1); @@ -1629,12 +1582,7 @@ static int parse_set (BUFFER * tmp, BUFFER * s, unsigned long data, { if (unset) { CHECK_PAGER; - if (!FuncTable[DTYPE (option->type)].opt_fromstr) { - snprintf (err->data, err->dsize, _("$%s is read-only"), - option->option); - r = -1; - break; - } else if (DTYPE (option->type) == DT_ADDR) + if (DTYPE (option->type) == DT_ADDR) address_list_wipe((address_t **) option->data); else p_delete((void **)(void *)&option->data); @@ -1648,20 +1596,12 @@ static int parse_set (BUFFER * tmp, BUFFER * s, unsigned long data, break; } - /* the $madmutt_ variables are read-only */ - if (!FuncTable[DTYPE (option->type)].opt_fromstr) { - snprintf (err->data, err->dsize, _("$%s is read-only"), - option->option); + CHECK_PAGER; + s->dptr++; + mutt_extract_token (tmp, s, 0); + if (!FuncTable[DTYPE (option->type)].opt_fromstr + (option, tmp->data, err->data, err->dsize)) r = -1; - break; - } else { - CHECK_PAGER; - s->dptr++; - mutt_extract_token (tmp, s, 0); - if (!FuncTable[DTYPE (option->type)].opt_fromstr - (option, tmp->data, err->data, err->dsize)) - r = -1; - } } else if (DTYPE (option->type) == DT_QUAD) { @@ -1742,12 +1682,12 @@ static int source_rc (const char *rcfile, BUFFER * err) p_clear(&token, 1); while ((linebuf = mutt_read_line(linebuf, &buflen, f, &line)) != NULL) { - conv = ConfigCharset && (*ConfigCharset) && Charset; + conv = ConfigCharset && (*ConfigCharset) && MCharset.charset; if (conv) { currentline = m_strdup(linebuf); if (!currentline) continue; - mutt_convert_string (¤tline, ConfigCharset, Charset, 0); + mutt_convert_string (¤tline, ConfigCharset, MCharset.charset, 0); } else currentline = linebuf; @@ -2213,9 +2153,9 @@ void mutt_init (int skip_sys_rc, string_list_t * commands) err.data = error; err.dsize = sizeof(error); - ConfigOptions = hash_create (sizeof(MuttVars) * 2); + ConfigOptions = hash_new (sizeof(MuttVars) * 2, 0); for (i = 0; MuttVars[i].option; i++) { - hash_insert (ConfigOptions, MuttVars[i].option, &MuttVars[i], 0); + hash_insert (ConfigOptions, MuttVars[i].option, &MuttVars[i]); } /* @@ -2224,38 +2164,12 @@ void mutt_init (int skip_sys_rc, string_list_t * commands) snprintf (AttachmentMarker, sizeof(AttachmentMarker), "\033]9;%ld\a", (long) time (NULL)); - /* on one of the systems I use, getcwd() does not return the same prefix - as is listed in the passwd file */ - if ((p = getenv ("HOME"))) - Homedir = m_strdup(p); - + luaM_initialize(); /* Get some information about the user */ if ((pw = getpwuid (getuid ()))) { char rnbuf[STRING]; - - Username = m_strdup(pw->pw_name); - if (!Homedir) - Homedir = m_strdup(pw->pw_dir); - - mutt_gecos_name(rnbuf, sizeof(rnbuf), pw, GecosMask.rx); + mutt_gecos_name(rnbuf, sizeof(rnbuf), pw, MCore.gecos_mask); Realname = m_strdup(rnbuf); - Shell = m_strdup(pw->pw_shell); - endpwent (); - } - else { - if (!Homedir) { - mutt_endwin (NULL); - fputs (_("unable to determine home directory"), stderr); - exit (1); - } - if ((p = getenv ("USER"))) - Username = m_strdup(p); - else { - mutt_endwin (NULL); - fputs (_("unable to determine username"), stderr); - exit (1); - } - Shell = m_strdup((p = getenv ("SHELL")) ? p : "/bin/sh"); } /* And about the host... */ @@ -2306,9 +2220,9 @@ void mutt_init (int skip_sys_rc, string_list_t * commands) Spoolfile = m_strdup(p); else { #ifdef HOMESPOOL - mutt_concat_path(buffer, sizeof(buffer), NONULL(Homedir), MAILPATH); + mutt_concat_path(buffer, sizeof(buffer), NONULL(MCore.homedir), MAILPATH); #else - mutt_concat_path(buffer, sizeof(buffer), MAILPATH, NONULL(Username)); + mutt_concat_path(buffer, sizeof(buffer), MAILPATH, NONULL(MCore.username)); #endif Spoolfile = m_strdup(buffer); } @@ -2322,16 +2236,6 @@ void mutt_init (int skip_sys_rc, string_list_t * commands) "/mailcap:/etc/mailcap:/usr/etc/mailcap:/usr/local/etc/mailcap"); } - Tempdir = m_strdup((p = getenv ("TMPDIR")) ? p : "/tmp"); - - p = getenv ("VISUAL"); - if (!p) { - p = getenv ("EDITOR"); - if (!p) - p = "vi"; - } - Editor = m_strdup(p); - if ((p = getenv ("REPLYTO")) != NULL) { BUFFER buf, token; @@ -2349,9 +2253,6 @@ void mutt_init (int skip_sys_rc, string_list_t * commands) if ((p = getenv ("EMAIL")) != NULL) From = rfc822_parse_adrlist (NULL, p); - charset_initialize(); - mlua_initialize(); - /* Set standard defaults */ hash_map (ConfigOptions, mutt_set_default, 0); hash_map (ConfigOptions, mutt_restore_default, 0); @@ -2367,10 +2268,10 @@ void mutt_init (int skip_sys_rc, string_list_t * commands) mutt_init_history (); if (!Muttrc) { - snprintf (buffer, sizeof(buffer), "%s/.madmuttrc", NONULL (Homedir)); + snprintf (buffer, sizeof(buffer), "%s/.madmuttrc", NONULL(MCore.homedir)); if (access (buffer, F_OK) == -1) snprintf (buffer, sizeof(buffer), "%s/.madmutt/madmuttrc", - NONULL (Homedir)); + NONULL(MCore.homedir)); default_rc = 1; Muttrc = m_strdup(buffer); @@ -2381,8 +2282,6 @@ void mutt_init (int skip_sys_rc, string_list_t * commands) mutt_expand_path (buffer, sizeof(buffer)); Muttrc = m_strdup(buffer); } - p_delete(&AliasFile); - AliasFile = m_strdup(NONULL (Muttrc)); /* Process the global rc file if it exists and the user hasn't explicity requested not to via "-n". */ @@ -2423,11 +2322,11 @@ void mutt_init (int skip_sys_rc, string_list_t * commands) } /* LUA {{{ */ - snprintf(buffer, sizeof(buffer), "%s/.madmutt.lua", NONULL(Homedir)); + snprintf(buffer, sizeof(buffer), "%s/.madmutt.lua", NONULL(MCore.homedir)); if (access(buffer, F_OK) < 0) - snprintf(buffer, sizeof(buffer), "%s/.madmutt/cfg.lua", NONULL(Homedir)); + snprintf(buffer, sizeof(buffer), "%s/.madmutt/cfg.lua", NONULL(MCore.homedir)); if (!access(buffer, F_OK)) { - need_pause = mlua_wrap(mutt_error, mlua_dofile(buffer)); + need_pause = luaM_wrap(mutt_error, luaM_dofile(buffer)); } /* }}} */