X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=init.c;h=5ac2110cb0afa4cf8f4069788840230be6061708;hp=e8eabd380b6e8c50e5a0e920e8a0a06e2779bff9;hb=4ff362c6b720c1ae7c6fde8300567644905bd923;hpb=3d937534e7b1ee723f86594b5e4c64c95158a933 diff --git a/init.c b/init.c index e8eabd3..5ac2110 100644 --- a/init.c +++ b/init.c @@ -16,6 +16,10 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. */ +#if HAVE_CONFIG_H +# include "config.h" +#endif + #include "mutt.h" #include "mapping.h" #include "mutt_curses.h" @@ -502,12 +506,16 @@ static void remove_from_list (LIST **l, const char *str) } } -static void remove_from_rx_list (RX_LIST **l, const char *str) +static int remove_from_rx_list (RX_LIST **l, const char *str) { RX_LIST *p, *last = NULL; + int rv = -1; if (mutt_strcmp ("*", str) == 0) + { mutt_free_rx_list (l); /* ``unCMD *'' means delete all current entries */ + rv = 0; + } else { p = *l; @@ -522,6 +530,7 @@ static void remove_from_rx_list (RX_LIST **l, const char *str) else (*l) = p->next; FREE (&p); + rv = 0; } else { @@ -530,6 +539,75 @@ static void remove_from_rx_list (RX_LIST **l, const char *str) } } } + return (rv); +} + +static int parse_ifdef (BUFFER *tmp, BUFFER *s, unsigned long data, BUFFER *err) +{ + int i, j, res = 0; + BUFFER token; + + memset (&token, 0, sizeof (token)); + mutt_extract_token (tmp, s, 0); + + /* is the item defined as a variable or a function? */ + if (!(res = (mutt_option_index (tmp->data) != -1))) + for (i = 0; !res && i < MENU_MAX; i++) + { + struct binding_t *b = km_get_table (Menus[i].value); + + if (!b) + continue; + + for (j = 0; b[j].name; j++) + if (!ascii_strncasecmp (tmp->data, b[j].name, mutt_strlen (tmp->data)) + && (mutt_strlen (b[j].name) == mutt_strlen (tmp->data))) + { + res = 1; + break; + } + } + /* check for feature_* */ + if (!res) { + char* p = NULL; + i = 0; + j = mutt_strlen (tmp->data); + /* need at least input of 'feature_X' */ + if (j >= 7) { + p = tmp->data + 7; + j -= 7; + while (Features[i].name) { + if (mutt_strlen (Features[i].name) == j && + ascii_strncasecmp (Features[i].name, p, j)) { + res = 1; + break; + } + i++; + } + } + } + + if (!MoreArgs (s)) + { + if (data) + snprintf (err->data, err->dsize, _("ifdef: too few arguments")); + else + snprintf (err->data, err->dsize, _("ifndef: too few arguments")); + return (-1); + } + mutt_extract_token (tmp, s, M_TOKEN_SPACE); + + if ((data && res) || (!data && !res)) + { + if (mutt_parse_rc_line (tmp->data, &token, err) == -1) + { + mutt_error ("Error: %s", err->data); + FREE (&token.data); + return (-1); + } + FREE (&token.data); + } + return 0; } static int parse_unignore (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) @@ -623,13 +701,35 @@ static void _alternates_clean (void) static int parse_alternates (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) { _alternates_clean(); - return parse_rx_list (buf, s, data, err); + do + { + mutt_extract_token (buf, s, 0); + remove_from_rx_list (&UnAlternates, buf->data); + + if (add_to_rx_list (&Alternates, buf->data, REG_ICASE, err) != 0) + return -1; + } + while (MoreArgs (s)); + + return 0; } static int parse_unalternates (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) { _alternates_clean(); - return parse_rx_unlist (buf, s, data, err); + do + { + mutt_extract_token (buf, s, 0); + remove_from_rx_list (&Alternates, buf->data); + + if (mutt_strcmp (buf->data, "*") && + add_to_rx_list (&UnAlternates, buf->data, REG_ICASE, err) != 0) + return -1; + + } + while (MoreArgs (s)); + + return 0; } static int parse_spam_list (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) @@ -725,14 +825,32 @@ static int parse_unlist (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err return 0; } +static int parse_lists (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) +{ + do + { + mutt_extract_token (buf, s, 0); + remove_from_rx_list (&UnMailLists, buf->data); + + if (add_to_rx_list (&MailLists, buf->data, REG_ICASE, err) != 0) + return -1; + } + while (MoreArgs (s)); + + return 0; +} static int parse_unlists (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) { do { mutt_extract_token (buf, s, 0); - remove_from_rx_list (&MailLists, buf->data); remove_from_rx_list (&SubscribedLists, buf->data); + remove_from_rx_list (&MailLists, buf->data); + + if (mutt_strcmp (buf->data, "*") && + add_to_rx_list (&UnMailLists, buf->data, REG_ICASE, err) != 0) + return -1; } while (MoreArgs (s)); @@ -744,6 +862,9 @@ static int parse_subscribe (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER * do { mutt_extract_token (buf, s, 0); + remove_from_rx_list (&UnMailLists, buf->data); + remove_from_rx_list (&UnSubscribedLists, buf->data); + if (add_to_rx_list (&MailLists, buf->data, REG_ICASE, err) != 0) return -1; if (add_to_rx_list (&SubscribedLists, buf->data, REG_ICASE, err) != 0) @@ -753,6 +874,22 @@ static int parse_subscribe (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER * return 0; } + +static int parse_unsubscribe (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) +{ + do + { + mutt_extract_token (buf, s, 0); + remove_from_rx_list (&SubscribedLists, buf->data); + + if (mutt_strcmp (buf->data, "*") && + add_to_rx_list (&UnSubscribedLists, buf->data, REG_ICASE, err) != 0) + return -1; + } + while (MoreArgs (s)); + + return 0; +} static int parse_unalias (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) { @@ -2067,7 +2204,7 @@ static void start_debug (void) { t = time (0); setbuf (debugfile, NULL); /* don't buffer the debugging output! */ - fprintf (debugfile, "Mutt %s started at %s.\nDebugging at level %d.\n\n", + fprintf (debugfile, "Mutt-ng %s started at %s.\nDebugging at level %d.\n\n", MUTT_VERSION, asctime (localtime (&t)), debuglevel); } }