X-Git-Url: https://git.llucax.com/software/mutt-debian.git/blobdiff_plain/6bc7a34bda51d2a9a8d8406a249a2f8a51c321ec..1a21280253c153308c2fbc8240653bab016ccbd8:/debian/patches/mutt-patched/sidebar diff --git a/debian/patches/mutt-patched/sidebar b/debian/patches/mutt-patched/sidebar index e04d3db..42ff4e9 100644 --- a/debian/patches/mutt-patched/sidebar +++ b/debian/patches/mutt-patched/sidebar @@ -1,4 +1,3 @@ -# vim:ft=diff: This is the sidebar patch. When enabled, mutt will show a list of mailboxes with (new) message counts in a @@ -19,28 +18,28 @@ in the "mutt-patched" package. This specifies whether or not to show sidebar (left-side list of folders). sidebar_width (integer, default 0) - +- The width of the sidebar. * Patch source: - - http://lunar-linux.org/~tchan/mutt/patch-1.5.18.sidebar.20080517.txt + - http://www.lunar-linux.org/index.php?page=mutt-sidebar + - http://lunar-linux.org/~tchan/mutt/patch-1.5.19.sidebar.20090522.txt * Changes made: - - Fixed conflict with maildir-mtime patch [myon] + - 2008-08-02 myon: Refreshed patch using quilt push -f to remove hunks we do + not need (Makefile.in). -== END PATCH --- a/buffy.c +++ b/buffy.c -@@ -261,7 +261,7 @@ int mutt_buffy_check (int force) +@@ -292,6 +292,7 @@ char path[_POSIX_PATH_MAX]; struct stat contex_sb; time_t t; -- + CONTEXT *ctx; - #ifdef USE_IMAP - /* update postponed count as well, on force */ - if (force) -@@ -296,6 +296,8 @@ int mutt_buffy_check (int force) + + sb.st_size=0; + contex_sb.st_dev=0; +@@ -331,6 +332,8 @@ for (tmp = Incoming; tmp; tmp = tmp->next) { @@ -49,13 +48,13 @@ in the "mutt-patched" package. #ifdef USE_IMAP if (tmp->magic != M_IMAP) #endif -@@ -353,30 +355,51 @@ int mutt_buffy_check (int force) +@@ -388,10 +391,27 @@ case M_MBOX: case M_MMDF: - if (STAT_CHECK) + { -+ if (STAT_CHECK || tmp->msgcount == 0) ++ if (STAT_CHECK || tmp->msgcount == 0) { - BuffyCount++; - tmp->new = 1; @@ -76,23 +75,17 @@ in the "mutt-patched" package. + if(STAT_CHECK) { + tmp->has_new = tmp->new = 1; + BuffyCount++; -+ } ++ } } else if (option(OPTCHECKMBOXSIZE)) { - /* some other program has deleted mail from the folder */ - tmp->size = (long) sb.st_size; - } -- if (tmp->newly_created && -- (sb.st_ctime != sb.st_mtime || sb.st_ctime != sb.st_atime)) -- tmp->newly_created = 0; +@@ -401,35 +421,86 @@ + if (tmp->newly_created && + (sb.st_ctime != sb.st_mtime || sb.st_ctime != sb.st_atime)) + tmp->newly_created = 0; - -- break; -+ if (tmp->newly_created && -+ (sb.st_ctime != sb.st_mtime || sb.st_ctime != sb.st_atime)) -+ tmp->newly_created = 0; + } -+ break; + break; case M_MAILDIR: @@ -103,22 +96,19 @@ in the "mutt-patched" package. tmp->magic = 0; break; } -+ tmp->msgcount = 0; -+ tmp->msg_unread = 0; -+ tmp->msg_flagged = 0; ++ tmp->msgcount = 0; ++ tmp->msg_unread = 0; ++ tmp->msg_flagged = 0; while ((de = readdir (dirp)) != NULL) { char *p; -@@ -385,12 +408,36 @@ int mutt_buffy_check (int force) + if (*de->d_name != '.' && + (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T'))) { - if (!tmp->new) - { -- /* one new and undeleted message is enough */ -- BuffyCount++; -- tmp->new = 1; -- -- if (! option (OPTMAILDIRMTIME)) /* prevent stat calls */ -- break; +- /* one new and undeleted message is enough */ +- BuffyCount++; +- tmp->new = 1; +- break; + tmp->has_new = tmp->new = 1; + tmp->msgcount++; + tmp->msg_unread++; @@ -126,9 +116,9 @@ in the "mutt-patched" package. + } + if(tmp->msg_unread) + BuffyCount++; -+ ++ + closedir (dirp); -+ ++ + /* + * count read messages (for folderlist (sidebar) we also need to count + * messages in cur so that we the total number of messages @@ -142,28 +132,29 @@ in the "mutt-patched" package. + while ((de = readdir (dirp)) != NULL) + { + char *p; -+ if (*de->d_name != '.' && -+ (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T'))) -+ { -+ tmp->msgcount++; -+ if (p && strchr(p + 3, 'F')) { -+ tmp->msg_flagged++; -+ } - } - snprintf (path, sizeof (path), "%s/new/%s", tmp->path, de->d_name); - if (!stat (path, &smd) && smd.st_mtime > tmp->mtime) -@@ -403,8 +450,25 @@ int mutt_buffy_check (int force) ++ 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); break; case M_MH: -- if ((tmp->new = mh_buffy (tmp->path)) > 0) -- BuffyCount++; + { + DIR *dp; + struct dirent *de; -+ if ((tmp->new = mh_buffy (tmp->path)) > 0) -+ BuffyCount++; -+ + if ((tmp->new = mh_buffy (tmp->path)) > 0) + BuffyCount++; ++ + if ((dp = opendir (path)) == NULL) + break; + tmp->msgcount = 0; @@ -182,12 +173,11 @@ in the "mutt-patched" package. } --- a/buffy.h +++ b/buffy.h -@@ -25,8 +25,13 @@ typedef struct buffy_t - char *path; - long size; +@@ -25,7 +25,12 @@ + char path[_POSIX_PATH_MAX]; + off_t size; struct buffy_t *next; + struct buffy_t *prev; - time_t mtime; /* for maildirs...time of newest entry */ short new; /* mailbox has new mail */ + short has_new; /* set it new if new and not read */ + int msgcount; /* total number of messages */ @@ -198,7 +188,7 @@ in the "mutt-patched" package. short newly_created; /* mbox or mmdf just popped into existence */ --- a/color.c +++ b/color.c -@@ -93,6 +93,8 @@ static struct mapping_t Fields[] = +@@ -93,6 +93,8 @@ { "bold", MT_COLOR_BOLD }, { "underline", MT_COLOR_UNDERLINE }, { "index", MT_COLOR_INDEX }, @@ -209,7 +199,7 @@ in the "mutt-patched" package. --- a/compose.c +++ b/compose.c -@@ -72,7 +72,7 @@ enum +@@ -72,7 +72,7 @@ #define HDR_XOFFSET 10 #define TITLE_FMT "%10s" /* Used for Prompts, which are ASCII */ @@ -218,7 +208,7 @@ in the "mutt-patched" package. static char *Prompts[] = { -@@ -115,16 +115,16 @@ static void redraw_crypt_lines (HEADER * +@@ -115,16 +115,16 @@ if ((WithCrypto & APPLICATION_PGP) && (WithCrypto & APPLICATION_SMIME)) { if (!msg->security) @@ -240,7 +230,7 @@ in the "mutt-patched" package. else return; -@@ -148,7 +148,7 @@ static void redraw_crypt_lines (HEADER * +@@ -148,7 +148,7 @@ } clrtoeol (); @@ -249,7 +239,7 @@ in the "mutt-patched" package. clrtoeol (); if ((WithCrypto & APPLICATION_PGP) && msg->security & APPLICATION_PGP && msg->security & SIGN) -@@ -164,7 +164,7 @@ static void redraw_crypt_lines (HEADER * +@@ -164,7 +164,7 @@ && (msg->security & ENCRYPT) && SmimeCryptAlg && *SmimeCryptAlg) { @@ -258,7 +248,7 @@ in the "mutt-patched" package. NONULL(SmimeCryptAlg)); off = 20; } -@@ -178,7 +178,7 @@ static void redraw_mix_line (LIST *chain +@@ -178,7 +178,7 @@ int c; char *t; @@ -267,7 +257,7 @@ in the "mutt-patched" package. if (!chain) { -@@ -193,7 +193,7 @@ static void redraw_mix_line (LIST *chain +@@ -193,7 +193,7 @@ if (t && t[0] == '0' && t[1] == '\0') t = ""; @@ -276,7 +266,7 @@ in the "mutt-patched" package. break; addstr (NONULL(t)); -@@ -245,7 +245,7 @@ static void draw_envelope_addr (int line +@@ -245,7 +245,7 @@ buf[0] = 0; rfc822_write_address (buf, sizeof (buf), addr, 1); @@ -285,7 +275,7 @@ in the "mutt-patched" package. mutt_paddstr (W, buf); } -@@ -255,10 +255,10 @@ static void draw_envelope (HEADER *msg, +@@ -255,10 +255,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); @@ -298,7 +288,7 @@ in the "mutt-patched" package. mutt_paddstr (W, fcc); if (WithCrypto) -@@ -269,7 +269,7 @@ static void draw_envelope (HEADER *msg, +@@ -269,7 +269,7 @@ #endif SETCOLOR (MT_COLOR_STATUS); @@ -307,7 +297,7 @@ in the "mutt-patched" package. BKGDSET (MT_COLOR_STATUS); clrtoeol (); -@@ -307,7 +307,7 @@ static int edit_address_list (int line, +@@ -307,7 +307,7 @@ /* redraw the expanded list so the user can see the result */ buf[0] = 0; rfc822_write_address (buf, sizeof (buf), *addr, 1); @@ -316,7 +306,7 @@ in the "mutt-patched" package. mutt_paddstr (W, buf); return 0; -@@ -553,7 +553,7 @@ int mutt_compose_menu (HEADER *msg, /* +@@ -552,7 +552,7 @@ if (mutt_get_field ("Subject: ", buf, sizeof (buf), 0) == 0) { mutt_str_replace (&msg->env->subject, buf); @@ -325,10 +315,10 @@ in the "mutt-patched" package. clrtoeol (); if (msg->env->subject) mutt_paddstr (W, msg->env->subject); -@@ -570,7 +570,7 @@ int mutt_compose_menu (HEADER *msg, /* +@@ -569,7 +569,7 @@ { - strfcpy (fcc, buf, _POSIX_PATH_MAX); - mutt_pretty_mailbox (fcc); + strfcpy (fcc, buf, fcclen); + mutt_pretty_mailbox (fcc, fcclen); - move (HDR_FCC, HDR_XOFFSET); + move (HDR_FCC, HDR_XOFFSET + SidebarWidth); mutt_paddstr (W, fcc); @@ -336,15 +326,17 @@ in the "mutt-patched" package. } --- a/curs_main.c +++ b/curs_main.c -@@ -29,6 +29,7 @@ +@@ -26,7 +26,9 @@ + #include "mailbox.h" + #include "mapping.h" #include "sort.h" - #include "buffy.h" ++#include "buffy.h" #include "mx.h" +#include "sidebar.h" #ifdef USE_POP #include "pop.h" -@@ -544,8 +545,12 @@ int mutt_index_menu (void) +@@ -536,8 +538,12 @@ menu->redraw |= REDRAW_STATUS; if (do_buffy_notify) { @@ -359,7 +351,7 @@ in the "mutt-patched" package. } else do_buffy_notify = 1; -@@ -557,6 +562,7 @@ int mutt_index_menu (void) +@@ -549,6 +555,7 @@ if (menu->redraw & REDRAW_FULL) { menu_redraw_full (menu); @@ -367,9 +359,9 @@ in the "mutt-patched" package. mutt_show_error (); } -@@ -579,10 +585,13 @@ int mutt_index_menu (void) +@@ -571,10 +578,13 @@ - if (menu->redraw & REDRAW_STATUS) + if (menu->redraw & REDRAW_STATUS) { + DrawFullLine = 1; menu_status_line (buf, sizeof (buf), menu, NONULL (Status)); @@ -381,7 +373,7 @@ in the "mutt-patched" package. mutt_paddstr (COLS, buf); SETCOLOR (MT_COLOR_NORMAL); BKGDSET (MT_COLOR_NORMAL); -@@ -603,7 +612,7 @@ int mutt_index_menu (void) +@@ -595,7 +605,7 @@ menu->oldcurrent = -1; if (option (OPTARROWCURSOR)) @@ -390,15 +382,15 @@ in the "mutt-patched" package. else if (option (OPTBRAILLEFRIENDLY)) move (menu->current - menu->top + menu->offset, 0); else -@@ -1072,6 +1081,7 @@ int mutt_index_menu (void) +@@ -1075,6 +1085,7 @@ menu->redraw = REDRAW_FULL; break; + case OP_SIDEBAR_OPEN: case OP_MAIN_CHANGE_FOLDER: case OP_MAIN_NEXT_UNREAD_MAILBOX: - -@@ -1103,7 +1113,11 @@ int mutt_index_menu (void) + +@@ -1106,7 +1117,11 @@ { mutt_buffy (buf, sizeof (buf)); @@ -406,12 +398,12 @@ in the "mutt-patched" package. + 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) { -@@ -1121,6 +1135,7 @@ int mutt_index_menu (void) +@@ -1124,6 +1139,7 @@ } mutt_expand_path (buf, sizeof (buf)); @@ -419,7 +411,7 @@ in the "mutt-patched" package. if (mx_get_magic (buf) <= 0) { mutt_error (_("%s is not a mailbox."), buf); -@@ -2213,6 +2228,12 @@ int mutt_index_menu (void) +@@ -2216,6 +2232,12 @@ mutt_what_key(); break; @@ -443,9 +435,9 @@ in the "mutt-patched" package. #include "mx.h" +#include "sidebar.h" - #ifdef USE_IMAP - #include "imap_private.h" -@@ -294,6 +296,7 @@ void _mutt_set_flag (CONTEXT *ctx, HEADE + void _mutt_set_flag (CONTEXT *ctx, HEADER *h, int flag, int bf, int upd_ctx) + { +@@ -290,6 +292,7 @@ */ if (h->searched && (changed != h->changed || deleted != ctx->deleted || tagged != ctx->tagged || flagged != ctx->flagged)) h->searched = 0; @@ -455,7 +447,7 @@ in the "mutt-patched" package. void mutt_tag_set_flag (int flag, int bf) --- a/functions.h +++ b/functions.h -@@ -169,6 +169,11 @@ struct binding_t OpMain[] = { /* map: in +@@ -169,6 +169,11 @@ { "decrypt-save", OP_DECRYPT_SAVE, NULL }, @@ -467,9 +459,9 @@ in the "mutt-patched" package. { NULL, 0, NULL } }; -@@ -267,6 +272,11 @@ struct binding_t OpPager[] = { /* map: p - { "decrypt-save", OP_DECRYPT_SAVE, NULL }, +@@ -270,6 +275,11 @@ + { "what-key", OP_WHAT_KEY, NULL }, + { "sidebar-scroll-up", OP_SIDEBAR_SCROLL_UP, NULL }, + { "sidebar-scroll-down", OP_SIDEBAR_SCROLL_DOWN, NULL }, @@ -481,7 +473,7 @@ in the "mutt-patched" package. --- a/globals.h +++ b/globals.h -@@ -116,6 +116,7 @@ WHERE char *Realname; +@@ -117,6 +117,7 @@ WHERE char *SendCharset; WHERE char *Sendmail; WHERE char *Shell; @@ -489,7 +481,7 @@ in the "mutt-patched" package. WHERE char *Signature; WHERE char *SimpleSearch; #if USE_SMTP -@@ -212,6 +213,9 @@ WHERE short ScoreThresholdDelete; +@@ -209,6 +210,9 @@ WHERE short ScoreThresholdRead; WHERE short ScoreThresholdFlag; @@ -498,17 +490,17 @@ in the "mutt-patched" package. +WHERE short SidebarWidth; #ifdef USE_IMAP WHERE short ImapKeepalive; - #endif + WHERE short ImapPipelineDepth; --- a/init.h +++ b/init.h -@@ -1532,6 +1532,22 @@ struct option_t MuttVars[] = { - ** you may unset this setting. - ** (Crypto only) +@@ -1963,6 +1963,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 }, @@ -536,19 +528,19 @@ in the "mutt-patched" package. #define M_ADD_FROM 1 /* add a From_ line */ --- a/Makefile.am +++ b/Makefile.am -@@ -29,7 +29,8 @@ mutt_SOURCES = \ +@@ -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 mutt_idna.c crypt-mod.c crypt-mod.h -+ url.c ascii.c mutt_idna.c crypt-mod.c crypt-mod.h \ +- 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) --- a/mbox.c +++ b/mbox.c -@@ -104,6 +104,7 @@ int mmdf_parse_mailbox (CONTEXT *ctx) +@@ -104,6 +104,7 @@ mutt_perror (ctx->path); return (-1); } @@ -556,7 +548,7 @@ in the "mutt-patched" package. ctx->mtime = sb.st_mtime; ctx->size = sb.st_size; -@@ -259,6 +260,7 @@ int mbox_parse_mailbox (CONTEXT *ctx) +@@ -259,6 +260,7 @@ ctx->size = sb.st_size; ctx->mtime = sb.st_mtime; @@ -572,9 +564,9 @@ in the "mutt-patched" package. #include "mbyte.h" +#include "sidebar.h" - #ifdef USE_IMAP - #include "imap.h" -@@ -158,7 +159,7 @@ void menu_pad_string (char *s, size_t n) + #include + #include +@@ -156,7 +157,7 @@ { char *scratch = safe_strdup (s); int shift = option (OPTARROWCURSOR) ? 3 : 0; @@ -583,7 +575,7 @@ in the "mutt-patched" package. mutt_format_string (s, n, cols, cols, FMT_LEFT, ' ', scratch, mutt_strlen (scratch), 1); s[n - 1] = 0; -@@ -209,6 +210,7 @@ void menu_redraw_index (MUTTMENU *menu) +@@ -207,6 +208,7 @@ char buf[LONG_STRING]; int i; @@ -591,7 +583,7 @@ in the "mutt-patched" package. for (i = menu->top; i < menu->top + menu->pagelen; i++) { if (i < menu->max) -@@ -219,7 +221,7 @@ void menu_redraw_index (MUTTMENU *menu) +@@ -217,7 +219,7 @@ if (option (OPTARROWCURSOR)) { attrset (menu->color (i)); @@ -600,7 +592,7 @@ in the "mutt-patched" package. if (i == menu->current) { -@@ -248,14 +250,14 @@ void menu_redraw_index (MUTTMENU *menu) +@@ -246,14 +248,14 @@ BKGDSET (MT_COLOR_INDICATOR); } @@ -617,7 +609,7 @@ in the "mutt-patched" package. } menu->redraw = 0; } -@@ -270,7 +272,7 @@ void menu_redraw_motion (MUTTMENU *menu) +@@ -268,7 +270,7 @@ return; } @@ -626,7 +618,7 @@ in the "mutt-patched" package. SETCOLOR (MT_COLOR_NORMAL); BKGDSET (MT_COLOR_NORMAL); -@@ -285,13 +287,13 @@ void menu_redraw_motion (MUTTMENU *menu) +@@ -283,13 +285,13 @@ clrtoeol (); menu_make_entry (buf, sizeof (buf), menu, menu->oldcurrent); menu_pad_string (buf, sizeof (buf)); @@ -642,7 +634,7 @@ in the "mutt-patched" package. attrset (menu->color (menu->current)); ADDCOLOR (MT_COLOR_INDICATOR); addstr ("->"); -@@ -312,7 +314,7 @@ void menu_redraw_motion (MUTTMENU *menu) +@@ -310,7 +312,7 @@ attrset (menu->color (menu->current)); ADDCOLOR (MT_COLOR_INDICATOR); BKGDSET (MT_COLOR_INDICATOR); @@ -651,7 +643,7 @@ in the "mutt-patched" package. print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 0); SETCOLOR (MT_COLOR_NORMAL); BKGDSET (MT_COLOR_NORMAL); -@@ -324,7 +326,7 @@ void menu_redraw_current (MUTTMENU *menu +@@ -322,7 +324,7 @@ { char buf[LONG_STRING]; @@ -660,7 +652,7 @@ in the "mutt-patched" package. menu_make_entry (buf, sizeof (buf), menu, menu->current); menu_pad_string (buf, sizeof (buf)); -@@ -871,7 +873,7 @@ int mutt_menuLoop (MUTTMENU *menu) +@@ -885,7 +887,7 @@ if (option (OPTARROWCURSOR)) @@ -679,7 +671,7 @@ in the "mutt-patched" package. #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 @@ enum +@@ -126,6 +127,8 @@ MT_COLOR_BOLD, MT_COLOR_UNDERLINE, MT_COLOR_INDEX, @@ -690,7 +682,7 @@ in the "mutt-patched" package. --- a/mutt.h +++ b/mutt.h -@@ -437,6 +437,7 @@ enum +@@ -426,6 +426,7 @@ OPTSAVEEMPTY, OPTSAVENAME, OPTSCORE, @@ -698,7 +690,7 @@ in the "mutt-patched" package. OPTSIGDASHES, OPTSIGONTOP, OPTSORTRE, -@@ -874,6 +875,7 @@ typedef struct _context +@@ -865,6 +866,7 @@ { char *path; FILE *fp; @@ -706,7 +698,7 @@ in the "mutt-patched" package. time_t mtime; off_t size; off_t vsize; -@@ -914,6 +916,7 @@ typedef struct _context +@@ -905,6 +907,7 @@ unsigned int quiet : 1; /* inhibit status messages? */ unsigned int collapsed : 1; /* are all threads collapsed? */ unsigned int closing : 1; /* mailbox is being closed */ @@ -716,7 +708,7 @@ in the "mutt-patched" package. void *data; /* driver specific data */ --- a/muttlib.c +++ b/muttlib.c -@@ -1205,6 +1205,8 @@ void mutt_FormatString (char *dest, /* +@@ -1232,6 +1232,8 @@ pl = pw = 1; /* see if there's room to add content, else ignore */ @@ -725,7 +717,7 @@ in the "mutt-patched" package. if ((col < COLS && wlen < destlen) || soft) { int pad; -@@ -1247,6 +1249,52 @@ void mutt_FormatString (char *dest, /* +@@ -1274,6 +1276,52 @@ col += wid; src += pl; } @@ -780,7 +772,7 @@ in the "mutt-patched" package. else if (ch == '|') --- a/mx.c +++ b/mx.c -@@ -626,6 +626,7 @@ static int mx_open_mailbox_append (CONTE +@@ -596,6 +596,7 @@ * M_APPEND open mailbox for appending * M_READONLY open mailbox in read-only mode * M_QUIET only print error messages @@ -788,7 +780,7 @@ in the "mutt-patched" package. * ctx if non-null, context struct to use */ CONTEXT *mx_open_mailbox (const char *path, int flags, CONTEXT *pctx) -@@ -648,6 +649,8 @@ CONTEXT *mx_open_mailbox (const char *pa +@@ -618,6 +619,8 @@ ctx->quiet = 1; if (flags & M_READONLY) ctx->readonly = 1; @@ -797,7 +789,7 @@ in the "mutt-patched" package. if (flags & (M_APPEND|M_NEWFOLDER)) { -@@ -752,9 +755,21 @@ CONTEXT *mx_open_mailbox (const char *pa +@@ -722,9 +725,21 @@ void mx_fastclose_mailbox (CONTEXT *ctx) { int i; @@ -813,7 +805,7 @@ in the "mutt-patched" package. + { + ut.actime = ctx->atime; + ut.modtime = ctx->mtime; -+ utime (ctx->path, &ut); ++ utime (ctx->path, &ut); + } +#endif @@ -821,7 +813,7 @@ in the "mutt-patched" package. ctx->mx_close (ctx); --- a/OPS +++ b/OPS -@@ -179,3 +179,8 @@ OP_WHAT_KEY "display the keycode for a k +@@ -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" @@ -832,15 +824,15 @@ in the "mutt-patched" package. +OP_SIDEBAR_OPEN "open hilighted mailbox" --- a/pager.c +++ b/pager.c -@@ -30,6 +30,7 @@ +@@ -29,6 +29,7 @@ #include "pager.h" #include "attach.h" #include "mbyte.h" +#include "sidebar.h" - void set_xterm_title_bar(char *title); - void set_xterm_icon_name(char *name); -@@ -1069,6 +1070,8 @@ static int format_line (struct line_t ** + #include "mutt_crypt.h" + +@@ -1071,6 +1072,8 @@ mbstate_t mbstate; int wrap_cols = mutt_term_width ((flags & M_PAGER_NOWRAP) ? 0 : Wrap); @@ -849,7 +841,7 @@ in the "mutt-patched" package. /* FIXME: this should come from lineInfo */ memset(&mbstate, 0, sizeof(mbstate)); -@@ -1702,7 +1705,7 @@ mutt_pager (const char *banner, const ch +@@ -1717,7 +1720,7 @@ if ((redraw & REDRAW_BODY) || topline != oldtopline) { do { @@ -858,7 +850,7 @@ in the "mutt-patched" package. curline = oldtopline = topline; lines = 0; force_redraw = 0; -@@ -1715,6 +1718,7 @@ mutt_pager (const char *banner, const ch +@@ -1730,6 +1733,7 @@ &QuoteList, &q_level, &force_redraw, &SearchRE) > 0) lines++; curline++; @@ -866,7 +858,7 @@ in the "mutt-patched" package. } last_offset = lineInfo[curline].offset; } while (force_redraw); -@@ -1728,6 +1732,7 @@ mutt_pager (const char *banner, const ch +@@ -1743,6 +1747,7 @@ addch ('~'); addch ('\n'); lines++; @@ -874,34 +866,30 @@ in the "mutt-patched" package. } /* We are going to update the pager status bar, so it isn't * necessary to reset to normal color now. */ -@@ -1751,22 +1756,22 @@ mutt_pager (const char *banner, const ch +@@ -1766,11 +1771,11 @@ /* print out the pager status bar */ SETCOLOR (MT_COLOR_STATUS); BKGDSET (MT_COLOR_STATUS); - CLEARLINE (statusoffset); + CLEARLINE_WIN (statusoffset); - if (IsHeader (extra)) + + 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 = extra->hdr; + hfi.hdr = (IsHeader (extra)) ? extra->hdr : extra->bdy->hdr; mutt_make_string_info (buffer, l1 < l2 ? l1 : l2, NONULL (PagerFmt), &hfi, M_FORMAT_MAKEPRINT); - } - else if (IsMsgAttach (extra)) +@@ -1780,7 +1785,7 @@ { -- size_t l1 = COLS * MB_LEN_MAX; -+ size_t l1 = (COLS-SidebarWidth) * MB_LEN_MAX; - size_t l2 = sizeof (buffer); - hfi.hdr = extra->bdy->hdr; - mutt_make_string_info (buffer, l1 < l2 ? l1 : l2, NONULL (PagerFmt), &hfi, M_FORMAT_MAKEPRINT); + 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, IsHeader (extra) || IsMsgAttach (extra) ? buffer : banner); -+ mutt_paddstr (COLS-SidebarWidth, IsHeader (extra) || IsMsgAttach (extra) ? buffer : banner); BKGDSET (MT_COLOR_NORMAL); SETCOLOR (MT_COLOR_NORMAL); - if (option(OPTXTERMSETTITLES)) -@@ -1783,18 +1788,23 @@ mutt_pager (const char *banner, const ch +@@ -1798,18 +1803,23 @@ /* redraw the pager_index indicator, because the * flags for this message might have changed. */ menu_redraw_current (index); @@ -927,9 +915,9 @@ in the "mutt-patched" package. redraw = 0; if (option(OPTBRAILLEFRIENDLY)) { -@@ -2673,6 +2683,13 @@ search_next: - redraw = REDRAW_FULL; - break; +@@ -2742,6 +2752,13 @@ + mutt_what_key (); + break; + case OP_SIDEBAR_SCROLL_UP: + case OP_SIDEBAR_SCROLL_DOWN: @@ -943,25 +931,25 @@ in the "mutt-patched" package. break; --- /dev/null +++ b/sidebar.c -@@ -0,0 +1,328 @@ +@@ -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 @@ -1083,8 +1071,6 @@ in the "mutt-patched" package. +int draw_sidebar(int menu) { + + int lines = option(OPTHELP) ? 1 : 0; -+ int sidebar_folder_depth; -+ char *sidebar_folder_name; + BUFFY *tmp; +#ifndef USE_SLANG_CURSES + attr_t attrs; @@ -1165,7 +1151,7 @@ in the "mutt-patched" package. + 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; + @@ -1189,28 +1175,35 @@ in the "mutt-patched" package. + tmp->msgcount = Context->msgcount; + tmp->msg_flagged = Context->flagged; + } -+ sidebar_folder_depth = 0; -+ sidebar_folder_name = ""; // ... just in case -+ if ( strlen(tmp->path) > strlen(Maildir) ) { -+ int i; -+ char *tmp_folder_name; -+ 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++) -+ sidebar_folder_name[i]=' '; -+ sidebar_folder_name[i]=0; -+ strncat(sidebar_folder_name, basename(tmp->path), strlen(basename(tmp->path)) + sidebar_folder_depth); ++ // check whether Maildir is a prefix of the current folder's path ++ short maildir_is_prefix = 0; ++ if ( (strlen(tmp->path) > strlen(Maildir)) && ++ (strncmp(Maildir, tmp->path, strlen(Maildir)) == 0) ) ++ maildir_is_prefix = 1; ++ // calculate depth of current folder and generate its display name with indented spaces ++ int sidebar_folder_depth = 0; ++ char *sidebar_folder_name; ++ sidebar_folder_name = basename(tmp->path); ++ if ( maildir_is_prefix ) { ++ char *tmp_folder_name; ++ int i; ++ 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++) ++ sidebar_folder_name[i]=' '; ++ sidebar_folder_name[i]=0; ++ strncat(sidebar_folder_name, basename(tmp->path), strlen(basename(tmp->path)) + sidebar_folder_depth); ++ } + } -+ } else sidebar_folder_name = "INBOX"; -+ printw( "%.*s", SidebarWidth - delim_len + 1, -+ make_sidebar_entry(sidebar_folder_name, tmp->msgcount, -+ tmp->msg_unread, tmp->msg_flagged)); -+ if (sidebar_folder_depth > 0) -+ free(sidebar_folder_name); ++ printw( "%.*s", SidebarWidth - delim_len + 1, ++ make_sidebar_entry(sidebar_folder_name, tmp->msgcount, ++ tmp->msg_unread, tmp->msg_flagged)); ++ if (sidebar_folder_depth > 0) ++ free(sidebar_folder_name); + lines++; + } + SETCOLOR(MT_COLOR_NORMAL); @@ -1278,21 +1271,21 @@ in the "mutt-patched" package. +/* + * 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 @@ -1313,8 +1306,8 @@ in the "mutt-patched" package. +#endif /* SIDEBAR_H */ --- a/doc/Muttrc +++ b/doc/Muttrc -@@ -2085,6 +2085,26 @@ attachments -I message/external-body - # function. +@@ -657,6 +657,26 @@ + # $crypt_autosign, $crypt_replysign and $smime_is_default. # # +# set sidebar_visible=no @@ -1322,38 +1315,38 @@ in the "mutt-patched" package. +# 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 --- a/imap/imap.c +++ b/imap/imap.c -@@ -1484,7 +1484,7 @@ int imap_buffy_check (int force) +@@ -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_cmd_queue (idata, command) < 0) + if (imap_exec (idata, command, IMAP_CMD_QUEUE) < 0) { --- a/imap/command.c +++ b/imap/command.c -@@ -911,6 +911,13 @@ static void cmd_parse_status (IMAP_DATA* +@@ -1009,6 +1009,13 @@ opened */ status->uidnext = oldun; @@ -1367,7 +1360,3 @@ in the "mutt-patched" package. FREE (&value); return; } ---- a/PATCHES -+++ b/PATCHES -@@ -0,0 +1 @@ -+patch-1.5.18.sidebar.20080517.txt