X-Git-Url: https://git.llucax.com/software/mutt-debian.git/blobdiff_plain/90ca98902668310adea2bd544a61a3d6c9c12f1c..5a2d8285f6bef8f940767a5f17780e998de2a19e:/debian/patches/mutt-patched/sidebar diff --git a/debian/patches/mutt-patched/sidebar b/debian/patches/mutt-patched/sidebar index b34a73e..1e4a6b8 100644 --- a/debian/patches/mutt-patched/sidebar +++ b/debian/patches/mutt-patched/sidebar @@ -29,171 +29,155 @@ in the "mutt-patched" package. - 2008-08-02 myon: Refreshed patch using quilt push -f to remove hunks we do not need (Makefile.in). -Index: mutt/buffy.c -=================================================================== ---- mutt.orig/buffy.c 2009-06-25 12:36:44.000000000 +0200 -+++ mutt/buffy.c 2009-06-25 12:36:53.000000000 +0200 -@@ -289,6 +289,7 @@ - char path[_POSIX_PATH_MAX]; - struct stat contex_sb; - time_t t; -+ CONTEXT *ctx; +--- a/Makefile.am ++++ b/Makefile.am +@@ -32,6 +32,7 @@ + rfc822.c rfc1524.c rfc2047.c rfc2231.c rfc3676.c \ + score.c send.c sendlib.c signal.c sort.c \ + status.c system.c thread.c charset.c history.c lib.c \ ++ sidebar.c \ + muttlib.c editmsg.c mbyte.c \ + url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c - sb.st_size=0; - contex_sb.st_dev=0; -@@ -328,6 +329,8 @@ - - for (tmp = Incoming; tmp; tmp = tmp->next) - { -+ if ( tmp->new == 1 ) -+ tmp->has_new = 1; - #ifdef USE_IMAP - if (tmp->magic != M_IMAP) - #endif -@@ -384,10 +387,27 @@ - case M_MBOX: - case M_MMDF: +--- a/OPS ++++ b/OPS +@@ -180,3 +180,8 @@ + OP_MAIN_SHOW_LIMIT "show currently active limit pattern" + OP_MAIN_COLLAPSE_THREAD "collapse/uncollapse current thread" + OP_MAIN_COLLAPSE_ALL "collapse/uncollapse all threads" ++OP_SIDEBAR_SCROLL_UP "scroll the mailbox pane up 1 page" ++OP_SIDEBAR_SCROLL_DOWN "scroll the mailbox pane down 1 page" ++OP_SIDEBAR_NEXT "go down to next mailbox" ++OP_SIDEBAR_PREV "go to previous mailbox" ++OP_SIDEBAR_OPEN "open hilighted mailbox" +--- a/buffy.c ++++ b/buffy.c +@@ -340,6 +340,68 @@ + return rc; + } -- if (STAT_CHECK) -+ { -+ if (STAT_CHECK || tmp->msgcount == 0) - { -- BuffyCount++; -- tmp->new = 1; -+ BUFFY b = *tmp; -+ int msgcount = 0; -+ int msg_unread = 0; -+ /* parse the mailbox, to see how much mail there is */ -+ ctx = mx_open_mailbox( tmp->path, M_READONLY | M_QUIET | M_NOSORT | M_PEEK, NULL); -+ if(ctx) -+ { -+ msgcount = ctx->msgcount; -+ msg_unread = ctx->unread; -+ mx_close_mailbox(ctx, 0); -+ } -+ *tmp = b; -+ tmp->msgcount = msgcount; -+ tmp->msg_unread = msg_unread; -+ if(STAT_CHECK) { -+ tmp->has_new = tmp->new = 1; -+ BuffyCount++; -+ } - } - else if (option(OPTCHECKMBOXSIZE)) - { -@@ -397,35 +417,86 @@ - if (tmp->newly_created && - (sb.st_ctime != sb.st_mtime || sb.st_ctime != sb.st_atime)) - tmp->newly_created = 0; -- ++/* update message counts for the sidebar */ ++void buffy_maildir_update (BUFFY* mailbox) ++{ ++ char path[_POSIX_PATH_MAX]; ++ DIR *dirp; ++ struct dirent *de; ++ char *p; ++ ++ mailbox->msgcount = 0; ++ mailbox->msg_unread = 0; ++ mailbox->msg_flagged = 0; ++ ++ snprintf (path, sizeof (path), "%s/new", mailbox->path); ++ ++ if ((dirp = opendir (path)) == NULL) ++ { ++ mailbox->magic = 0; ++ return; ++ } ++ ++ while ((de = readdir (dirp)) != NULL) ++ { ++ if (*de->d_name == '.') ++ continue; ++ ++ if (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T')) { ++ mailbox->new = 1; ++ mailbox->msgcount++; ++ mailbox->msg_unread++; ++ } ++ } ++ ++ closedir (dirp); ++ snprintf (path, sizeof (path), "%s/cur", mailbox->path); ++ ++ if ((dirp = opendir (path)) == NULL) ++ { ++ mailbox->magic = 0; ++ return; ++ } ++ ++ while ((de = readdir (dirp)) != NULL) ++ { ++ if (*de->d_name == '.') ++ continue; ++ ++ if (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T')) { ++ mailbox->msgcount++; ++ if ((p = strstr (de->d_name, ":2,"))) { ++ if (!strchr (p + 3, 'T')) { ++ if (!strchr (p + 3, 'S')) ++ mailbox->msg_unread++; ++ if (strchr(p + 3, 'F')) ++ mailbox->msg_flagged++; + } - break; - - case M_MAILDIR: ++ } ++ } ++ } ++ ++ closedir (dirp); ++} ++ + /* returns 1 if mailbox has new mail */ + static int buffy_mbox_hasnew (BUFFY* mailbox, struct stat *sb) + { +@@ -371,6 +433,20 @@ + return rc; + } -+ /* count new message */ - snprintf (path, sizeof (path), "%s/new", tmp->path); - if ((dirp = opendir (path)) == NULL) - { - tmp->magic = 0; - break; - } -+ tmp->msgcount = 0; -+ tmp->msg_unread = 0; -+ tmp->msg_flagged = 0; - while ((de = readdir (dirp)) != NULL) - { - char *p; - if (*de->d_name != '.' && - (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T'))) - { -- /* one new and undeleted message is enough */ -- BuffyCount++; -- tmp->new = 1; -- break; -+ tmp->has_new = tmp->new = 1; -+ tmp->msgcount++; -+ tmp->msg_unread++; -+ } -+ } -+ if(tmp->msg_unread) -+ BuffyCount++; ++/* update message counts for the sidebar */ ++void buffy_mbox_update (BUFFY* mailbox) ++{ ++ CONTEXT *ctx = NULL; + -+ closedir (dirp); ++ ctx = mx_open_mailbox(mailbox->path, M_READONLY | M_QUIET | M_NOSORT | M_PEEK, NULL); ++ if(ctx) ++ { ++ mailbox->msgcount = ctx->msgcount; ++ mailbox->msg_unread = ctx->unread; ++ mx_close_mailbox(ctx, 0); ++ } ++} + -+ /* -+ * count read messages (for folderlist (sidebar) we also need to count -+ * messages in cur so that we the total number of messages -+ */ -+ snprintf (path, sizeof (path), "%s/cur", tmp->path); -+ if ((dirp = opendir (path)) == NULL) -+ { -+ tmp->magic = 0; -+ break; -+ } -+ while ((de = readdir (dirp)) != NULL) -+ { -+ char *p; -+ if (*de->d_name != '.') { -+ if ((p = strstr (de->d_name, ":2,"))) { -+ if (!strchr (p + 3, 'T')) { -+ tmp->msgcount++; -+ if ( !strchr (p + 3, 'S')) -+ tmp->msg_unread++; -+ if (strchr(p + 3, 'F')) -+ tmp->msg_flagged++; -+ } -+ } else -+ tmp->msgcount++; - } - } - closedir (dirp); + int mutt_buffy_check (int force) + { + BUFFY *tmp; +@@ -444,16 +520,19 @@ + { + case M_MBOX: + case M_MMDF: ++ buffy_mbox_update (tmp); + if (buffy_mbox_hasnew (tmp, &sb) > 0) + BuffyCount++; + break; + + case M_MAILDIR: ++ buffy_maildir_update (tmp); + if (buffy_maildir_hasnew (tmp) > 0) + BuffyCount++; break; case M_MH: -+ { -+ DIR *dp; -+ struct dirent *de; ++ mh_buffy_update (tmp->path, &tmp->msgcount, &tmp->msg_unread, &tmp->msg_flagged); if ((tmp->new = mh_buffy (tmp->path)) > 0) BuffyCount++; -+ -+ if ((dp = opendir (path)) == NULL) -+ break; -+ tmp->msgcount = 0; -+ while ((de = readdir (dp))) -+ { -+ if (mh_valid_message (de->d_name)) -+ { -+ tmp->msgcount++; -+ tmp->has_new = tmp->new = 1; -+ } -+ } -+ closedir (dp); -+ } break; - } - } -Index: mutt/buffy.h -=================================================================== ---- mutt.orig/buffy.h 2009-06-24 19:37:58.000000000 +0200 -+++ mutt/buffy.h 2009-06-25 12:36:53.000000000 +0200 -@@ -25,7 +25,12 @@ +--- a/buffy.h ++++ b/buffy.h +@@ -25,7 +25,11 @@ char path[_POSIX_PATH_MAX]; off_t size; struct buffy_t *next; + struct buffy_t *prev; short new; /* mailbox has new mail */ -+ short has_new; /* set it new if new and not read */ + int msgcount; /* total number of messages */ + int msg_unread; /* number of unread messages */ + int msg_flagged; /* number of flagged messages */ short notified; /* user has been notified */ short magic; /* mailbox type */ short newly_created; /* mbox or mmdf just popped into existence */ -Index: mutt/color.c -=================================================================== ---- mutt.orig/color.c 2009-06-24 19:37:58.000000000 +0200 -+++ mutt/color.c 2009-06-25 12:36:53.000000000 +0200 +--- a/color.c ++++ b/color.c @@ -93,6 +93,8 @@ { "bold", MT_COLOR_BOLD }, { "underline", MT_COLOR_UNDERLINE }, @@ -203,10 +187,8 @@ Index: mutt/color.c { NULL, 0 } }; -Index: mutt/compose.c -=================================================================== ---- mutt.orig/compose.c 2009-06-24 19:37:58.000000000 +0200 -+++ mutt/compose.c 2009-06-25 12:36:53.000000000 +0200 +--- a/compose.c ++++ b/compose.c @@ -72,7 +72,7 @@ #define HDR_XOFFSET 10 @@ -216,38 +198,25 @@ Index: mutt/compose.c static char *Prompts[] = { -@@ -115,16 +115,16 @@ - if ((WithCrypto & APPLICATION_PGP) && (WithCrypto & APPLICATION_SMIME)) - { - if (!msg->security) -- mvaddstr (HDR_CRYPT, 0, "Security: "); -+ mvaddstr (HDR_CRYPT, SidebarWidth, "Security: "); - else if (msg->security & APPLICATION_SMIME) -- mvaddstr (HDR_CRYPT, 0, " S/MIME: "); -+ mvaddstr (HDR_CRYPT, SidebarWidth, " S/MIME: "); - else if (msg->security & APPLICATION_PGP) -- mvaddstr (HDR_CRYPT, 0, " PGP: "); -+ mvaddstr (HDR_CRYPT, SidebarWidth, " PGP: "); +@@ -112,7 +112,7 @@ + { + int off = 0; + +- mvaddstr (HDR_CRYPT, 0, "Security: "); ++ mvaddstr (HDR_CRYPT, SidebarWidth, "Security: "); + + if ((WithCrypto & (APPLICATION_PGP | APPLICATION_SMIME)) == 0) + { +@@ -144,7 +144,7 @@ } - else if ((WithCrypto & APPLICATION_SMIME)) -- mvaddstr (HDR_CRYPT, 0, " S/MIME: "); -+ mvaddstr (HDR_CRYPT, SidebarWidth, " S/MIME: "); - else if ((WithCrypto & APPLICATION_PGP)) -- mvaddstr (HDR_CRYPT, 0, " PGP: "); -+ mvaddstr (HDR_CRYPT, SidebarWidth, " PGP: "); - else - return; -@@ -148,7 +148,7 @@ - } clrtoeol (); - - move (HDR_CRYPTINFO, 0); + move (HDR_CRYPTINFO, SidebarWidth); clrtoeol (); + if ((WithCrypto & APPLICATION_PGP) - && msg->security & APPLICATION_PGP && msg->security & SIGN) -@@ -164,7 +164,7 @@ +@@ -161,7 +161,7 @@ && (msg->security & ENCRYPT) && SmimeCryptAlg && *SmimeCryptAlg) { @@ -256,7 +225,7 @@ Index: mutt/compose.c NONULL(SmimeCryptAlg)); off = 20; } -@@ -178,7 +178,7 @@ +@@ -175,7 +175,7 @@ int c; char *t; @@ -265,7 +234,7 @@ Index: mutt/compose.c if (!chain) { -@@ -193,7 +193,7 @@ +@@ -190,7 +190,7 @@ if (t && t[0] == '0' && t[1] == '\0') t = ""; @@ -274,7 +243,7 @@ Index: mutt/compose.c break; addstr (NONULL(t)); -@@ -245,7 +245,7 @@ +@@ -242,7 +242,7 @@ buf[0] = 0; rfc822_write_address (buf, sizeof (buf), addr, 1); @@ -283,7 +252,7 @@ Index: mutt/compose.c mutt_paddstr (W, buf); } -@@ -255,10 +255,10 @@ +@@ -252,10 +252,10 @@ draw_envelope_addr (HDR_TO, msg->env->to); draw_envelope_addr (HDR_CC, msg->env->cc); draw_envelope_addr (HDR_BCC, msg->env->bcc); @@ -296,7 +265,7 @@ Index: mutt/compose.c mutt_paddstr (W, fcc); if (WithCrypto) -@@ -269,7 +269,7 @@ +@@ -266,7 +266,7 @@ #endif SETCOLOR (MT_COLOR_STATUS); @@ -305,7 +274,7 @@ Index: mutt/compose.c BKGDSET (MT_COLOR_STATUS); clrtoeol (); -@@ -307,7 +307,7 @@ +@@ -304,7 +304,7 @@ /* redraw the expanded list so the user can see the result */ buf[0] = 0; rfc822_write_address (buf, sizeof (buf), *addr, 1); @@ -314,7 +283,7 @@ Index: mutt/compose.c mutt_paddstr (W, buf); return 0; -@@ -552,7 +552,7 @@ +@@ -549,7 +549,7 @@ if (mutt_get_field ("Subject: ", buf, sizeof (buf), 0) == 0) { mutt_str_replace (&msg->env->subject, buf); @@ -323,7 +292,7 @@ Index: mutt/compose.c clrtoeol (); if (msg->env->subject) mutt_paddstr (W, msg->env->subject); -@@ -569,7 +569,7 @@ +@@ -566,7 +566,7 @@ { strfcpy (fcc, buf, fcclen); mutt_pretty_mailbox (fcc, fcclen); @@ -332,10 +301,8 @@ Index: mutt/compose.c mutt_paddstr (W, fcc); fccSet = 1; } -Index: mutt/curs_main.c -=================================================================== ---- mutt.orig/curs_main.c 2009-06-25 12:36:26.000000000 +0200 -+++ mutt/curs_main.c 2009-06-25 12:36:53.000000000 +0200 +--- a/curs_main.c ++++ b/curs_main.c @@ -26,7 +26,9 @@ #include "mailbox.h" #include "mapping.h" @@ -346,7 +313,7 @@ Index: mutt/curs_main.c #ifdef USE_POP #include "pop.h" -@@ -536,8 +538,12 @@ +@@ -532,8 +534,12 @@ menu->redraw |= REDRAW_STATUS; if (do_buffy_notify) { @@ -361,7 +328,7 @@ Index: mutt/curs_main.c } else do_buffy_notify = 1; -@@ -549,6 +555,7 @@ +@@ -545,6 +551,7 @@ if (menu->redraw & REDRAW_FULL) { menu_redraw_full (menu); @@ -369,7 +336,7 @@ Index: mutt/curs_main.c mutt_show_error (); } -@@ -571,10 +578,13 @@ +@@ -567,10 +574,13 @@ if (menu->redraw & REDRAW_STATUS) { @@ -383,7 +350,7 @@ Index: mutt/curs_main.c mutt_paddstr (COLS, buf); SETCOLOR (MT_COLOR_NORMAL); BKGDSET (MT_COLOR_NORMAL); -@@ -595,7 +605,7 @@ +@@ -591,7 +601,7 @@ menu->oldcurrent = -1; if (option (OPTARROWCURSOR)) @@ -392,7 +359,7 @@ Index: mutt/curs_main.c else if (option (OPTBRAILLEFRIENDLY)) move (menu->current - menu->top + menu->offset, 0); else -@@ -1075,6 +1085,7 @@ +@@ -1089,6 +1099,7 @@ menu->redraw = REDRAW_FULL; break; @@ -400,7 +367,7 @@ Index: mutt/curs_main.c case OP_MAIN_CHANGE_FOLDER: case OP_MAIN_NEXT_UNREAD_MAILBOX: -@@ -1106,7 +1117,11 @@ +@@ -1120,7 +1131,11 @@ { mutt_buffy (buf, sizeof (buf)); @@ -408,12 +375,12 @@ Index: mutt/curs_main.c + if ( op == OP_SIDEBAR_OPEN ) { + if(!CurBuffy) + break; -+ strncpy( buf, CurBuffy->path, sizeof(buf) ); ++ strncpy( buf, CurBuffy->path, sizeof(buf) ); + } else if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) == -1) { if (menu->menu == MENU_PAGER) { -@@ -1124,6 +1139,7 @@ +@@ -1138,6 +1153,7 @@ } mutt_expand_path (buf, sizeof (buf)); @@ -421,7 +388,7 @@ Index: mutt/curs_main.c if (mx_get_magic (buf) <= 0) { mutt_error (_("%s is not a mailbox."), buf); -@@ -2216,6 +2232,12 @@ +@@ -2241,6 +2257,12 @@ mutt_what_key(); break; @@ -434,10 +401,8 @@ Index: mutt/curs_main.c default: if (menu->menu == MENU_MAIN) km_error_key (MENU_MAIN); -Index: mutt/flags.c -=================================================================== ---- mutt.orig/flags.c 2009-06-25 12:36:14.000000000 +0200 -+++ mutt/flags.c 2009-06-25 12:36:53.000000000 +0200 +--- a/flags.c ++++ b/flags.c @@ -22,8 +22,10 @@ #include "mutt.h" @@ -457,11 +422,9 @@ Index: mutt/flags.c } void mutt_tag_set_flag (int flag, int bf) -Index: mutt/functions.h -=================================================================== ---- mutt.orig/functions.h 2009-06-25 12:36:35.000000000 +0200 -+++ mutt/functions.h 2009-06-25 12:36:53.000000000 +0200 -@@ -169,6 +169,11 @@ +--- a/functions.h ++++ b/functions.h +@@ -170,6 +170,11 @@ { "decrypt-save", OP_DECRYPT_SAVE, NULL }, @@ -473,7 +436,7 @@ Index: mutt/functions.h { NULL, 0, NULL } }; -@@ -270,6 +275,11 @@ +@@ -274,6 +279,11 @@ { "what-key", OP_WHAT_KEY, NULL }, @@ -485,10 +448,8 @@ Index: mutt/functions.h { NULL, 0, NULL } }; -Index: mutt/globals.h -=================================================================== ---- mutt.orig/globals.h 2009-06-25 12:36:22.000000000 +0200 -+++ mutt/globals.h 2009-06-25 12:36:53.000000000 +0200 +--- a/globals.h ++++ b/globals.h @@ -117,6 +117,7 @@ WHERE char *SendCharset; WHERE char *Sendmail; @@ -497,7 +458,7 @@ Index: mutt/globals.h WHERE char *Signature; WHERE char *SimpleSearch; #if USE_SMTP -@@ -209,6 +210,9 @@ +@@ -210,6 +211,9 @@ WHERE short ScoreThresholdRead; WHERE short ScoreThresholdFlag; @@ -507,18 +468,43 @@ Index: mutt/globals.h #ifdef USE_IMAP WHERE short ImapKeepalive; WHERE short ImapPipelineDepth; -Index: mutt/init.h -=================================================================== ---- mutt.orig/init.h 2009-06-25 12:36:40.000000000 +0200 -+++ mutt/init.h 2009-06-25 12:36:53.000000000 +0200 -@@ -1953,6 +1953,22 @@ +--- a/imap/command.c ++++ b/imap/command.c +@@ -1011,6 +1011,13 @@ + opened */ + status->uidnext = oldun; + ++ /* Added to make the sidebar show the correct numbers */ ++ if (status->messages) ++ { ++ inc->msgcount = status->messages; ++ inc->msg_unread = status->unseen; ++ } ++ + FREE (&value); + return; + } +--- a/imap/imap.c ++++ b/imap/imap.c +@@ -1527,7 +1527,7 @@ + + imap_munge_mbox_name (munged, sizeof (munged), name); + snprintf (command, sizeof (command), +- "STATUS %s (UIDNEXT UIDVALIDITY UNSEEN RECENT)", munged); ++ "STATUS %s (UIDNEXT UIDVALIDITY UNSEEN RECENT MESSAGES)", munged); + + if (imap_exec (idata, command, IMAP_CMD_QUEUE) < 0) + { +--- a/init.h ++++ b/init.h +@@ -1965,6 +1965,22 @@ ** not used. ** (PGP only) */ + {"sidebar_delim", DT_STR, R_BOTH, UL &SidebarDelim, "|"}, + /* + ** .pp -+ ** This specifies the delimiter between the sidebar (if visible) and ++ ** This specifies the delimiter between the sidebar (if visible) and + ** other screens. + */ + { "sidebar_visible", DT_BOOL, R_BOTH, OPTSIDEBAR, 0 }, @@ -534,10 +520,8 @@ Index: mutt/init.h { "pgp_use_gpg_agent", DT_BOOL, R_NONE, OPTUSEGPGAGENT, 0}, /* ** .pp -Index: mutt/mailbox.h -=================================================================== ---- mutt.orig/mailbox.h 2009-06-24 19:37:58.000000000 +0200 -+++ mutt/mailbox.h 2009-06-25 12:36:53.000000000 +0200 +--- a/mailbox.h ++++ b/mailbox.h @@ -27,6 +27,7 @@ #define M_NEWFOLDER (1<<4) /* create a new folder - same as M_APPEND, but uses * safe_fopen() for mbox-style folders. @@ -546,24 +530,8 @@ Index: mutt/mailbox.h /* mx_open_new_message() */ #define M_ADD_FROM 1 /* add a From_ line */ -Index: mutt/Makefile.am -=================================================================== ---- mutt.orig/Makefile.am 2009-06-25 12:36:26.000000000 +0200 -+++ mutt/Makefile.am 2009-06-25 12:36:53.000000000 +0200 -@@ -29,7 +29,8 @@ - score.c send.c sendlib.c signal.c sort.c \ - status.c system.c thread.c charset.c history.c lib.c \ - muttlib.c editmsg.c mbyte.c \ -- url.c ascii.c crypt-mod.c crypt-mod.h -+ url.c ascii.c crypt-mod.c crypt-mod.h \ -+ sidebar.c - - nodist_mutt_SOURCES = $(BUILT_SOURCES) - -Index: mutt/mbox.c -=================================================================== ---- mutt.orig/mbox.c 2009-06-25 12:36:45.000000000 +0200 -+++ mutt/mbox.c 2009-06-25 12:36:53.000000000 +0200 +--- a/mbox.c ++++ b/mbox.c @@ -104,6 +104,7 @@ mutt_perror (ctx->path); return (-1); @@ -572,7 +540,7 @@ Index: mutt/mbox.c ctx->mtime = sb.st_mtime; ctx->size = sb.st_size; -@@ -259,6 +260,7 @@ +@@ -255,6 +256,7 @@ ctx->size = sb.st_size; ctx->mtime = sb.st_mtime; @@ -580,10 +548,8 @@ Index: mutt/mbox.c #ifdef NFS_ATTRIBUTE_HACK if (sb.st_mtime > sb.st_atime) -Index: mutt/menu.c -=================================================================== ---- mutt.orig/menu.c 2009-06-25 12:36:19.000000000 +0200 -+++ mutt/menu.c 2009-06-25 12:36:53.000000000 +0200 +--- a/menu.c ++++ b/menu.c @@ -24,6 +24,7 @@ #include "mutt_curses.h" #include "mutt_menu.h" @@ -678,7 +644,7 @@ Index: mutt/menu.c menu_make_entry (buf, sizeof (buf), menu, menu->current); menu_pad_string (buf, sizeof (buf)); -@@ -885,7 +887,7 @@ +@@ -884,7 +886,7 @@ if (option (OPTARROWCURSOR)) @@ -687,32 +653,50 @@ Index: mutt/menu.c else if (option (OPTBRAILLEFRIENDLY)) move (menu->current - menu->top + menu->offset, 0); else -Index: mutt/mutt_curses.h -=================================================================== ---- mutt.orig/mutt_curses.h 2009-06-24 19:37:58.000000000 +0200 -+++ mutt/mutt_curses.h 2009-06-25 12:36:53.000000000 +0200 -@@ -64,6 +64,7 @@ - #undef lines - #endif /* lines */ +--- a/mh.c ++++ b/mh.c +@@ -235,13 +235,37 @@ -+#define CLEARLINE_WIN(x) move(x,SidebarWidth), clrtoeol() - #define CLEARLINE(x) move(x,0), clrtoeol() - #define CENTERLINE(x,y) move(y, (COLS-strlen(x))/2), addstr(x) - #define BEEP() do { if (option (OPTBEEP)) beep(); } while (0) -@@ -126,6 +127,8 @@ - MT_COLOR_BOLD, - MT_COLOR_UNDERLINE, - MT_COLOR_INDEX, -+ MT_COLOR_NEW, -+ MT_COLOR_FLAGGED, - MT_COLOR_MAX - }; + if (mh_read_sequences (&mhs, path) < 0) + return 0; ++ + for (i = 0; !r && i <= mhs.max; i++) +- if (mhs_check (&mhs, i) & MH_SEQ_UNSEEN) ++ if (mhs_check (&mhs, i) & MH_SEQ_UNSEEN) { + r = 1; ++ } + mhs_free_sequences (&mhs); + return r; + } -Index: mutt/mutt.h -=================================================================== ---- mutt.orig/mutt.h 2009-06-25 12:36:26.000000000 +0200 -+++ mutt/mutt.h 2009-06-25 12:36:53.000000000 +0200 -@@ -425,6 +425,7 @@ ++void mh_buffy_update (const char *path, int *msgcount, int *msg_unread, int *msg_flagged) ++{ ++ int i; ++ struct mh_sequences mhs; ++ memset (&mhs, 0, sizeof (mhs)); ++ ++ if (mh_read_sequences (&mhs, path) < 0) ++ return; ++ ++ msgcount = 0; ++ msg_unread = 0; ++ msg_flagged = 0; ++ for (i = 0; i <= mhs.max; i++) ++ msgcount++; ++ if (mhs_check (&mhs, i) & MH_SEQ_UNSEEN) { ++ msg_unread++; ++ } ++ if (mhs_check (&mhs, i) & MH_SEQ_FLAGGED) ++ msg_flagged++; ++ mhs_free_sequences (&mhs); ++} ++ + static int mh_mkstemp (CONTEXT * dest, FILE ** fp, char **tgt) + { + int fd; +--- a/mutt.h ++++ b/mutt.h +@@ -431,6 +431,7 @@ OPTSAVEEMPTY, OPTSAVENAME, OPTSCORE, @@ -720,7 +704,7 @@ Index: mutt/mutt.h OPTSIGDASHES, OPTSIGONTOP, OPTSORTRE, -@@ -864,6 +865,7 @@ +@@ -874,6 +875,7 @@ { char *path; FILE *fp; @@ -728,7 +712,7 @@ Index: mutt/mutt.h time_t mtime; off_t size; off_t vsize; -@@ -904,6 +906,7 @@ +@@ -914,6 +916,7 @@ unsigned int quiet : 1; /* inhibit status messages? */ unsigned int collapsed : 1; /* are all threads collapsed? */ unsigned int closing : 1; /* mailbox is being closed */ @@ -736,11 +720,28 @@ Index: mutt/mutt.h /* driver hooks */ void *data; /* driver specific data */ -Index: mutt/muttlib.c -=================================================================== ---- mutt.orig/muttlib.c 2009-06-25 12:35:48.000000000 +0200 -+++ mutt/muttlib.c 2009-06-25 12:36:53.000000000 +0200 -@@ -1232,6 +1232,8 @@ +--- a/mutt_curses.h ++++ b/mutt_curses.h +@@ -64,6 +64,7 @@ + #undef lines + #endif /* lines */ + ++#define CLEARLINE_WIN(x) move(x,SidebarWidth), clrtoeol() + #define CLEARLINE(x) move(x,0), clrtoeol() + #define CENTERLINE(x,y) move(y, (COLS-strlen(x))/2), addstr(x) + #define BEEP() do { if (option (OPTBEEP)) beep(); } while (0) +@@ -126,6 +127,8 @@ + MT_COLOR_BOLD, + MT_COLOR_UNDERLINE, + MT_COLOR_INDEX, ++ MT_COLOR_NEW, ++ MT_COLOR_FLAGGED, + MT_COLOR_MAX + }; + +--- a/muttlib.c ++++ b/muttlib.c +@@ -1286,6 +1286,8 @@ pl = pw = 1; /* see if there's room to add content, else ignore */ @@ -749,7 +750,7 @@ Index: mutt/muttlib.c if ((col < COLS && wlen < destlen) || soft) { int pad; -@@ -1274,6 +1276,52 @@ +@@ -1329,6 +1331,52 @@ col += wid; src += pl; } @@ -802,10 +803,8 @@ Index: mutt/muttlib.c break; /* skip rest of input */ } else if (ch == '|') -Index: mutt/mx.c -=================================================================== ---- mutt.orig/mx.c 2009-06-25 12:36:45.000000000 +0200 -+++ mutt/mx.c 2009-06-25 12:36:53.000000000 +0200 +--- a/mx.c ++++ b/mx.c @@ -595,6 +595,7 @@ * M_APPEND open mailbox for appending * M_READONLY open mailbox in read-only mode @@ -839,29 +838,24 @@ Index: mutt/mx.c + { + ut.actime = ctx->atime; + ut.modtime = ctx->mtime; -+ utime (ctx->path, &ut); ++ utime (ctx->path, &ut); + } +#endif - if (ctx->mx_close) - ctx->mx_close (ctx); -Index: mutt/OPS -=================================================================== ---- mutt.orig/OPS 2009-06-25 12:36:14.000000000 +0200 -+++ mutt/OPS 2009-06-25 12:36:53.000000000 +0200 -@@ -179,3 +179,8 @@ - OP_MAIN_SHOW_LIMIT "show currently active limit pattern" - OP_MAIN_COLLAPSE_THREAD "collapse/uncollapse current thread" - OP_MAIN_COLLAPSE_ALL "collapse/uncollapse all threads" -+OP_SIDEBAR_SCROLL_UP "scroll the mailbox pane up 1 page" -+OP_SIDEBAR_SCROLL_DOWN "scroll the mailbox pane down 1 page" -+OP_SIDEBAR_NEXT "go down to next mailbox" -+OP_SIDEBAR_PREV "go to previous mailbox" -+OP_SIDEBAR_OPEN "open hilighted mailbox" -Index: mutt/pager.c -=================================================================== ---- mutt.orig/pager.c 2009-06-25 12:36:14.000000000 +0200 -+++ mutt/pager.c 2009-06-25 12:36:53.000000000 +0200 + /* never announce that a mailbox we've just left has new mail. #3290 + * XXX: really belongs in mx_close_mailbox, but this is a nice hook point */ +--- a/mx.h ++++ b/mx.h +@@ -61,6 +61,7 @@ + int mh_sync_mailbox (CONTEXT *, int *); + int mh_check_mailbox (CONTEXT *, int *); + int mh_buffy (const char *); ++void mh_buffy_update (const char *, int *, int *, int *); + int mh_check_empty (const char *); + + int maildir_read_dir (CONTEXT *); +--- a/pager.c ++++ b/pager.c @@ -29,6 +29,7 @@ #include "pager.h" #include "attach.h" @@ -870,16 +864,15 @@ Index: mutt/pager.c #include "mutt_crypt.h" -@@ -1071,6 +1072,8 @@ +@@ -1095,6 +1096,7 @@ + wchar_t wc; mbstate_t mbstate; - int wrap_cols = mutt_term_width ((flags & M_PAGER_NOWRAP) ? 0 : Wrap); -+ + wrap_cols -= SidebarWidth; - - /* FIXME: this should come from lineInfo */ - memset(&mbstate, 0, sizeof(mbstate)); -@@ -1717,7 +1720,7 @@ + + if (check_attachment_marker ((char *)buf) == 0) + wrap_cols = COLS; +@@ -1745,7 +1747,7 @@ if ((redraw & REDRAW_BODY) || topline != oldtopline) { do { @@ -888,7 +881,7 @@ Index: mutt/pager.c curline = oldtopline = topline; lines = 0; force_redraw = 0; -@@ -1730,6 +1733,7 @@ +@@ -1758,6 +1760,7 @@ &QuoteList, &q_level, &force_redraw, &SearchRE) > 0) lines++; curline++; @@ -896,7 +889,7 @@ Index: mutt/pager.c } last_offset = lineInfo[curline].offset; } while (force_redraw); -@@ -1743,6 +1747,7 @@ +@@ -1771,6 +1774,7 @@ addch ('~'); addch ('\n'); lines++; @@ -904,7 +897,7 @@ Index: mutt/pager.c } /* We are going to update the pager status bar, so it isn't * necessary to reset to normal color now. */ -@@ -1766,11 +1771,11 @@ +@@ -1794,21 +1798,21 @@ /* print out the pager status bar */ SETCOLOR (MT_COLOR_STATUS); BKGDSET (MT_COLOR_STATUS); @@ -914,20 +907,23 @@ Index: mutt/pager.c if (IsHeader (extra) || IsMsgAttach (extra)) { - size_t l1 = COLS * MB_LEN_MAX; -+ size_t l1 = (COLS-SidebarWidth) * MB_LEN_MAX; ++ size_t l1 = (COLS-SidebarWidth) * MB_LEN_MAX; size_t l2 = sizeof (buffer); hfi.hdr = (IsHeader (extra)) ? extra->hdr : extra->bdy->hdr; mutt_make_string_info (buffer, l1 < l2 ? l1 : l2, NONULL (PagerFmt), &hfi, M_FORMAT_MAKEPRINT); -@@ -1780,7 +1785,7 @@ +- mutt_paddstr (COLS, buffer); ++ mutt_paddstr (COLS-SidebarWidth, buffer); + } + else { char bn[STRING]; snprintf (bn, sizeof (bn), "%s (%s)", banner, pager_progress_str); - mutt_paddstr (COLS, bn); -+ mutt_paddstr (COLS, IsHeader (extra) || IsMsgAttach (extra) ? buffer : banner); ++ mutt_paddstr (COLS-SidebarWidth, bn); } BKGDSET (MT_COLOR_NORMAL); SETCOLOR (MT_COLOR_NORMAL); -@@ -1798,18 +1803,23 @@ +@@ -1826,18 +1830,23 @@ /* redraw the pager_index indicator, because the * flags for this message might have changed. */ menu_redraw_current (index); @@ -953,7 +949,7 @@ Index: mutt/pager.c redraw = 0; if (option(OPTBRAILLEFRIENDLY)) { -@@ -2742,6 +2752,13 @@ +@@ -2769,6 +2778,13 @@ mutt_what_key (); break; @@ -967,29 +963,27 @@ Index: mutt/pager.c default: ch = -1; break; -Index: mutt/sidebar.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ mutt/sidebar.c 2009-06-25 12:36:53.000000000 +0200 +--- /dev/null ++++ b/sidebar.c @@ -0,0 +1,333 @@ +/* + * Copyright (C) ????-2004 Justin Hibbits + * Copyright (C) 2004 Thomer M. Gil -+ * ++ * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. -+ * ++ * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. -+ * ++ * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. -+ */ ++ */ + + +#if HAVE_CONFIG_H @@ -1191,7 +1185,7 @@ Index: mutt/sidebar.c + if ( Incoming == 0 ) return 0; + lines = option(OPTHELP) ? 1 : 0; /* go back to the top */ + -+ if ( known_lines != LINES || TopBuffy == 0 || BottomBuffy == 0 ) ++ if ( known_lines != LINES || TopBuffy == 0 || BottomBuffy == 0 ) + calc_boundaries(menu); + if ( CurBuffy == 0 ) CurBuffy = Incoming; + @@ -1230,7 +1224,7 @@ Index: mutt/sidebar.c + tmp_folder_name = tmp->path + strlen(Maildir); + for (i = 0; i < strlen(tmp->path) - strlen(Maildir); i++) { + if (tmp_folder_name[i] == '/') sidebar_folder_depth++; -+ } ++ } + if (sidebar_folder_depth > 0) { + sidebar_folder_name = malloc(strlen(basename(tmp->path)) + sidebar_folder_depth + 1); + for (i=0; i < sidebar_folder_depth; i++) @@ -1305,29 +1299,27 @@ Index: mutt/sidebar.c + draw_sidebar(menu); +} + -Index: mutt/sidebar.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ mutt/sidebar.h 2009-06-25 12:36:53.000000000 +0200 +--- /dev/null ++++ b/sidebar.h @@ -0,0 +1,36 @@ +/* + * Copyright (C) ????-2004 Justin Hibbits + * Copyright (C) 2004 Thomer M. Gil -+ * ++ * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. -+ * ++ * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. -+ * ++ * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. -+ */ ++ */ + +#ifndef SIDEBAR_H +#define SIDEBAR_H @@ -1346,65 +1338,3 @@ Index: mutt/sidebar.h +void set_buffystats(CONTEXT*); + +#endif /* SIDEBAR_H */ -Index: mutt/doc/Muttrc -=================================================================== ---- mutt.orig/doc/Muttrc 2009-06-24 19:37:58.000000000 +0200 -+++ mutt/doc/Muttrc 2009-06-25 12:36:53.000000000 +0200 -@@ -657,6 +657,26 @@ - # $crypt_autosign, $crypt_replysign and $smime_is_default. - # - # -+# set sidebar_visible=no -+# -+# Name: sidebar_visible -+# Type: boolean -+# Default: no -+# -+# -+# This specifies whether or not to show sidebar (left-side list of folders). -+# -+# -+# set sidebar_width=0 -+# -+# Name: sidebar_width -+# Type: number -+# Default: 0 -+# -+# -+# The width of the sidebar. -+# -+# - # set crypt_autosign=no - # - # Name: crypt_autosign -Index: mutt/imap/imap.c -=================================================================== ---- mutt.orig/imap/imap.c 2009-06-24 19:37:58.000000000 +0200 -+++ mutt/imap/imap.c 2009-06-25 12:36:53.000000000 +0200 -@@ -1521,7 +1521,7 @@ - - imap_munge_mbox_name (munged, sizeof (munged), name); - snprintf (command, sizeof (command), -- "STATUS %s (UIDNEXT UIDVALIDITY UNSEEN RECENT)", munged); -+ "STATUS %s (UIDNEXT UIDVALIDITY UNSEEN RECENT MESSAGES)", munged); - - if (imap_exec (idata, command, IMAP_CMD_QUEUE) < 0) - { -Index: mutt/imap/command.c -=================================================================== ---- mutt.orig/imap/command.c 2009-06-24 19:37:58.000000000 +0200 -+++ mutt/imap/command.c 2009-06-25 12:36:53.000000000 +0200 -@@ -1009,6 +1009,13 @@ - opened */ - status->uidnext = oldun; - -+ /* Added to make the sidebar show the correct numbers */ -+ if (status->messages) -+ { -+ inc->msgcount = status->messages; -+ inc->msg_unread = status->unseen; -+ } -+ - FREE (&value); - return; - }