--- mutt-1.5.9/browser.c 2005-02-19 13:49:37.000000000 +0000 +++ mutt-1.5.9-new/browser.c 2005-06-13 01:00:41.000000000 +0100 @@ -139,6 +140,49 @@ return 0; } +static int nr_mails(const char *name, int new) +{ + struct stat st; + DIR *dp; + struct dirent *de; + char fullpath[_POSIX_PATH_MAX]; + int count = 0; + + strncpy(fullpath, name, _POSIX_PATH_MAX); + mutt_expand_path(fullpath, _POSIX_PATH_MAX); + + if (new) { + strcat(fullpath, "/new/"); + } else { + strcat(fullpath, "/cur/"); + } + + if (stat (fullpath, &st) != 0) + return 0; + + if (!(S_ISDIR (st.st_mode))) + return 0; + + if ((dp = opendir (fullpath)) == NULL) + { + mutt_perror (fullpath); + return 0; + } + + while ((de = readdir (dp)) != NULL) + { + if (mutt_strcmp (de->d_name, ".") == 0) + continue; + if (mutt_strcmp (de->d_name, "..") == 0) + continue; + + count++; + } + closedir (dp); + + return count; +} + static const char * folder_format_str (char *dest, size_t destlen, char op, const char *src, const char *fmt, const char *ifstring, const char *elsestring, @@ -147,6 +191,7 @@ char fn[SHORT_STRING], tmp[SHORT_STRING], permission[11]; char date[16], *t_fmt; time_t tnow; + int count; FOLDER *folder = (FOLDER *) data; struct passwd *pw; struct group *gr; @@ -159,6 +204,13 @@ snprintf (dest, destlen, tmp, folder->num + 1); break; + case 'c': + count = nr_mails(folder->ff->name, 0); + count += nr_mails(folder->ff->name, 1); + snprintf (tmp, sizeof (tmp), "%%%sd", fmt); + snprintf (dest, destlen, tmp, count); + break; + case 'd': if (folder->ff->st != NULL) { @@ -243,6 +295,17 @@ mutt_format_s (dest, destlen, fmt, ""); break; + case 'n': + count = nr_mails(folder->ff->name, 1); + if (count) { + snprintf (tmp, sizeof (tmp), "%%%s3d", fmt); + snprintf (dest, destlen, tmp, count); + } else { + snprintf (tmp, sizeof (tmp), "%%%ss", fmt); + snprintf (dest, destlen, tmp, " "); + } + break; + case 'N': #ifdef USE_IMAP if (mx_is_imap (folder->ff->desc)) @@ -257,8 +320,9 @@ break; } #endif + count = nr_mails(folder->ff->name, 1); snprintf (tmp, sizeof (tmp), "%%%sc", fmt); - snprintf (dest, destlen, tmp, folder->ff->new ? 'N' : ' '); + snprintf (dest, destlen, tmp, count ? 'N' : ' '); break; case 's': @@ -458,7 +527,8 @@ strfcpy (buffer, NONULL(tmp->path), sizeof (buffer)); mutt_pretty_mailbox (buffer); - add_folder (menu, state, buffer, &s, tmp->new); + if (nr_mails(tmp->path, 0) > 0 || nr_mails(tmp->path, 1) > 0) + add_folder (menu, state, buffer, &s, tmp); } while ((tmp = tmp->next)); browser_sort (state);