#include <lib-lib/lib-lib.h>
#include <sys/utsname.h>
+#include <lib-lua/lib-lua.h>
#include <lib-sys/unix.h>
#include <lib-sys/mutt_ssl.h>
-
#include <lib-ui/curses.h>
#include <lib-ui/history.h>
#include <lib-mx/mx.h>
+#include <lib-crypt/crypt.h>
#include "mutt.h"
#include "keymap.h"
#include "charset.h"
#include "thread.h"
-#include <lib-crypt/crypt.h>
#include "mutt_idna.h"
#if defined (USE_LIBESMTP) && (defined (USE_SSL) || defined (USE_GNUTLS))
static void rx_to_string (char* dst, ssize_t dstlen, struct option_t* option);
static void magic_to_string (char* dst, ssize_t dstlen, struct option_t* option);
static void addr_to_string (char* dst, ssize_t dstlen, struct option_t* option);
-static void user_to_string (char* dst, ssize_t dstlen, struct option_t* option);
static void sys_to_string (char* dst, ssize_t dstlen, struct option_t* option);
/* protos for config type handles: convert to value from string */
char* errbuf, ssize_t errlen);
static int addr_from_string (struct option_t* dst, const char* val,
char* errbuf, ssize_t errlen);
-static int user_from_string (struct option_t* dst, const char* val,
- char* errbuf, ssize_t errlen);
static struct {
unsigned short type;
* but must define it as DT_ is used for indexing */
{ DT_SYN, NULL, NULL },
{ DT_ADDR, addr_to_string, addr_from_string },
- { DT_USER, user_to_string, user_from_string },
{ DT_SYS, sys_to_string, NULL },
};
NONULL (*((char**) option->data)));
}
-static void user_to_string (char* dst, ssize_t dstlen,
- struct option_t* option) {
- snprintf (dst, dstlen, "%s=\"%s\"", option->option,
- NONULL (((char*) option->data)));
-}
-
static void sys_to_string (char* dst, ssize_t dstlen,
struct option_t* option) {
char *val = NULL, *t = NULL;
return (1);
}
-static int user_from_string (struct option_t* dst, const char* val,
- char* errbuf __attribute__ ((unused)), ssize_t errlen __attribute__ ((unused))) {
- /* if dst == NULL, we may get here in case the user did unset it,
- * see parse_set() where item is free()'d before coming here; so
- * just silently ignore it */
- if (!dst)
- return (1);
- if (m_strlen((char*) dst->data) == 0)
- dst->data = (unsigned long) m_strdup(val);
- else {
- char* s = (char*) dst->data;
- m_strreplace(&s, val);
- }
- if (m_strlen(dst->init) == 0)
- dst->init = m_strdup((char*) dst->data);
- return (1);
-}
-
static void quad_to_string (char* dst, ssize_t dstlen,
struct option_t* option) {
const char *vals[] = { "no", "yes", "ask-no", "ask-yes" };
return (option);
}
-/* creates new option_t* of type DT_USER for $user_ var */
-static struct option_t* add_user_option (const char* name) {
- return (add_option (name, NULL, DT_USER, 1));
-}
-
-/* free()'s option_t* */
-static void del_option (void* p) {
- struct option_t *ptr = (struct option_t*) p;
- char* s = (char*) ptr->data;
- p_delete(&ptr->option);
- p_delete(&s);
- p_delete(&ptr->init);
- p_delete(&ptr);
-}
-
static int init_expand (char** dst, struct option_t* src) {
BUFFER token, in;
ssize_t len = 0;
option = newopt;
}
- /* see if we need to add $user_ var */
- if (!option && m_strncmp("user_", tmp->data, 5) == 0) {
- /* there's no option named like this yet so only add one
- * if the action isn't any of: reset, unset, query */
- if (!(reset || unset || query || *s->dptr != '=')) {
- option = add_user_option (tmp->data);
- hash_insert (ConfigOptions, option->option, option, 0);
- }
- }
-
if (!option && !(reset && m_strcmp("all", tmp->data) == 0)) {
snprintf (err->data, err->dsize, _("%s: unknown variable"), tmp->data);
return (-1);
DTYPE (option->type) == DT_NUM ||
DTYPE (option->type) == DT_SORT ||
DTYPE (option->type) == DT_RX ||
- DTYPE (option->type) == DT_USER ||
DTYPE (option->type) == DT_SYS) {
/* XXX maybe we need to get unset into handlers? */
if (DTYPE (option->type) == DT_STR ||
DTYPE (option->type) == DT_PATH ||
DTYPE (option->type) == DT_ADDR ||
- DTYPE (option->type) == DT_USER ||
DTYPE (option->type) == DT_SYS) {
if (unset) {
CHECK_PAGER;
break;
} else if (DTYPE (option->type) == DT_ADDR)
address_list_wipe((address_t **) option->data);
- else if (DTYPE (option->type) == DT_USER)
- /* to unset $user_ means remove */
- hash_delete (ConfigOptions, option->option,
- option, del_option);
else
p_delete((void **)(void *)&option->data);
break;
return 0;
}
-#include "parse.h"
-#include "rcparser.h"
-
void mutt_init (int skip_sys_rc, string_list_t * commands)
{
struct passwd *pw;
err.data = error;
err.dsize = sizeof(error);
- /* use 3*sizeof(muttvars) instead of 2*sizeof()
- * to have some room for $user_ vars */
- ConfigOptions = hash_create (sizeof(MuttVars) * 3);
+ ConfigOptions = hash_create (sizeof(MuttVars) * 2);
for (i = 0; MuttVars[i].option; i++) {
if (DTYPE (MuttVars[i].type) != DT_SYS)
hash_insert (ConfigOptions, MuttVars[i].option, &MuttVars[i], 0);
From = rfc822_parse_adrlist (NULL, p);
charset_initialize();
+ mlua_initialize();
/* Set standard defaults */
hash_map (ConfigOptions, mutt_set_default, 0);
}
}
-#if 0
- {
- void *parser = rcparseAlloc(malloc);
- struct rcstate state;
- segment s1 = {" ", 1};
- segment s2 = {"toto", 4 };
- segment s3 = {"titi", 4 };
- segment s4 = {"\"", 1 };
-
- mutt_endwin(NULL);
-
- p_clear(&state, 1);
-
- rcparseTrace(stderr, "> ");
- rcparse(parser, RCTK_ALTERNATIVE_ORDER, s1, &state);
- rcparse(parser, RCTK_SPACE, s1, &state);
- rcparse(parser, RCTK_ATOM, s2, &state);
- rcparse(parser, RCTK_SPACE, s1, &state);
- rcparse(parser, RCTK_DQUOTE, s4, &state);
- rcparse(parser, RCTK_ATOM, s3, &state);
- rcparse(parser, RCTK_SPACE, s1, &state);
- rcparse(parser, RCTK_ATOM, s3, &state);
- rcparse(parser, RCTK_DQUOTE, s4, &state);
- rcparse(parser, RCTK_NL, s1, &state);
- rcparse(parser, 0, s1, &state);
-
- exit(0);
- }
-#endif
-
/* Read the user's initialization file. */
if (access (Muttrc, F_OK) != -1) {
if (!option (OPTNOCURSES))
exit (1);
}
+ /* LUA {{{ */
+ snprintf(buffer, sizeof(buffer), "%s/.madmutt.lua", NONULL(Homedir));
+ if (access(buffer, F_OK) < 0)
+ snprintf(buffer, sizeof(buffer), "%s/.madmutt/cfg.lua", NONULL(Homedir));
+ if (!access(buffer, F_OK)) {
+ need_pause = mlua_wrap(mutt_error, mlua_dofile(buffer));
+ }
+ /* }}} */
+
if (mutt_execute_commands (commands) != 0)
need_pause = 1;