X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=init.c;h=c32e5517214e0f4dd6a3fcbee817dd0f73b420ce;hp=32f913b4ecd60ed8943940b9269e4a1045d131e8;hb=ea912b20ba2b3b9dfdbbae758ad56263c9aa41b3;hpb=d6988dab6bd378ccdf0f17aaa16de8aee1ceaf43 diff --git a/init.c b/init.c index 32f913b..c32e551 100644 --- a/init.c +++ b/init.c @@ -53,15 +53,6 @@ #include #include -#define CHECK_PAGER \ - if ((CurrentMenu == MENU_PAGER) && \ - (!option || (option->flags & R_RESORT))) \ - { \ - snprintf (err->data, err->dsize, \ - _("Not available in this menu.")); \ - return (-1); \ - } else - /* * prototypes */ @@ -279,10 +270,26 @@ static void sys_to_string (char* dst, size_t dstlen, val = CurrentFolder; } else if (ascii_strcmp ("muttng_folder_name", option->option) == 0 && CurrentFolder && *CurrentFolder) { - if ((t = strrchr (CurrentFolder, '/')) != NULL) + + size_t Maildirlength = str_len (Maildir); + + /* + * if name starts with $folder, just strip it to keep hierarchy + * $folder=imap://host, path=imap://host/inbox/b -> inbox/b + */ + if (Maildirlength > 0 && str_ncmp (CurrentFolder, Maildir, + Maildirlength) == 0 && + str_len (CurrentFolder) > Maildirlength) { + val = CurrentFolder + Maildirlength; + if (Maildir[strlen(Maildir)-1]!='/') + val += 1; + /* if not $folder, just use everything after last / */ + } else if ((t = strrchr (CurrentFolder, '/')) != NULL) val = t+1; + /* default: use as-is */ else val = CurrentFolder; + } else val = option->init; @@ -342,7 +349,7 @@ static int user_from_string (struct option_t* dst, const char* val, static void quad_to_string (char* dst, size_t dstlen, struct option_t* option) { - char *vals[] = { "no", "yes", "ask-no", "ask-yes" }; + const char *vals[] = { "no", "yes", "ask-no", "ask-yes" }; snprintf (dst, dstlen, "%s=%s", option->option, vals[quadoption (option->data)]); } @@ -1208,7 +1215,7 @@ static int parse_unattach_list (BUFFER *buf, BUFFER *s, LIST **ldata, BUFFER *er return 0; } -static int print_attach_list (LIST *lp, char op, char *name) { +static int print_attach_list (LIST *lp, char op, const char *name) { while (lp) { printf("attachments %c%s %s/%s\n", op, name, ((ATTACH_MATCH *)lp->data)->major, @@ -1591,7 +1598,7 @@ static void mutt_set_default (const char* name, void* p, unsigned long more) { } static struct option_t* add_option (const char* name, const char* init, - short type, short dup) { + short type, short dodup) { struct option_t* option = mem_calloc (1, sizeof (struct option_t)); debug_print (1, ("adding $%s\n", name)); @@ -1599,7 +1606,7 @@ static struct option_t* add_option (const char* name, const char* init, option->option = str_dup (name); option->type = type; if (init) - option->init = dup ? str_dup (init) : (char*) init; + option->init = dodup ? str_dup (init) : (char*) init; return (option); } @@ -1803,6 +1810,15 @@ static const struct mapping_t* get_sortmap (struct option_t* option) { return (map); } +#define CHECK_PAGER \ + if ((CurrentMenu == MENU_PAGER) && \ + (!option || (option->flags & R_RESORT))) \ + { \ + snprintf (err->data, err->dsize, \ + _("Not available in this menu.")); \ + return (-1); \ + } + static int parse_set (BUFFER * tmp, BUFFER * s, unsigned long data, BUFFER * err) {