--- commands.c 2001/06/16 22:43:09 1.1 +++ commands.c 2001/06/16 23:53:54 1.2 @@ -441,7 +441,7 @@ switch (mutt_multi_choice (reverse ? _("Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: ") : _("Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "), - _("dfrsotuzc"))) + _("dfrsotuzcp"))) { case -1: /* abort - don't resort */ return -1; @@ -481,7 +481,12 @@ case 9: /* s(c)ore */ Sort = SORT_SCORE; break; + + case 10: /* (p)ath */ + Sort = SORT_PATH; + break; } + if (reverse) Sort |= SORT_REVERSE; --- init.h 2001/06/16 23:25:03 1.1 +++ init.h 2001/06/16 23:53:54 1.2 @@ -2200,6 +2200,7 @@ { "threads", SORT_THREADS }, { "to", SORT_TO }, { "score", SORT_SCORE }, + { "path", SORT_PATH }, { NULL, 0 } }; @@ -2218,6 +2219,7 @@ */ { "to", SORT_TO }, { "score", SORT_SCORE }, + { "path", SORT_PATH }, { NULL, 0 } }; --- sort.c 2001/06/16 22:35:57 1.1 +++ sort.c 2001/06/16 23:53:54 1.2 @@ -148,6 +148,27 @@ return (SORTCODE ((*ha)->index - (*hb)->index)); } +int compare_path (const void *a, const void *b) +{ + HEADER **ha = (HEADER **) a; + HEADER **hb = (HEADER **) b; + int la, lb; + int result; + + la=strlen((*ha)->path); + lb=strlen((*hb)->path); + + if (la == lb) + result = mutt_strcmp((*ha)->path, (*hb)->path); + else if (la < lb) + result = -1; + else + result = 1; + + AUXSORT(result,a,b); + return (SORTCODE (result)); +} + sort_t *mutt_get_sort_func (int method) { switch (method & SORT_MASK) @@ -168,6 +189,8 @@ return (compare_to); case SORT_SCORE: return (compare_score); + case SORT_PATH: + return (compare_path); default: return (NULL); } --- sort.h 2001/06/16 22:36:00 1.1 +++ sort.h 2001/06/16 23:53:54 1.2 @@ -29,6 +29,7 @@ #define SORT_ADDRESS 11 #define SORT_KEYID 12 #define SORT_TRUST 13 +#define SORT_PATH 14 #define SORT_MASK 0xf #define SORT_REVERSE (1<<4) #define SORT_LAST (1<<5) --- sort.c 2001/07/09 00:58:24 1.2 +++ sort.c 2001/07/13 13:20:06 @@ -152,14 +152,18 @@ { HEADER **ha = (HEADER **) a; HEADER **hb = (HEADER **) b; + char *pa, *pb; int la, lb; int result; + pa=(*ha)->path?(*ha)->path:""; + pb=(*hb)->path?(*hb)->path:""; + - la=strlen((*ha)->path); - lb=strlen((*hb)->path); + la=strlen(pa); + lb=strlen(pb); if (la == lb) - result = mutt_strcmp((*ha)->path, (*hb)->path); + result = mutt_strcmp(pa, pb); else if (la < lb) result = -1; else