Fri, 07 Sep 2012 19:08:07 +0200
Correct build configuration in Solaris subdir, correct english grammar,
remove irrelevant strip notice, introduce custom CFLAG logic, facilitate
use of Solaris Studio compiler with needed build configuration
adjustments, conditionally build 64 bit position independent code,
and accommodate tun(7) in newer Solaris releases by renaming driver
and module from conflicting 'tun' to 'vtun'. These changes include
some nonstandard 'I give up' logic causing out of tree builds by
manipulating the PATH, for example.
michael@478 | 1 | The Mutt "sidebar" patch as taken over by Debian for Mutt 1.5.21 |
michael@478 | 2 | but with the patches for Makefile.in applied again. |
michael@478 | 3 | |
michael@478 | 4 | Index: Makefile.am |
michael@478 | 5 | --- Makefile.am.orig 2010-08-24 18:34:21.000000000 +0200 |
michael@478 | 6 | +++ Makefile.am 2011-01-17 19:33:57.000000000 +0100 |
michael@478 | 7 | @@ -33,7 +33,7 @@ |
michael@478 | 8 | score.c send.c sendlib.c signal.c sort.c \ |
michael@478 | 9 | status.c system.c thread.c charset.c history.c lib.c \ |
michael@478 | 10 | muttlib.c editmsg.c mbyte.c \ |
michael@478 | 11 | - url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c |
michael@478 | 12 | + url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c sidebar.c |
michael@478 | 13 | |
michael@478 | 14 | nodist_mutt_SOURCES = $(BUILT_SOURCES) |
michael@478 | 15 | |
michael@478 | 16 | Index: Makefile.in |
michael@478 | 17 | --- Makefile.in.orig 2010-08-25 18:31:48.000000000 +0200 |
michael@478 | 18 | +++ Makefile.in 2011-01-17 19:33:57.000000000 +0100 |
michael@478 | 19 | @@ -85,7 +85,7 @@ |
michael@478 | 20 | system.$(OBJEXT) thread.$(OBJEXT) charset.$(OBJEXT) \ |
michael@478 | 21 | history.$(OBJEXT) lib.$(OBJEXT) muttlib.$(OBJEXT) \ |
michael@478 | 22 | editmsg.$(OBJEXT) mbyte.$(OBJEXT) url.$(OBJEXT) \ |
michael@478 | 23 | - ascii.$(OBJEXT) crypt-mod.$(OBJEXT) safe_asprintf.$(OBJEXT) |
michael@478 | 24 | + ascii.$(OBJEXT) crypt-mod.$(OBJEXT) safe_asprintf.$(OBJEXT) sidebar.$(OBJEXT) |
michael@478 | 25 | am__objects_1 = |
michael@478 | 26 | am__objects_2 = patchlist.$(OBJEXT) $(am__objects_1) |
michael@478 | 27 | nodist_mutt_OBJECTS = $(am__objects_2) |
michael@478 | 28 | @@ -359,7 +359,7 @@ |
michael@478 | 29 | score.c send.c sendlib.c signal.c sort.c \ |
michael@478 | 30 | status.c system.c thread.c charset.c history.c lib.c \ |
michael@478 | 31 | muttlib.c editmsg.c mbyte.c \ |
michael@478 | 32 | - url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c |
michael@478 | 33 | + url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c sidebar.c |
michael@478 | 34 | |
michael@478 | 35 | nodist_mutt_SOURCES = $(BUILT_SOURCES) |
michael@478 | 36 | mutt_LDADD = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAP) $(MUTTLIBS) \ |
michael@478 | 37 | @@ -391,7 +391,7 @@ |
michael@478 | 38 | README.SSL smime.h group.h \ |
michael@478 | 39 | muttbug pgppacket.h depcomp ascii.h BEWARE PATCHES patchlist.sh \ |
michael@478 | 40 | ChangeLog mkchangelog.sh mutt_idna.h \ |
michael@478 | 41 | - snprintf.c regex.c crypt-gpgme.h hcachever.sh.in |
michael@478 | 42 | + snprintf.c regex.c crypt-gpgme.h sidebar.h hcachever.sh.in |
michael@478 | 43 | |
michael@478 | 44 | EXTRA_SCRIPTS = smime_keys |
michael@478 | 45 | mutt_dotlock_SOURCES = mutt_dotlock.c |
michael@478 | 46 | Index: OPS |
michael@478 | 47 | --- OPS.orig 2010-03-01 18:56:19.000000000 +0100 |
michael@478 | 48 | +++ OPS 2011-01-17 19:33:15.000000000 +0100 |
michael@478 | 49 | @@ -179,3 +179,8 @@ |
michael@478 | 50 | OP_MAIN_SHOW_LIMIT "show currently active limit pattern" |
michael@478 | 51 | OP_MAIN_COLLAPSE_THREAD "collapse/uncollapse current thread" |
michael@478 | 52 | OP_MAIN_COLLAPSE_ALL "collapse/uncollapse all threads" |
michael@478 | 53 | +OP_SIDEBAR_SCROLL_UP "scroll the mailbox pane up 1 page" |
michael@478 | 54 | +OP_SIDEBAR_SCROLL_DOWN "scroll the mailbox pane down 1 page" |
michael@478 | 55 | +OP_SIDEBAR_NEXT "go down to next mailbox" |
michael@478 | 56 | +OP_SIDEBAR_PREV "go to previous mailbox" |
michael@478 | 57 | +OP_SIDEBAR_OPEN "open hilighted mailbox" |
michael@478 | 58 | Index: buffy.c |
michael@478 | 59 | --- buffy.c.orig 2010-09-13 19:19:55.000000000 +0200 |
michael@478 | 60 | +++ buffy.c 2011-01-17 19:33:15.000000000 +0100 |
michael@478 | 61 | @@ -312,6 +312,10 @@ |
michael@478 | 62 | return 0; |
michael@478 | 63 | } |
michael@478 | 64 | |
michael@478 | 65 | + mailbox->msgcount = 0; |
michael@478 | 66 | + mailbox->msg_unread = 0; |
michael@478 | 67 | + mailbox->msg_flagged = 0; |
michael@478 | 68 | + |
michael@478 | 69 | while ((de = readdir (dirp)) != NULL) |
michael@478 | 70 | { |
michael@478 | 71 | if (*de->d_name == '.') |
michael@478 | 72 | @@ -329,7 +333,9 @@ |
michael@478 | 73 | continue; |
michael@478 | 74 | } |
michael@478 | 75 | /* one new and undeleted message is enough */ |
michael@478 | 76 | - mailbox->new = 1; |
michael@478 | 77 | + mailbox->has_new = mailbox->new = 1; |
michael@478 | 78 | + mailbox->msgcount++; |
michael@478 | 79 | + mailbox->msg_unread++; |
michael@478 | 80 | rc = 1; |
michael@478 | 81 | break; |
michael@478 | 82 | } |
michael@478 | 83 | @@ -337,6 +343,32 @@ |
michael@478 | 84 | |
michael@478 | 85 | closedir (dirp); |
michael@478 | 86 | |
michael@478 | 87 | + /* |
michael@478 | 88 | + * count read messages (for folderlist (sidebar) we also need to count |
michael@478 | 89 | + * messages in cur so that we the total number of messages |
michael@478 | 90 | + */ |
michael@478 | 91 | + snprintf (path, sizeof (path), "%s/cur", mailbox->path); |
michael@478 | 92 | + if ((dirp = opendir (path)) == NULL) |
michael@478 | 93 | + { |
michael@478 | 94 | + mailbox->magic = 0; |
michael@478 | 95 | + } |
michael@478 | 96 | + while ((de = readdir (dirp)) != NULL) |
michael@478 | 97 | + { |
michael@478 | 98 | + char *p; |
michael@478 | 99 | + if (*de->d_name != '.') { |
michael@478 | 100 | + if ((p = strstr (de->d_name, ":2,"))) { |
michael@478 | 101 | + if (!strchr (p + 3, 'T')) { |
michael@478 | 102 | + mailbox->msgcount++; |
michael@478 | 103 | + if ( !strchr (p + 3, 'S')) |
michael@478 | 104 | + mailbox->msg_unread++; |
michael@478 | 105 | + if (strchr(p + 3, 'F')) |
michael@478 | 106 | + mailbox->msg_flagged++; |
michael@478 | 107 | + } |
michael@478 | 108 | + } else |
michael@478 | 109 | + mailbox->msgcount++; |
michael@478 | 110 | + } |
michael@478 | 111 | + } |
michael@478 | 112 | + |
michael@478 | 113 | return rc; |
michael@478 | 114 | } |
michael@478 | 115 | |
michael@478 | 116 | @@ -345,14 +377,33 @@ |
michael@478 | 117 | { |
michael@478 | 118 | int rc = 0; |
michael@478 | 119 | int statcheck; |
michael@478 | 120 | + CONTEXT *ctx; |
michael@478 | 121 | |
michael@478 | 122 | if (option (OPTCHECKMBOXSIZE)) |
michael@478 | 123 | statcheck = sb->st_size > mailbox->size; |
michael@478 | 124 | else |
michael@478 | 125 | statcheck = sb->st_mtime > sb->st_atime |
michael@478 | 126 | || (mailbox->newly_created && sb->st_ctime == sb->st_mtime && sb->st_ctime == sb->st_atime); |
michael@478 | 127 | - if (statcheck) |
michael@478 | 128 | + if (statcheck || mailbox->msgcount == 0) |
michael@478 | 129 | { |
michael@478 | 130 | + BUFFY b = *mailbox; |
michael@478 | 131 | + int msgcount = 0; |
michael@478 | 132 | + int msg_unread = 0; |
michael@478 | 133 | + /* parse the mailbox, to see how much mail there is */ |
michael@478 | 134 | + ctx = mx_open_mailbox( mailbox->path, M_READONLY | M_QUIET | M_NOSORT | M_PEEK, NULL); |
michael@478 | 135 | + if(ctx) |
michael@478 | 136 | + { |
michael@478 | 137 | + msgcount = ctx->msgcount; |
michael@478 | 138 | + msg_unread = ctx->unread; |
michael@478 | 139 | + mx_close_mailbox(ctx, 0); |
michael@478 | 140 | + } |
michael@478 | 141 | + *mailbox = b; |
michael@478 | 142 | + mailbox->msgcount = msgcount; |
michael@478 | 143 | + mailbox->msg_unread = msg_unread; |
michael@478 | 144 | + if(statcheck) |
michael@478 | 145 | + { |
michael@478 | 146 | + mailbox->has_new = mailbox->new = 1; |
michael@478 | 147 | + } |
michael@478 | 148 | if (!option(OPTMAILCHECKRECENT) || sb->st_mtime > mailbox->last_visited) |
michael@478 | 149 | { |
michael@478 | 150 | rc = 1; |
michael@478 | 151 | @@ -374,9 +425,11 @@ |
michael@478 | 152 | int mutt_buffy_check (int force) |
michael@478 | 153 | { |
michael@478 | 154 | BUFFY *tmp; |
michael@478 | 155 | + struct dirent *de, *dp; |
michael@478 | 156 | struct stat sb; |
michael@478 | 157 | struct stat contex_sb; |
michael@478 | 158 | time_t t; |
michael@478 | 159 | + CONTEXT *ctx; |
michael@478 | 160 | |
michael@478 | 161 | sb.st_size=0; |
michael@478 | 162 | contex_sb.st_dev=0; |
michael@478 | 163 | @@ -456,6 +509,20 @@ |
michael@478 | 164 | case M_MH: |
michael@478 | 165 | if ((tmp->new = mh_buffy (tmp->path)) > 0) |
michael@478 | 166 | BuffyCount++; |
michael@478 | 167 | + |
michael@478 | 168 | + if ((dp = opendir (tmp->path)) == NULL) |
michael@478 | 169 | + break; |
michael@478 | 170 | + tmp->msgcount = 0; |
michael@478 | 171 | + while ((de = readdir (dp))) |
michael@478 | 172 | + { |
michael@478 | 173 | + if (mh_valid_message (de->d_name)) |
michael@478 | 174 | + { |
michael@478 | 175 | + tmp->msgcount++; |
michael@478 | 176 | + tmp->has_new = tmp->new = 1; |
michael@478 | 177 | + } |
michael@478 | 178 | + } |
michael@478 | 179 | + closedir (dp); |
michael@478 | 180 | + |
michael@478 | 181 | break; |
michael@478 | 182 | } |
michael@478 | 183 | } |
michael@478 | 184 | Index: buffy.h |
michael@478 | 185 | --- buffy.h.orig 2010-09-13 19:19:55.000000000 +0200 |
michael@478 | 186 | +++ buffy.h 2011-01-17 19:33:15.000000000 +0100 |
michael@478 | 187 | @@ -25,7 +25,12 @@ |
michael@478 | 188 | char path[_POSIX_PATH_MAX]; |
michael@478 | 189 | off_t size; |
michael@478 | 190 | struct buffy_t *next; |
michael@478 | 191 | + struct buffy_t *prev; |
michael@478 | 192 | short new; /* mailbox has new mail */ |
michael@478 | 193 | + short has_new; /* set it new if new and not read */ |
michael@478 | 194 | + int msgcount; /* total number of messages */ |
michael@478 | 195 | + int msg_unread; /* number of unread messages */ |
michael@478 | 196 | + int msg_flagged; /* number of flagged messages */ |
michael@478 | 197 | short notified; /* user has been notified */ |
michael@478 | 198 | short magic; /* mailbox type */ |
michael@478 | 199 | short newly_created; /* mbox or mmdf just popped into existence */ |
michael@478 | 200 | Index: color.c |
michael@478 | 201 | --- color.c.orig 2009-05-15 19:18:23.000000000 +0200 |
michael@478 | 202 | +++ color.c 2011-01-17 19:33:15.000000000 +0100 |
michael@478 | 203 | @@ -93,6 +93,8 @@ |
michael@478 | 204 | { "bold", MT_COLOR_BOLD }, |
michael@478 | 205 | { "underline", MT_COLOR_UNDERLINE }, |
michael@478 | 206 | { "index", MT_COLOR_INDEX }, |
michael@478 | 207 | + { "sidebar_new", MT_COLOR_NEW }, |
michael@478 | 208 | + { "sidebar_flagged", MT_COLOR_FLAGGED }, |
michael@478 | 209 | { NULL, 0 } |
michael@478 | 210 | }; |
michael@478 | 211 | |
michael@478 | 212 | Index: compose.c |
michael@478 | 213 | --- compose.c.orig 2010-04-14 20:50:19.000000000 +0200 |
michael@478 | 214 | +++ compose.c 2011-01-17 19:33:15.000000000 +0100 |
michael@478 | 215 | @@ -72,7 +72,7 @@ |
michael@478 | 216 | |
michael@478 | 217 | #define HDR_XOFFSET 10 |
michael@478 | 218 | #define TITLE_FMT "%10s" /* Used for Prompts, which are ASCII */ |
michael@478 | 219 | -#define W (COLS - HDR_XOFFSET) |
michael@478 | 220 | +#define W (COLS - HDR_XOFFSET - SidebarWidth) |
michael@478 | 221 | |
michael@478 | 222 | static char *Prompts[] = |
michael@478 | 223 | { |
michael@478 | 224 | @@ -112,7 +112,7 @@ |
michael@478 | 225 | { |
michael@478 | 226 | int off = 0; |
michael@478 | 227 | |
michael@478 | 228 | - mvaddstr (HDR_CRYPT, 0, "Security: "); |
michael@478 | 229 | + mvaddstr (HDR_CRYPT, SidebarWidth, "Security: "); |
michael@478 | 230 | |
michael@478 | 231 | if ((WithCrypto & (APPLICATION_PGP | APPLICATION_SMIME)) == 0) |
michael@478 | 232 | { |
michael@478 | 233 | @@ -144,7 +144,7 @@ |
michael@478 | 234 | } |
michael@478 | 235 | |
michael@478 | 236 | clrtoeol (); |
michael@478 | 237 | - move (HDR_CRYPTINFO, 0); |
michael@478 | 238 | + move (HDR_CRYPTINFO, SidebarWidth); |
michael@478 | 239 | clrtoeol (); |
michael@478 | 240 | |
michael@478 | 241 | if ((WithCrypto & APPLICATION_PGP) |
michael@478 | 242 | @@ -161,7 +161,7 @@ |
michael@478 | 243 | && (msg->security & ENCRYPT) |
michael@478 | 244 | && SmimeCryptAlg |
michael@478 | 245 | && *SmimeCryptAlg) { |
michael@478 | 246 | - mvprintw (HDR_CRYPTINFO, 40, "%s%s", _("Encrypt with: "), |
michael@478 | 247 | + mvprintw (HDR_CRYPTINFO, SidebarWidth + 40, "%s%s", _("Encrypt with: "), |
michael@478 | 248 | NONULL(SmimeCryptAlg)); |
michael@478 | 249 | off = 20; |
michael@478 | 250 | } |
michael@478 | 251 | @@ -175,7 +175,7 @@ |
michael@478 | 252 | int c; |
michael@478 | 253 | char *t; |
michael@478 | 254 | |
michael@478 | 255 | - mvaddstr (HDR_MIX, 0, " Mix: "); |
michael@478 | 256 | + mvaddstr (HDR_MIX, SidebarWidth, " Mix: "); |
michael@478 | 257 | |
michael@478 | 258 | if (!chain) |
michael@478 | 259 | { |
michael@478 | 260 | @@ -190,7 +190,7 @@ |
michael@478 | 261 | if (t && t[0] == '0' && t[1] == '\0') |
michael@478 | 262 | t = "<random>"; |
michael@478 | 263 | |
michael@478 | 264 | - if (c + mutt_strlen (t) + 2 >= COLS) |
michael@478 | 265 | + if (c + mutt_strlen (t) + 2 >= COLS - SidebarWidth) |
michael@478 | 266 | break; |
michael@478 | 267 | |
michael@478 | 268 | addstr (NONULL(t)); |
michael@478 | 269 | @@ -242,7 +242,7 @@ |
michael@478 | 270 | |
michael@478 | 271 | buf[0] = 0; |
michael@478 | 272 | rfc822_write_address (buf, sizeof (buf), addr, 1); |
michael@478 | 273 | - mvprintw (line, 0, TITLE_FMT, Prompts[line - 1]); |
michael@478 | 274 | + mvprintw (line, SidebarWidth, TITLE_FMT, Prompts[line - 1]); |
michael@478 | 275 | mutt_paddstr (W, buf); |
michael@478 | 276 | } |
michael@478 | 277 | |
michael@478 | 278 | @@ -252,10 +252,10 @@ |
michael@478 | 279 | draw_envelope_addr (HDR_TO, msg->env->to); |
michael@478 | 280 | draw_envelope_addr (HDR_CC, msg->env->cc); |
michael@478 | 281 | draw_envelope_addr (HDR_BCC, msg->env->bcc); |
michael@478 | 282 | - mvprintw (HDR_SUBJECT, 0, TITLE_FMT, Prompts[HDR_SUBJECT - 1]); |
michael@478 | 283 | + mvprintw (HDR_SUBJECT, SidebarWidth, TITLE_FMT, Prompts[HDR_SUBJECT - 1]); |
michael@478 | 284 | mutt_paddstr (W, NONULL (msg->env->subject)); |
michael@478 | 285 | draw_envelope_addr (HDR_REPLYTO, msg->env->reply_to); |
michael@478 | 286 | - mvprintw (HDR_FCC, 0, TITLE_FMT, Prompts[HDR_FCC - 1]); |
michael@478 | 287 | + mvprintw (HDR_FCC, SidebarWidth, TITLE_FMT, Prompts[HDR_FCC - 1]); |
michael@478 | 288 | mutt_paddstr (W, fcc); |
michael@478 | 289 | |
michael@478 | 290 | if (WithCrypto) |
michael@478 | 291 | @@ -266,7 +266,7 @@ |
michael@478 | 292 | #endif |
michael@478 | 293 | |
michael@478 | 294 | SETCOLOR (MT_COLOR_STATUS); |
michael@478 | 295 | - mvaddstr (HDR_ATTACH - 1, 0, _("-- Attachments")); |
michael@478 | 296 | + mvaddstr (HDR_ATTACH - 1, SidebarWidth, _("-- Attachments")); |
michael@478 | 297 | BKGDSET (MT_COLOR_STATUS); |
michael@478 | 298 | clrtoeol (); |
michael@478 | 299 | |
michael@478 | 300 | @@ -304,7 +304,7 @@ |
michael@478 | 301 | /* redraw the expanded list so the user can see the result */ |
michael@478 | 302 | buf[0] = 0; |
michael@478 | 303 | rfc822_write_address (buf, sizeof (buf), *addr, 1); |
michael@478 | 304 | - move (line, HDR_XOFFSET); |
michael@478 | 305 | + move (line, HDR_XOFFSET+SidebarWidth); |
michael@478 | 306 | mutt_paddstr (W, buf); |
michael@478 | 307 | |
michael@478 | 308 | return 0; |
michael@478 | 309 | @@ -549,7 +549,7 @@ |
michael@478 | 310 | if (mutt_get_field ("Subject: ", buf, sizeof (buf), 0) == 0) |
michael@478 | 311 | { |
michael@478 | 312 | mutt_str_replace (&msg->env->subject, buf); |
michael@478 | 313 | - move (HDR_SUBJECT, HDR_XOFFSET); |
michael@478 | 314 | + move (HDR_SUBJECT, HDR_XOFFSET + SidebarWidth); |
michael@478 | 315 | clrtoeol (); |
michael@478 | 316 | if (msg->env->subject) |
michael@478 | 317 | mutt_paddstr (W, msg->env->subject); |
michael@478 | 318 | @@ -566,7 +566,7 @@ |
michael@478 | 319 | { |
michael@478 | 320 | strfcpy (fcc, buf, fcclen); |
michael@478 | 321 | mutt_pretty_mailbox (fcc, fcclen); |
michael@478 | 322 | - move (HDR_FCC, HDR_XOFFSET); |
michael@478 | 323 | + move (HDR_FCC, HDR_XOFFSET + SidebarWidth); |
michael@478 | 324 | mutt_paddstr (W, fcc); |
michael@478 | 325 | fccSet = 1; |
michael@478 | 326 | } |
michael@478 | 327 | Index: curs_main.c |
michael@478 | 328 | --- curs_main.c.orig 2010-09-13 19:19:55.000000000 +0200 |
michael@478 | 329 | +++ curs_main.c 2011-01-17 19:33:15.000000000 +0100 |
michael@478 | 330 | @@ -26,7 +26,9 @@ |
michael@478 | 331 | #include "mailbox.h" |
michael@478 | 332 | #include "mapping.h" |
michael@478 | 333 | #include "sort.h" |
michael@478 | 334 | +#include "buffy.h" |
michael@478 | 335 | #include "mx.h" |
michael@478 | 336 | +#include "sidebar.h" |
michael@478 | 337 | |
michael@478 | 338 | #ifdef USE_POP |
michael@478 | 339 | #include "pop.h" |
michael@478 | 340 | @@ -519,8 +521,12 @@ |
michael@478 | 341 | menu->redraw |= REDRAW_STATUS; |
michael@478 | 342 | if (do_buffy_notify) |
michael@478 | 343 | { |
michael@478 | 344 | - if (mutt_buffy_notify () && option (OPTBEEPNEW)) |
michael@478 | 345 | - beep (); |
michael@478 | 346 | + if (mutt_buffy_notify ()) |
michael@478 | 347 | + { |
michael@478 | 348 | + menu->redraw |= REDRAW_FULL; |
michael@478 | 349 | + if (option (OPTBEEPNEW)) |
michael@478 | 350 | + beep (); |
michael@478 | 351 | + } |
michael@478 | 352 | } |
michael@478 | 353 | else |
michael@478 | 354 | do_buffy_notify = 1; |
michael@478 | 355 | @@ -532,6 +538,7 @@ |
michael@478 | 356 | if (menu->redraw & REDRAW_FULL) |
michael@478 | 357 | { |
michael@478 | 358 | menu_redraw_full (menu); |
michael@478 | 359 | + draw_sidebar(menu->menu); |
michael@478 | 360 | mutt_show_error (); |
michael@478 | 361 | } |
michael@478 | 362 | |
michael@478 | 363 | @@ -554,10 +561,13 @@ |
michael@478 | 364 | |
michael@478 | 365 | if (menu->redraw & REDRAW_STATUS) |
michael@478 | 366 | { |
michael@478 | 367 | + DrawFullLine = 1; |
michael@478 | 368 | menu_status_line (buf, sizeof (buf), menu, NONULL (Status)); |
michael@478 | 369 | + DrawFullLine = 0; |
michael@478 | 370 | CLEARLINE (option (OPTSTATUSONTOP) ? 0 : LINES-2); |
michael@478 | 371 | SETCOLOR (MT_COLOR_STATUS); |
michael@478 | 372 | BKGDSET (MT_COLOR_STATUS); |
michael@478 | 373 | + set_buffystats(Context); |
michael@478 | 374 | mutt_paddstr (COLS, buf); |
michael@478 | 375 | SETCOLOR (MT_COLOR_NORMAL); |
michael@478 | 376 | BKGDSET (MT_COLOR_NORMAL); |
michael@478 | 377 | @@ -571,7 +581,7 @@ |
michael@478 | 378 | menu->oldcurrent = -1; |
michael@478 | 379 | |
michael@478 | 380 | if (option (OPTARROWCURSOR)) |
michael@478 | 381 | - move (menu->current - menu->top + menu->offset, 2); |
michael@478 | 382 | + move (menu->current - menu->top + menu->offset, SidebarWidth + 2); |
michael@478 | 383 | else if (option (OPTBRAILLEFRIENDLY)) |
michael@478 | 384 | move (menu->current - menu->top + menu->offset, 0); |
michael@478 | 385 | else |
michael@478 | 386 | @@ -1069,6 +1079,7 @@ |
michael@478 | 387 | menu->redraw = REDRAW_FULL; |
michael@478 | 388 | break; |
michael@478 | 389 | |
michael@478 | 390 | + case OP_SIDEBAR_OPEN: |
michael@478 | 391 | case OP_MAIN_CHANGE_FOLDER: |
michael@478 | 392 | case OP_MAIN_NEXT_UNREAD_MAILBOX: |
michael@478 | 393 | |
michael@478 | 394 | @@ -1100,7 +1111,11 @@ |
michael@478 | 395 | { |
michael@478 | 396 | mutt_buffy (buf, sizeof (buf)); |
michael@478 | 397 | |
michael@478 | 398 | - if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) == -1) |
michael@478 | 399 | + if ( op == OP_SIDEBAR_OPEN ) { |
michael@478 | 400 | + if(!CurBuffy) |
michael@478 | 401 | + break; |
michael@478 | 402 | + strncpy( buf, CurBuffy->path, sizeof(buf) ); |
michael@478 | 403 | + } else if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) == -1) |
michael@478 | 404 | { |
michael@478 | 405 | if (menu->menu == MENU_PAGER) |
michael@478 | 406 | { |
michael@478 | 407 | @@ -1118,6 +1133,7 @@ |
michael@478 | 408 | } |
michael@478 | 409 | |
michael@478 | 410 | mutt_expand_path (buf, sizeof (buf)); |
michael@478 | 411 | + set_curbuffy(buf); |
michael@478 | 412 | if (mx_get_magic (buf) <= 0) |
michael@478 | 413 | { |
michael@478 | 414 | mutt_error (_("%s is not a mailbox."), buf); |
michael@478 | 415 | @@ -2208,6 +2224,12 @@ |
michael@478 | 416 | mutt_what_key(); |
michael@478 | 417 | break; |
michael@478 | 418 | |
michael@478 | 419 | + case OP_SIDEBAR_SCROLL_UP: |
michael@478 | 420 | + case OP_SIDEBAR_SCROLL_DOWN: |
michael@478 | 421 | + case OP_SIDEBAR_NEXT: |
michael@478 | 422 | + case OP_SIDEBAR_PREV: |
michael@478 | 423 | + scroll_sidebar(op, menu->menu); |
michael@478 | 424 | + break; |
michael@478 | 425 | default: |
michael@478 | 426 | if (menu->menu == MENU_MAIN) |
michael@478 | 427 | km_error_key (MENU_MAIN); |
michael@478 | 428 | Index: doc/Muttrc |
michael@478 | 429 | --- doc/Muttrc.orig 2010-09-15 19:07:19.000000000 +0200 |
michael@478 | 430 | +++ doc/Muttrc 2011-01-17 19:33:15.000000000 +0100 |
michael@478 | 431 | @@ -657,6 +657,26 @@ |
michael@478 | 432 | # $crypt_autosign, $crypt_replysign and $smime_is_default. |
michael@478 | 433 | # |
michael@478 | 434 | # |
michael@478 | 435 | +# set sidebar_visible=no |
michael@478 | 436 | +# |
michael@478 | 437 | +# Name: sidebar_visible |
michael@478 | 438 | +# Type: boolean |
michael@478 | 439 | +# Default: no |
michael@478 | 440 | +# |
michael@478 | 441 | +# |
michael@478 | 442 | +# This specifies whether or not to show sidebar (left-side list of folders). |
michael@478 | 443 | +# |
michael@478 | 444 | +# |
michael@478 | 445 | +# set sidebar_width=0 |
michael@478 | 446 | +# |
michael@478 | 447 | +# Name: sidebar_width |
michael@478 | 448 | +# Type: number |
michael@478 | 449 | +# Default: 0 |
michael@478 | 450 | +# |
michael@478 | 451 | +# |
michael@478 | 452 | +# The width of the sidebar. |
michael@478 | 453 | +# |
michael@478 | 454 | +# |
michael@478 | 455 | # set crypt_autosign=no |
michael@478 | 456 | # |
michael@478 | 457 | # Name: crypt_autosign |
michael@478 | 458 | Index: flags.c |
michael@478 | 459 | --- flags.c.orig 2009-01-04 00:27:10.000000000 +0100 |
michael@478 | 460 | +++ flags.c 2011-01-17 19:33:15.000000000 +0100 |
michael@478 | 461 | @@ -22,8 +22,10 @@ |
michael@478 | 462 | |
michael@478 | 463 | #include "mutt.h" |
michael@478 | 464 | #include "mutt_curses.h" |
michael@478 | 465 | +#include "mutt_menu.h" |
michael@478 | 466 | #include "sort.h" |
michael@478 | 467 | #include "mx.h" |
michael@478 | 468 | +#include "sidebar.h" |
michael@478 | 469 | |
michael@478 | 470 | void _mutt_set_flag (CONTEXT *ctx, HEADER *h, int flag, int bf, int upd_ctx) |
michael@478 | 471 | { |
michael@478 | 472 | @@ -263,6 +265,7 @@ |
michael@478 | 473 | */ |
michael@478 | 474 | if (h->searched && (changed != h->changed || deleted != ctx->deleted || tagged != ctx->tagged || flagged != ctx->flagged)) |
michael@478 | 475 | h->searched = 0; |
michael@478 | 476 | + draw_sidebar(0); |
michael@478 | 477 | } |
michael@478 | 478 | |
michael@478 | 479 | void mutt_tag_set_flag (int flag, int bf) |
michael@478 | 480 | Index: functions.h |
michael@478 | 481 | --- functions.h.orig 2010-08-24 18:34:21.000000000 +0200 |
michael@478 | 482 | +++ functions.h 2011-01-17 19:33:15.000000000 +0100 |
michael@478 | 483 | @@ -169,6 +169,11 @@ |
michael@478 | 484 | { "decrypt-save", OP_DECRYPT_SAVE, NULL }, |
michael@478 | 485 | |
michael@478 | 486 | |
michael@478 | 487 | + { "sidebar-scroll-up", OP_SIDEBAR_SCROLL_UP, NULL }, |
michael@478 | 488 | + { "sidebar-scroll-down", OP_SIDEBAR_SCROLL_DOWN, NULL }, |
michael@478 | 489 | + { "sidebar-next", OP_SIDEBAR_NEXT, NULL }, |
michael@478 | 490 | + { "sidebar-prev", OP_SIDEBAR_PREV, NULL }, |
michael@478 | 491 | + { "sidebar-open", OP_SIDEBAR_OPEN, NULL }, |
michael@478 | 492 | { NULL, 0, NULL } |
michael@478 | 493 | }; |
michael@478 | 494 | |
michael@478 | 495 | @@ -272,6 +277,11 @@ |
michael@478 | 496 | |
michael@478 | 497 | { "what-key", OP_WHAT_KEY, NULL }, |
michael@478 | 498 | |
michael@478 | 499 | + { "sidebar-scroll-up", OP_SIDEBAR_SCROLL_UP, NULL }, |
michael@478 | 500 | + { "sidebar-scroll-down", OP_SIDEBAR_SCROLL_DOWN, NULL }, |
michael@478 | 501 | + { "sidebar-next", OP_SIDEBAR_NEXT, NULL }, |
michael@478 | 502 | + { "sidebar-prev", OP_SIDEBAR_PREV, NULL }, |
michael@478 | 503 | + { "sidebar-open", OP_SIDEBAR_OPEN, NULL }, |
michael@478 | 504 | { NULL, 0, NULL } |
michael@478 | 505 | }; |
michael@478 | 506 | |
michael@478 | 507 | Index: globals.h |
michael@478 | 508 | --- globals.h.orig 2009-08-25 21:08:52.000000000 +0200 |
michael@478 | 509 | +++ globals.h 2011-01-17 19:33:15.000000000 +0100 |
michael@478 | 510 | @@ -117,6 +117,7 @@ |
michael@478 | 511 | WHERE char *SendCharset; |
michael@478 | 512 | WHERE char *Sendmail; |
michael@478 | 513 | WHERE char *Shell; |
michael@478 | 514 | +WHERE char *SidebarDelim; |
michael@478 | 515 | WHERE char *Signature; |
michael@478 | 516 | WHERE char *SimpleSearch; |
michael@478 | 517 | #if USE_SMTP |
michael@478 | 518 | @@ -207,6 +208,9 @@ |
michael@478 | 519 | WHERE short ScoreThresholdRead; |
michael@478 | 520 | WHERE short ScoreThresholdFlag; |
michael@478 | 521 | |
michael@478 | 522 | +WHERE struct buffy_t *CurBuffy INITVAL(0); |
michael@478 | 523 | +WHERE short DrawFullLine INITVAL(0); |
michael@478 | 524 | +WHERE short SidebarWidth; |
michael@478 | 525 | #ifdef USE_IMAP |
michael@478 | 526 | WHERE short ImapKeepalive; |
michael@478 | 527 | WHERE short ImapPipelineDepth; |
michael@478 | 528 | Index: imap/command.c |
michael@478 | 529 | --- imap/command.c.orig 2010-09-15 17:39:31.000000000 +0200 |
michael@478 | 530 | +++ imap/command.c 2011-01-17 19:33:15.000000000 +0100 |
michael@478 | 531 | @@ -1011,6 +1011,13 @@ |
michael@478 | 532 | opened */ |
michael@478 | 533 | status->uidnext = oldun; |
michael@478 | 534 | |
michael@478 | 535 | + /* Added to make the sidebar show the correct numbers */ |
michael@478 | 536 | + if (status->messages) |
michael@478 | 537 | + { |
michael@478 | 538 | + inc->msgcount = status->messages; |
michael@478 | 539 | + inc->msg_unread = status->unseen; |
michael@478 | 540 | + } |
michael@478 | 541 | + |
michael@478 | 542 | FREE (&value); |
michael@478 | 543 | return; |
michael@478 | 544 | } |
michael@478 | 545 | Index: imap/imap.c |
michael@478 | 546 | --- imap/imap.c.orig 2009-08-25 21:08:52.000000000 +0200 |
michael@478 | 547 | +++ imap/imap.c 2011-01-17 19:33:15.000000000 +0100 |
michael@478 | 548 | @@ -1521,7 +1521,7 @@ |
michael@478 | 549 | |
michael@478 | 550 | imap_munge_mbox_name (munged, sizeof (munged), name); |
michael@478 | 551 | snprintf (command, sizeof (command), |
michael@478 | 552 | - "STATUS %s (UIDNEXT UIDVALIDITY UNSEEN RECENT)", munged); |
michael@478 | 553 | + "STATUS %s (UIDNEXT UIDVALIDITY UNSEEN RECENT MESSAGES)", munged); |
michael@478 | 554 | |
michael@478 | 555 | if (imap_exec (idata, command, IMAP_CMD_QUEUE) < 0) |
michael@478 | 556 | { |
michael@478 | 557 | Index: init.h |
michael@478 | 558 | --- init.h.orig 2010-09-15 17:39:31.000000000 +0200 |
michael@478 | 559 | +++ init.h 2011-01-17 19:33:15.000000000 +0100 |
michael@478 | 560 | @@ -1953,6 +1953,22 @@ |
michael@478 | 561 | ** not used. |
michael@478 | 562 | ** (PGP only) |
michael@478 | 563 | */ |
michael@478 | 564 | + {"sidebar_delim", DT_STR, R_BOTH, UL &SidebarDelim, "|"}, |
michael@478 | 565 | + /* |
michael@478 | 566 | + ** .pp |
michael@478 | 567 | + ** This specifies the delimiter between the sidebar (if visible) and |
michael@478 | 568 | + ** other screens. |
michael@478 | 569 | + */ |
michael@478 | 570 | + { "sidebar_visible", DT_BOOL, R_BOTH, OPTSIDEBAR, 0 }, |
michael@478 | 571 | + /* |
michael@478 | 572 | + ** .pp |
michael@478 | 573 | + ** This specifies whether or not to show sidebar (left-side list of folders). |
michael@478 | 574 | + */ |
michael@478 | 575 | + { "sidebar_width", DT_NUM, R_BOTH, UL &SidebarWidth, 0 }, |
michael@478 | 576 | + /* |
michael@478 | 577 | + ** .pp |
michael@478 | 578 | + ** The width of the sidebar. |
michael@478 | 579 | + */ |
michael@478 | 580 | { "pgp_use_gpg_agent", DT_BOOL, R_NONE, OPTUSEGPGAGENT, 0}, |
michael@478 | 581 | /* |
michael@478 | 582 | ** .pp |
michael@478 | 583 | Index: mailbox.h |
michael@478 | 584 | --- mailbox.h.orig 2009-04-30 19:33:48.000000000 +0200 |
michael@478 | 585 | +++ mailbox.h 2011-01-17 19:33:15.000000000 +0100 |
michael@478 | 586 | @@ -27,6 +27,7 @@ |
michael@478 | 587 | #define M_NEWFOLDER (1<<4) /* create a new folder - same as M_APPEND, but uses |
michael@478 | 588 | * safe_fopen() for mbox-style folders. |
michael@478 | 589 | */ |
michael@478 | 590 | +#define M_PEEK (1<<5) /* revert atime back after taking a look (if applicable) */ |
michael@478 | 591 | |
michael@478 | 592 | /* mx_open_new_message() */ |
michael@478 | 593 | #define M_ADD_FROM 1 /* add a From_ line */ |
michael@478 | 594 | Index: mbox.c |
michael@478 | 595 | --- mbox.c.orig 2010-09-13 19:19:55.000000000 +0200 |
michael@478 | 596 | +++ mbox.c 2011-01-17 19:33:15.000000000 +0100 |
michael@478 | 597 | @@ -100,6 +100,7 @@ |
michael@478 | 598 | mutt_perror (ctx->path); |
michael@478 | 599 | return (-1); |
michael@478 | 600 | } |
michael@478 | 601 | + ctx->atime = sb.st_atime; |
michael@478 | 602 | ctx->mtime = sb.st_mtime; |
michael@478 | 603 | ctx->size = sb.st_size; |
michael@478 | 604 | |
michael@478 | 605 | @@ -251,6 +252,7 @@ |
michael@478 | 606 | |
michael@478 | 607 | ctx->size = sb.st_size; |
michael@478 | 608 | ctx->mtime = sb.st_mtime; |
michael@478 | 609 | + ctx->atime = sb.st_atime; |
michael@478 | 610 | |
michael@478 | 611 | #ifdef NFS_ATTRIBUTE_HACK |
michael@478 | 612 | if (sb.st_mtime > sb.st_atime) |
michael@478 | 613 | Index: menu.c |
michael@478 | 614 | --- menu.c.orig 2010-08-25 18:31:40.000000000 +0200 |
michael@478 | 615 | +++ menu.c 2011-01-17 19:33:15.000000000 +0100 |
michael@478 | 616 | @@ -24,6 +24,7 @@ |
michael@478 | 617 | #include "mutt_curses.h" |
michael@478 | 618 | #include "mutt_menu.h" |
michael@478 | 619 | #include "mbyte.h" |
michael@478 | 620 | +#include "sidebar.h" |
michael@478 | 621 | |
michael@478 | 622 | #include <string.h> |
michael@478 | 623 | #include <stdlib.h> |
michael@478 | 624 | @@ -156,7 +157,7 @@ |
michael@478 | 625 | { |
michael@478 | 626 | char *scratch = safe_strdup (s); |
michael@478 | 627 | int shift = option (OPTARROWCURSOR) ? 3 : 0; |
michael@478 | 628 | - int cols = COLS - shift; |
michael@478 | 629 | + int cols = COLS - shift - SidebarWidth; |
michael@478 | 630 | |
michael@478 | 631 | mutt_format_string (s, n, cols, cols, FMT_LEFT, ' ', scratch, mutt_strlen (scratch), 1); |
michael@478 | 632 | s[n - 1] = 0; |
michael@478 | 633 | @@ -207,6 +208,7 @@ |
michael@478 | 634 | char buf[LONG_STRING]; |
michael@478 | 635 | int i; |
michael@478 | 636 | |
michael@478 | 637 | + draw_sidebar(1); |
michael@478 | 638 | for (i = menu->top; i < menu->top + menu->pagelen; i++) |
michael@478 | 639 | { |
michael@478 | 640 | if (i < menu->max) |
michael@478 | 641 | @@ -217,7 +219,7 @@ |
michael@478 | 642 | if (option (OPTARROWCURSOR)) |
michael@478 | 643 | { |
michael@478 | 644 | attrset (menu->color (i)); |
michael@478 | 645 | - CLEARLINE (i - menu->top + menu->offset); |
michael@478 | 646 | + CLEARLINE_WIN (i - menu->top + menu->offset); |
michael@478 | 647 | |
michael@478 | 648 | if (i == menu->current) |
michael@478 | 649 | { |
michael@478 | 650 | @@ -246,14 +248,14 @@ |
michael@478 | 651 | BKGDSET (MT_COLOR_INDICATOR); |
michael@478 | 652 | } |
michael@478 | 653 | |
michael@478 | 654 | - CLEARLINE (i - menu->top + menu->offset); |
michael@478 | 655 | + CLEARLINE_WIN (i - menu->top + menu->offset); |
michael@478 | 656 | print_enriched_string (menu->color(i), (unsigned char *) buf, i != menu->current); |
michael@478 | 657 | SETCOLOR (MT_COLOR_NORMAL); |
michael@478 | 658 | BKGDSET (MT_COLOR_NORMAL); |
michael@478 | 659 | } |
michael@478 | 660 | } |
michael@478 | 661 | else |
michael@478 | 662 | - CLEARLINE (i - menu->top + menu->offset); |
michael@478 | 663 | + CLEARLINE_WIN (i - menu->top + menu->offset); |
michael@478 | 664 | } |
michael@478 | 665 | menu->redraw = 0; |
michael@478 | 666 | } |
michael@478 | 667 | @@ -268,7 +270,7 @@ |
michael@478 | 668 | return; |
michael@478 | 669 | } |
michael@478 | 670 | |
michael@478 | 671 | - move (menu->oldcurrent + menu->offset - menu->top, 0); |
michael@478 | 672 | + move (menu->oldcurrent + menu->offset - menu->top, SidebarWidth); |
michael@478 | 673 | SETCOLOR (MT_COLOR_NORMAL); |
michael@478 | 674 | BKGDSET (MT_COLOR_NORMAL); |
michael@478 | 675 | |
michael@478 | 676 | @@ -283,13 +285,13 @@ |
michael@478 | 677 | clrtoeol (); |
michael@478 | 678 | menu_make_entry (buf, sizeof (buf), menu, menu->oldcurrent); |
michael@478 | 679 | menu_pad_string (buf, sizeof (buf)); |
michael@478 | 680 | - move (menu->oldcurrent + menu->offset - menu->top, 3); |
michael@478 | 681 | + move (menu->oldcurrent + menu->offset - menu->top, SidebarWidth + 3); |
michael@478 | 682 | print_enriched_string (menu->color(menu->oldcurrent), (unsigned char *) buf, 1); |
michael@478 | 683 | SETCOLOR (MT_COLOR_NORMAL); |
michael@478 | 684 | } |
michael@478 | 685 | |
michael@478 | 686 | /* now draw it in the new location */ |
michael@478 | 687 | - move (menu->current + menu->offset - menu->top, 0); |
michael@478 | 688 | + move (menu->current + menu->offset - menu->top, SidebarWidth); |
michael@478 | 689 | attrset (menu->color (menu->current)); |
michael@478 | 690 | ADDCOLOR (MT_COLOR_INDICATOR); |
michael@478 | 691 | addstr ("->"); |
michael@478 | 692 | @@ -310,7 +312,7 @@ |
michael@478 | 693 | attrset (menu->color (menu->current)); |
michael@478 | 694 | ADDCOLOR (MT_COLOR_INDICATOR); |
michael@478 | 695 | BKGDSET (MT_COLOR_INDICATOR); |
michael@478 | 696 | - CLEARLINE (menu->current - menu->top + menu->offset); |
michael@478 | 697 | + CLEARLINE_WIN (menu->current - menu->top + menu->offset); |
michael@478 | 698 | print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 0); |
michael@478 | 699 | SETCOLOR (MT_COLOR_NORMAL); |
michael@478 | 700 | BKGDSET (MT_COLOR_NORMAL); |
michael@478 | 701 | @@ -322,7 +324,7 @@ |
michael@478 | 702 | { |
michael@478 | 703 | char buf[LONG_STRING]; |
michael@478 | 704 | |
michael@478 | 705 | - move (menu->current + menu->offset - menu->top, 0); |
michael@478 | 706 | + move (menu->current + menu->offset - menu->top, SidebarWidth); |
michael@478 | 707 | menu_make_entry (buf, sizeof (buf), menu, menu->current); |
michael@478 | 708 | menu_pad_string (buf, sizeof (buf)); |
michael@478 | 709 | |
michael@478 | 710 | @@ -875,7 +877,7 @@ |
michael@478 | 711 | |
michael@478 | 712 | |
michael@478 | 713 | if (option (OPTARROWCURSOR)) |
michael@478 | 714 | - move (menu->current - menu->top + menu->offset, 2); |
michael@478 | 715 | + move (menu->current - menu->top + menu->offset, SidebarWidth + 2); |
michael@478 | 716 | else if (option (OPTBRAILLEFRIENDLY)) |
michael@478 | 717 | move (menu->current - menu->top + menu->offset, 0); |
michael@478 | 718 | else |
michael@478 | 719 | Index: mutt.h |
michael@478 | 720 | --- mutt.h.orig 2010-09-13 19:19:55.000000000 +0200 |
michael@478 | 721 | +++ mutt.h 2011-01-17 19:33:15.000000000 +0100 |
michael@478 | 722 | @@ -419,6 +419,7 @@ |
michael@478 | 723 | OPTSAVEEMPTY, |
michael@478 | 724 | OPTSAVENAME, |
michael@478 | 725 | OPTSCORE, |
michael@478 | 726 | + OPTSIDEBAR, |
michael@478 | 727 | OPTSIGDASHES, |
michael@478 | 728 | OPTSIGONTOP, |
michael@478 | 729 | OPTSORTRE, |
michael@478 | 730 | @@ -859,6 +860,7 @@ |
michael@478 | 731 | { |
michael@478 | 732 | char *path; |
michael@478 | 733 | FILE *fp; |
michael@478 | 734 | + time_t atime; |
michael@478 | 735 | time_t mtime; |
michael@478 | 736 | off_t size; |
michael@478 | 737 | off_t vsize; |
michael@478 | 738 | @@ -893,6 +895,7 @@ |
michael@478 | 739 | unsigned int quiet : 1; /* inhibit status messages? */ |
michael@478 | 740 | unsigned int collapsed : 1; /* are all threads collapsed? */ |
michael@478 | 741 | unsigned int closing : 1; /* mailbox is being closed */ |
michael@478 | 742 | + unsigned int peekonly : 1; /* just taking a glance, revert atime */ |
michael@478 | 743 | |
michael@478 | 744 | /* driver hooks */ |
michael@478 | 745 | void *data; /* driver specific data */ |
michael@478 | 746 | Index: mutt_curses.h |
michael@478 | 747 | --- mutt_curses.h.orig 2008-03-19 21:07:57.000000000 +0100 |
michael@478 | 748 | +++ mutt_curses.h 2011-01-17 19:33:15.000000000 +0100 |
michael@478 | 749 | @@ -64,6 +64,7 @@ |
michael@478 | 750 | #undef lines |
michael@478 | 751 | #endif /* lines */ |
michael@478 | 752 | |
michael@478 | 753 | +#define CLEARLINE_WIN(x) move(x,SidebarWidth), clrtoeol() |
michael@478 | 754 | #define CLEARLINE(x) move(x,0), clrtoeol() |
michael@478 | 755 | #define CENTERLINE(x,y) move(y, (COLS-strlen(x))/2), addstr(x) |
michael@478 | 756 | #define BEEP() do { if (option (OPTBEEP)) beep(); } while (0) |
michael@478 | 757 | @@ -126,6 +127,8 @@ |
michael@478 | 758 | MT_COLOR_BOLD, |
michael@478 | 759 | MT_COLOR_UNDERLINE, |
michael@478 | 760 | MT_COLOR_INDEX, |
michael@478 | 761 | + MT_COLOR_NEW, |
michael@478 | 762 | + MT_COLOR_FLAGGED, |
michael@478 | 763 | MT_COLOR_MAX |
michael@478 | 764 | }; |
michael@478 | 765 | |
michael@478 | 766 | Index: muttlib.c |
michael@478 | 767 | --- muttlib.c.orig 2010-08-25 18:31:40.000000000 +0200 |
michael@478 | 768 | +++ muttlib.c 2011-01-17 19:33:15.000000000 +0100 |
michael@478 | 769 | @@ -1286,6 +1286,8 @@ |
michael@478 | 770 | pl = pw = 1; |
michael@478 | 771 | |
michael@478 | 772 | /* see if there's room to add content, else ignore */ |
michael@478 | 773 | + if ( DrawFullLine ) |
michael@478 | 774 | + { |
michael@478 | 775 | if ((col < COLS && wlen < destlen) || soft) |
michael@478 | 776 | { |
michael@478 | 777 | int pad; |
michael@478 | 778 | @@ -1329,6 +1331,52 @@ |
michael@478 | 779 | col += wid; |
michael@478 | 780 | src += pl; |
michael@478 | 781 | } |
michael@478 | 782 | + } |
michael@478 | 783 | + else |
michael@478 | 784 | + { |
michael@478 | 785 | + if ((col < COLS-SidebarWidth && wlen < destlen) || soft) |
michael@478 | 786 | + { |
michael@478 | 787 | + int pad; |
michael@478 | 788 | + |
michael@478 | 789 | + /* get contents after padding */ |
michael@478 | 790 | + mutt_FormatString (buf, sizeof (buf), 0, src + pl, callback, data, flags); |
michael@478 | 791 | + len = mutt_strlen (buf); |
michael@478 | 792 | + wid = mutt_strwidth (buf); |
michael@478 | 793 | + |
michael@478 | 794 | + /* try to consume as many columns as we can, if we don't have |
michael@478 | 795 | + * memory for that, use as much memory as possible */ |
michael@478 | 796 | + pad = (COLS - SidebarWidth - col - wid) / pw; |
michael@478 | 797 | + if (pad > 0 && wlen + (pad * pl) + len > destlen) |
michael@478 | 798 | + pad = ((signed)(destlen - wlen - len)) / pl; |
michael@478 | 799 | + if (pad > 0) |
michael@478 | 800 | + { |
michael@478 | 801 | + while (pad--) |
michael@478 | 802 | + { |
michael@478 | 803 | + memcpy (wptr, src, pl); |
michael@478 | 804 | + wptr += pl; |
michael@478 | 805 | + wlen += pl; |
michael@478 | 806 | + col += pw; |
michael@478 | 807 | + } |
michael@478 | 808 | + } |
michael@478 | 809 | + else if (soft && pad < 0) |
michael@478 | 810 | + { |
michael@478 | 811 | + /* \0-terminate dest for length computation in mutt_wstr_trunc() */ |
michael@478 | 812 | + *wptr = 0; |
michael@478 | 813 | + /* make sure right part is at most as wide as display */ |
michael@478 | 814 | + len = mutt_wstr_trunc (buf, destlen, COLS, &wid); |
michael@478 | 815 | + /* truncate left so that right part fits completely in */ |
michael@478 | 816 | + wlen = mutt_wstr_trunc (dest, destlen - len, col + pad, &col); |
michael@478 | 817 | + wptr = dest + wlen; |
michael@478 | 818 | + } |
michael@478 | 819 | + if (len + wlen > destlen) |
michael@478 | 820 | + len = mutt_wstr_trunc (buf, destlen - wlen, COLS - SidebarWidth - col, NULL); |
michael@478 | 821 | + memcpy (wptr, buf, len); |
michael@478 | 822 | + wptr += len; |
michael@478 | 823 | + wlen += len; |
michael@478 | 824 | + col += wid; |
michael@478 | 825 | + src += pl; |
michael@478 | 826 | + } |
michael@478 | 827 | + } |
michael@478 | 828 | break; /* skip rest of input */ |
michael@478 | 829 | } |
michael@478 | 830 | else if (ch == '|') |
michael@478 | 831 | Index: mx.c |
michael@478 | 832 | --- mx.c.orig 2010-09-13 19:19:55.000000000 +0200 |
michael@478 | 833 | +++ mx.c 2011-01-17 19:33:15.000000000 +0100 |
michael@478 | 834 | @@ -580,6 +580,7 @@ |
michael@478 | 835 | * M_APPEND open mailbox for appending |
michael@478 | 836 | * M_READONLY open mailbox in read-only mode |
michael@478 | 837 | * M_QUIET only print error messages |
michael@478 | 838 | + * M_PEEK revert atime where applicable |
michael@478 | 839 | * ctx if non-null, context struct to use |
michael@478 | 840 | */ |
michael@478 | 841 | CONTEXT *mx_open_mailbox (const char *path, int flags, CONTEXT *pctx) |
michael@478 | 842 | @@ -602,6 +603,8 @@ |
michael@478 | 843 | ctx->quiet = 1; |
michael@478 | 844 | if (flags & M_READONLY) |
michael@478 | 845 | ctx->readonly = 1; |
michael@478 | 846 | + if (flags & M_PEEK) |
michael@478 | 847 | + ctx->peekonly = 1; |
michael@478 | 848 | |
michael@478 | 849 | if (flags & (M_APPEND|M_NEWFOLDER)) |
michael@478 | 850 | { |
michael@478 | 851 | @@ -701,9 +704,21 @@ |
michael@478 | 852 | void mx_fastclose_mailbox (CONTEXT *ctx) |
michael@478 | 853 | { |
michael@478 | 854 | int i; |
michael@478 | 855 | +#ifndef BUFFY_SIZE |
michael@478 | 856 | + struct utimbuf ut; |
michael@478 | 857 | +#endif |
michael@478 | 858 | |
michael@478 | 859 | if(!ctx) |
michael@478 | 860 | return; |
michael@478 | 861 | +#ifndef BUFFY_SIZE |
michael@478 | 862 | + /* fix up the times so buffy won't get confused */ |
michael@478 | 863 | + if (ctx->peekonly && ctx->path && ctx->mtime > ctx->atime) |
michael@478 | 864 | + { |
michael@478 | 865 | + ut.actime = ctx->atime; |
michael@478 | 866 | + ut.modtime = ctx->mtime; |
michael@478 | 867 | + utime (ctx->path, &ut); |
michael@478 | 868 | + } |
michael@478 | 869 | +#endif |
michael@478 | 870 | |
michael@478 | 871 | /* never announce that a mailbox we've just left has new mail. #3290 |
michael@478 | 872 | * XXX: really belongs in mx_close_mailbox, but this is a nice hook point */ |
michael@478 | 873 | Index: pager.c |
michael@478 | 874 | --- pager.c.orig 2010-08-25 18:31:40.000000000 +0200 |
michael@478 | 875 | +++ pager.c 2011-01-17 19:33:15.000000000 +0100 |
michael@478 | 876 | @@ -29,6 +29,7 @@ |
michael@478 | 877 | #include "pager.h" |
michael@478 | 878 | #include "attach.h" |
michael@478 | 879 | #include "mbyte.h" |
michael@478 | 880 | +#include "sidebar.h" |
michael@478 | 881 | |
michael@478 | 882 | #include "mutt_crypt.h" |
michael@478 | 883 | |
michael@478 | 884 | @@ -1099,6 +1100,7 @@ |
michael@478 | 885 | if (check_attachment_marker ((char *)buf) == 0) |
michael@478 | 886 | wrap_cols = COLS; |
michael@478 | 887 | |
michael@478 | 888 | + wrap_cols -= SidebarWidth; |
michael@478 | 889 | /* FIXME: this should come from lineInfo */ |
michael@478 | 890 | memset(&mbstate, 0, sizeof(mbstate)); |
michael@478 | 891 | |
michael@478 | 892 | @@ -1745,7 +1747,7 @@ |
michael@478 | 893 | if ((redraw & REDRAW_BODY) || topline != oldtopline) |
michael@478 | 894 | { |
michael@478 | 895 | do { |
michael@478 | 896 | - move (bodyoffset, 0); |
michael@478 | 897 | + move (bodyoffset, SidebarWidth); |
michael@478 | 898 | curline = oldtopline = topline; |
michael@478 | 899 | lines = 0; |
michael@478 | 900 | force_redraw = 0; |
michael@478 | 901 | @@ -1758,6 +1760,7 @@ |
michael@478 | 902 | &QuoteList, &q_level, &force_redraw, &SearchRE) > 0) |
michael@478 | 903 | lines++; |
michael@478 | 904 | curline++; |
michael@478 | 905 | + move(lines + bodyoffset, SidebarWidth); |
michael@478 | 906 | } |
michael@478 | 907 | last_offset = lineInfo[curline].offset; |
michael@478 | 908 | } while (force_redraw); |
michael@478 | 909 | @@ -1771,6 +1774,7 @@ |
michael@478 | 910 | addch ('~'); |
michael@478 | 911 | addch ('\n'); |
michael@478 | 912 | lines++; |
michael@478 | 913 | + move(lines + bodyoffset, SidebarWidth); |
michael@478 | 914 | } |
michael@478 | 915 | /* We are going to update the pager status bar, so it isn't |
michael@478 | 916 | * necessary to reset to normal color now. */ |
michael@478 | 917 | @@ -1794,11 +1798,11 @@ |
michael@478 | 918 | /* print out the pager status bar */ |
michael@478 | 919 | SETCOLOR (MT_COLOR_STATUS); |
michael@478 | 920 | BKGDSET (MT_COLOR_STATUS); |
michael@478 | 921 | - CLEARLINE (statusoffset); |
michael@478 | 922 | + CLEARLINE_WIN (statusoffset); |
michael@478 | 923 | |
michael@478 | 924 | if (IsHeader (extra) || IsMsgAttach (extra)) |
michael@478 | 925 | { |
michael@478 | 926 | - size_t l1 = COLS * MB_LEN_MAX; |
michael@478 | 927 | + size_t l1 = (COLS-SidebarWidth) * MB_LEN_MAX; |
michael@478 | 928 | size_t l2 = sizeof (buffer); |
michael@478 | 929 | hfi.hdr = (IsHeader (extra)) ? extra->hdr : extra->bdy->hdr; |
michael@478 | 930 | mutt_make_string_info (buffer, l1 < l2 ? l1 : l2, NONULL (PagerFmt), &hfi, M_FORMAT_MAKEPRINT); |
michael@478 | 931 | @@ -1808,7 +1812,7 @@ |
michael@478 | 932 | { |
michael@478 | 933 | char bn[STRING]; |
michael@478 | 934 | snprintf (bn, sizeof (bn), "%s (%s)", banner, pager_progress_str); |
michael@478 | 935 | - mutt_paddstr (COLS, bn); |
michael@478 | 936 | + mutt_paddstr (COLS, IsHeader (extra) || IsMsgAttach (extra) ? buffer : banner); |
michael@478 | 937 | } |
michael@478 | 938 | BKGDSET (MT_COLOR_NORMAL); |
michael@478 | 939 | SETCOLOR (MT_COLOR_NORMAL); |
michael@478 | 940 | @@ -1819,18 +1823,23 @@ |
michael@478 | 941 | /* redraw the pager_index indicator, because the |
michael@478 | 942 | * flags for this message might have changed. */ |
michael@478 | 943 | menu_redraw_current (index); |
michael@478 | 944 | + draw_sidebar(MENU_PAGER); |
michael@478 | 945 | |
michael@478 | 946 | /* print out the index status bar */ |
michael@478 | 947 | menu_status_line (buffer, sizeof (buffer), index, NONULL(Status)); |
michael@478 | 948 | |
michael@478 | 949 | - move (indexoffset + (option (OPTSTATUSONTOP) ? 0 : (indexlen - 1)), 0); |
michael@478 | 950 | + move (indexoffset + (option (OPTSTATUSONTOP) ? 0 : (indexlen - 1)), SidebarWidth); |
michael@478 | 951 | SETCOLOR (MT_COLOR_STATUS); |
michael@478 | 952 | BKGDSET (MT_COLOR_STATUS); |
michael@478 | 953 | - mutt_paddstr (COLS, buffer); |
michael@478 | 954 | + mutt_paddstr (COLS-SidebarWidth, buffer); |
michael@478 | 955 | SETCOLOR (MT_COLOR_NORMAL); |
michael@478 | 956 | BKGDSET (MT_COLOR_NORMAL); |
michael@478 | 957 | } |
michael@478 | 958 | |
michael@478 | 959 | + /* if we're not using the index, update every time */ |
michael@478 | 960 | + if ( index == 0 ) |
michael@478 | 961 | + draw_sidebar(MENU_PAGER); |
michael@478 | 962 | + |
michael@478 | 963 | redraw = 0; |
michael@478 | 964 | |
michael@478 | 965 | if (option(OPTBRAILLEFRIENDLY)) { |
michael@478 | 966 | @@ -2756,6 +2765,13 @@ |
michael@478 | 967 | mutt_what_key (); |
michael@478 | 968 | break; |
michael@478 | 969 | |
michael@478 | 970 | + case OP_SIDEBAR_SCROLL_UP: |
michael@478 | 971 | + case OP_SIDEBAR_SCROLL_DOWN: |
michael@478 | 972 | + case OP_SIDEBAR_NEXT: |
michael@478 | 973 | + case OP_SIDEBAR_PREV: |
michael@478 | 974 | + scroll_sidebar(ch, MENU_PAGER); |
michael@478 | 975 | + break; |
michael@478 | 976 | + |
michael@478 | 977 | default: |
michael@478 | 978 | ch = -1; |
michael@478 | 979 | break; |
michael@478 | 980 | Index: sidebar.c |
michael@478 | 981 | --- sidebar.c.orig 2011-01-17 19:33:15.000000000 +0100 |
michael@478 | 982 | +++ sidebar.c 2011-01-17 19:33:15.000000000 +0100 |
michael@478 | 983 | @@ -0,0 +1,333 @@ |
michael@478 | 984 | +/* |
michael@478 | 985 | + * Copyright (C) ????-2004 Justin Hibbits <jrh29@po.cwru.edu> |
michael@478 | 986 | + * Copyright (C) 2004 Thomer M. Gil <mutt@thomer.com> |
michael@478 | 987 | + * |
michael@478 | 988 | + * This program is free software; you can redistribute it and/or modify |
michael@478 | 989 | + * it under the terms of the GNU General Public License as published by |
michael@478 | 990 | + * the Free Software Foundation; either version 2 of the License, or |
michael@478 | 991 | + * (at your option) any later version. |
michael@478 | 992 | + * |
michael@478 | 993 | + * This program is distributed in the hope that it will be useful, |
michael@478 | 994 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
michael@478 | 995 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
michael@478 | 996 | + * GNU General Public License for more details. |
michael@478 | 997 | + * |
michael@478 | 998 | + * You should have received a copy of the GNU General Public License |
michael@478 | 999 | + * along with this program; if not, write to the Free Software |
michael@478 | 1000 | + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. |
michael@478 | 1001 | + */ |
michael@478 | 1002 | + |
michael@478 | 1003 | + |
michael@478 | 1004 | +#if HAVE_CONFIG_H |
michael@478 | 1005 | +# include "config.h" |
michael@478 | 1006 | +#endif |
michael@478 | 1007 | + |
michael@478 | 1008 | +#include "mutt.h" |
michael@478 | 1009 | +#include "mutt_menu.h" |
michael@478 | 1010 | +#include "mutt_curses.h" |
michael@478 | 1011 | +#include "sidebar.h" |
michael@478 | 1012 | +#include "buffy.h" |
michael@478 | 1013 | +#include <libgen.h> |
michael@478 | 1014 | +#include "keymap.h" |
michael@478 | 1015 | +#include <stdbool.h> |
michael@478 | 1016 | + |
michael@478 | 1017 | +/*BUFFY *CurBuffy = 0;*/ |
michael@478 | 1018 | +static BUFFY *TopBuffy = 0; |
michael@478 | 1019 | +static BUFFY *BottomBuffy = 0; |
michael@478 | 1020 | +static int known_lines = 0; |
michael@478 | 1021 | + |
michael@478 | 1022 | +static int quick_log10(int n) |
michael@478 | 1023 | +{ |
michael@478 | 1024 | + char string[32]; |
michael@478 | 1025 | + sprintf(string, "%d", n); |
michael@478 | 1026 | + return strlen(string); |
michael@478 | 1027 | +} |
michael@478 | 1028 | + |
michael@478 | 1029 | +void calc_boundaries (int menu) |
michael@478 | 1030 | +{ |
michael@478 | 1031 | + BUFFY *tmp = Incoming; |
michael@478 | 1032 | + |
michael@478 | 1033 | + if ( known_lines != LINES ) { |
michael@478 | 1034 | + TopBuffy = BottomBuffy = 0; |
michael@478 | 1035 | + known_lines = LINES; |
michael@478 | 1036 | + } |
michael@478 | 1037 | + for ( ; tmp->next != 0; tmp = tmp->next ) |
michael@478 | 1038 | + tmp->next->prev = tmp; |
michael@478 | 1039 | + |
michael@478 | 1040 | + if ( TopBuffy == 0 && BottomBuffy == 0 ) |
michael@478 | 1041 | + TopBuffy = Incoming; |
michael@478 | 1042 | + if ( BottomBuffy == 0 ) { |
michael@478 | 1043 | + int count = LINES - 2 - (menu != MENU_PAGER || option(OPTSTATUSONTOP)); |
michael@478 | 1044 | + BottomBuffy = TopBuffy; |
michael@478 | 1045 | + while ( --count && BottomBuffy->next ) |
michael@478 | 1046 | + BottomBuffy = BottomBuffy->next; |
michael@478 | 1047 | + } |
michael@478 | 1048 | + else if ( TopBuffy == CurBuffy->next ) { |
michael@478 | 1049 | + int count = LINES - 2 - (menu != MENU_PAGER); |
michael@478 | 1050 | + BottomBuffy = CurBuffy; |
michael@478 | 1051 | + tmp = BottomBuffy; |
michael@478 | 1052 | + while ( --count && tmp->prev) |
michael@478 | 1053 | + tmp = tmp->prev; |
michael@478 | 1054 | + TopBuffy = tmp; |
michael@478 | 1055 | + } |
michael@478 | 1056 | + else if ( BottomBuffy == CurBuffy->prev ) { |
michael@478 | 1057 | + int count = LINES - 2 - (menu != MENU_PAGER); |
michael@478 | 1058 | + TopBuffy = CurBuffy; |
michael@478 | 1059 | + tmp = TopBuffy; |
michael@478 | 1060 | + while ( --count && tmp->next ) |
michael@478 | 1061 | + tmp = tmp->next; |
michael@478 | 1062 | + BottomBuffy = tmp; |
michael@478 | 1063 | + } |
michael@478 | 1064 | +} |
michael@478 | 1065 | + |
michael@478 | 1066 | +char *make_sidebar_entry(char *box, int size, int new, int flagged) |
michael@478 | 1067 | +{ |
michael@478 | 1068 | + static char *entry = 0; |
michael@478 | 1069 | + char *c; |
michael@478 | 1070 | + int i = 0; |
michael@478 | 1071 | + int delim_len = strlen(SidebarDelim); |
michael@478 | 1072 | + |
michael@478 | 1073 | + c = realloc(entry, SidebarWidth - delim_len + 2); |
michael@478 | 1074 | + if ( c ) entry = c; |
michael@478 | 1075 | + entry[SidebarWidth - delim_len + 1] = 0; |
michael@478 | 1076 | + for (; i < SidebarWidth - delim_len + 1; entry[i++] = ' ' ); |
michael@478 | 1077 | + i = strlen(box); |
michael@478 | 1078 | + strncpy( entry, box, i < (SidebarWidth - delim_len + 1) ? i : (SidebarWidth - delim_len + 1) ); |
michael@478 | 1079 | + |
michael@478 | 1080 | + if (size == -1) |
michael@478 | 1081 | + sprintf(entry + SidebarWidth - delim_len - 3, "?"); |
michael@478 | 1082 | + else if ( new ) { |
michael@478 | 1083 | + if (flagged > 0) { |
michael@478 | 1084 | + sprintf( |
michael@478 | 1085 | + entry + SidebarWidth - delim_len - 5 - quick_log10(size) - quick_log10(new) - quick_log10(flagged), |
michael@478 | 1086 | + "% d(%d)[%d]", size, new, flagged); |
michael@478 | 1087 | + } else { |
michael@478 | 1088 | + sprintf( |
michael@478 | 1089 | + entry + SidebarWidth - delim_len - 3 - quick_log10(size) - quick_log10(new), |
michael@478 | 1090 | + "% d(%d)", size, new); |
michael@478 | 1091 | + } |
michael@478 | 1092 | + } else if (flagged > 0) { |
michael@478 | 1093 | + sprintf( entry + SidebarWidth - delim_len - 3 - quick_log10(size) - quick_log10(flagged), "% d[%d]", size, flagged); |
michael@478 | 1094 | + } else { |
michael@478 | 1095 | + sprintf( entry + SidebarWidth - delim_len - 1 - quick_log10(size), "% d", size); |
michael@478 | 1096 | + } |
michael@478 | 1097 | + return entry; |
michael@478 | 1098 | +} |
michael@478 | 1099 | + |
michael@478 | 1100 | +void set_curbuffy(char buf[LONG_STRING]) |
michael@478 | 1101 | +{ |
michael@478 | 1102 | + BUFFY* tmp = CurBuffy = Incoming; |
michael@478 | 1103 | + |
michael@478 | 1104 | + if (!Incoming) |
michael@478 | 1105 | + return; |
michael@478 | 1106 | + |
michael@478 | 1107 | + while(1) { |
michael@478 | 1108 | + if(!strcmp(tmp->path, buf)) { |
michael@478 | 1109 | + CurBuffy = tmp; |
michael@478 | 1110 | + break; |
michael@478 | 1111 | + } |
michael@478 | 1112 | + |
michael@478 | 1113 | + if(tmp->next) |
michael@478 | 1114 | + tmp = tmp->next; |
michael@478 | 1115 | + else |
michael@478 | 1116 | + break; |
michael@478 | 1117 | + } |
michael@478 | 1118 | +} |
michael@478 | 1119 | + |
michael@478 | 1120 | +int draw_sidebar(int menu) { |
michael@478 | 1121 | + |
michael@478 | 1122 | + int lines = option(OPTHELP) ? 1 : 0; |
michael@478 | 1123 | + BUFFY *tmp; |
michael@478 | 1124 | +#ifndef USE_SLANG_CURSES |
michael@478 | 1125 | + attr_t attrs; |
michael@478 | 1126 | +#endif |
michael@478 | 1127 | + short delim_len = strlen(SidebarDelim); |
michael@478 | 1128 | + short color_pair; |
michael@478 | 1129 | + |
michael@478 | 1130 | + static bool initialized = false; |
michael@478 | 1131 | + static int prev_show_value; |
michael@478 | 1132 | + static short saveSidebarWidth; |
michael@478 | 1133 | + |
michael@478 | 1134 | + /* initialize first time */ |
michael@478 | 1135 | + if(!initialized) { |
michael@478 | 1136 | + prev_show_value = option(OPTSIDEBAR); |
michael@478 | 1137 | + saveSidebarWidth = SidebarWidth; |
michael@478 | 1138 | + if(!option(OPTSIDEBAR)) SidebarWidth = 0; |
michael@478 | 1139 | + initialized = true; |
michael@478 | 1140 | + } |
michael@478 | 1141 | + |
michael@478 | 1142 | + /* save or restore the value SidebarWidth */ |
michael@478 | 1143 | + if(prev_show_value != option(OPTSIDEBAR)) { |
michael@478 | 1144 | + if(prev_show_value && !option(OPTSIDEBAR)) { |
michael@478 | 1145 | + saveSidebarWidth = SidebarWidth; |
michael@478 | 1146 | + SidebarWidth = 0; |
michael@478 | 1147 | + } else if(!prev_show_value && option(OPTSIDEBAR)) { |
michael@478 | 1148 | + SidebarWidth = saveSidebarWidth; |
michael@478 | 1149 | + } |
michael@478 | 1150 | + prev_show_value = option(OPTSIDEBAR); |
michael@478 | 1151 | + } |
michael@478 | 1152 | + |
michael@478 | 1153 | + |
michael@478 | 1154 | +// if ( SidebarWidth == 0 ) return 0; |
michael@478 | 1155 | + if (SidebarWidth > 0 && option (OPTSIDEBAR) |
michael@478 | 1156 | + && delim_len >= SidebarWidth) { |
michael@478 | 1157 | + unset_option (OPTSIDEBAR); |
michael@478 | 1158 | + /* saveSidebarWidth = SidebarWidth; */ |
michael@478 | 1159 | + if (saveSidebarWidth > delim_len) { |
michael@478 | 1160 | + SidebarWidth = saveSidebarWidth; |
michael@478 | 1161 | + mutt_error (_("Value for sidebar_delim is too long. Disabling sidebar.")); |
michael@478 | 1162 | + sleep (2); |
michael@478 | 1163 | + } else { |
michael@478 | 1164 | + SidebarWidth = 0; |
michael@478 | 1165 | + mutt_error (_("Value for sidebar_delim is too long. Disabling sidebar. Please set your sidebar_width to a sane value.")); |
michael@478 | 1166 | + sleep (4); /* the advise to set a sane value should be seen long enough */ |
michael@478 | 1167 | + } |
michael@478 | 1168 | + saveSidebarWidth = 0; |
michael@478 | 1169 | + return (0); |
michael@478 | 1170 | + } |
michael@478 | 1171 | + |
michael@478 | 1172 | + if ( SidebarWidth == 0 || !option(OPTSIDEBAR)) { |
michael@478 | 1173 | + if (SidebarWidth > 0) { |
michael@478 | 1174 | + saveSidebarWidth = SidebarWidth; |
michael@478 | 1175 | + SidebarWidth = 0; |
michael@478 | 1176 | + } |
michael@478 | 1177 | + unset_option(OPTSIDEBAR); |
michael@478 | 1178 | + return 0; |
michael@478 | 1179 | + } |
michael@478 | 1180 | + |
michael@478 | 1181 | + /* get attributes for divider */ |
michael@478 | 1182 | + SETCOLOR(MT_COLOR_STATUS); |
michael@478 | 1183 | +#ifndef USE_SLANG_CURSES |
michael@478 | 1184 | + attr_get(&attrs, &color_pair, 0); |
michael@478 | 1185 | +#else |
michael@478 | 1186 | + color_pair = attr_get(); |
michael@478 | 1187 | +#endif |
michael@478 | 1188 | + SETCOLOR(MT_COLOR_NORMAL); |
michael@478 | 1189 | + |
michael@478 | 1190 | + /* draw the divider */ |
michael@478 | 1191 | + |
michael@478 | 1192 | + for ( ; lines < LINES-1-(menu != MENU_PAGER || option(OPTSTATUSONTOP)); lines++ ) { |
michael@478 | 1193 | + move(lines, SidebarWidth - delim_len); |
michael@478 | 1194 | + addstr(NONULL(SidebarDelim)); |
michael@478 | 1195 | +#ifndef USE_SLANG_CURSES |
michael@478 | 1196 | + mvchgat(lines, SidebarWidth - delim_len, delim_len, 0, color_pair, NULL); |
michael@478 | 1197 | +#endif |
michael@478 | 1198 | + } |
michael@478 | 1199 | + |
michael@478 | 1200 | + if ( Incoming == 0 ) return 0; |
michael@478 | 1201 | + lines = option(OPTHELP) ? 1 : 0; /* go back to the top */ |
michael@478 | 1202 | + |
michael@478 | 1203 | + if ( known_lines != LINES || TopBuffy == 0 || BottomBuffy == 0 ) |
michael@478 | 1204 | + calc_boundaries(menu); |
michael@478 | 1205 | + if ( CurBuffy == 0 ) CurBuffy = Incoming; |
michael@478 | 1206 | + |
michael@478 | 1207 | + tmp = TopBuffy; |
michael@478 | 1208 | + |
michael@478 | 1209 | + SETCOLOR(MT_COLOR_NORMAL); |
michael@478 | 1210 | + |
michael@478 | 1211 | + for ( ; tmp && lines < LINES-1 - (menu != MENU_PAGER || option(OPTSTATUSONTOP)); tmp = tmp->next ) { |
michael@478 | 1212 | + if ( tmp == CurBuffy ) |
michael@478 | 1213 | + SETCOLOR(MT_COLOR_INDICATOR); |
michael@478 | 1214 | + else if ( tmp->msg_unread > 0 ) |
michael@478 | 1215 | + SETCOLOR(MT_COLOR_NEW); |
michael@478 | 1216 | + else if ( tmp->msg_flagged > 0 ) |
michael@478 | 1217 | + SETCOLOR(MT_COLOR_FLAGGED); |
michael@478 | 1218 | + else |
michael@478 | 1219 | + SETCOLOR(MT_COLOR_NORMAL); |
michael@478 | 1220 | + |
michael@478 | 1221 | + move( lines, 0 ); |
michael@478 | 1222 | + if ( Context && !strcmp( tmp->path, Context->path ) ) { |
michael@478 | 1223 | + tmp->msg_unread = Context->unread; |
michael@478 | 1224 | + tmp->msgcount = Context->msgcount; |
michael@478 | 1225 | + tmp->msg_flagged = Context->flagged; |
michael@478 | 1226 | + } |
michael@478 | 1227 | + // check whether Maildir is a prefix of the current folder's path |
michael@478 | 1228 | + short maildir_is_prefix = 0; |
michael@478 | 1229 | + if ( (strlen(tmp->path) > strlen(Maildir)) && |
michael@478 | 1230 | + (strncmp(Maildir, tmp->path, strlen(Maildir)) == 0) ) |
michael@478 | 1231 | + maildir_is_prefix = 1; |
michael@478 | 1232 | + // calculate depth of current folder and generate its display name with indented spaces |
michael@478 | 1233 | + int sidebar_folder_depth = 0; |
michael@478 | 1234 | + char *sidebar_folder_name; |
michael@478 | 1235 | + sidebar_folder_name = basename(tmp->path); |
michael@478 | 1236 | + if ( maildir_is_prefix ) { |
michael@478 | 1237 | + char *tmp_folder_name; |
michael@478 | 1238 | + int i; |
michael@478 | 1239 | + tmp_folder_name = tmp->path + strlen(Maildir); |
michael@478 | 1240 | + for (i = 0; i < strlen(tmp->path) - strlen(Maildir); i++) { |
michael@478 | 1241 | + if (tmp_folder_name[i] == '/') sidebar_folder_depth++; |
michael@478 | 1242 | + } |
michael@478 | 1243 | + if (sidebar_folder_depth > 0) { |
michael@478 | 1244 | + sidebar_folder_name = malloc(strlen(basename(tmp->path)) + sidebar_folder_depth + 1); |
michael@478 | 1245 | + for (i=0; i < sidebar_folder_depth; i++) |
michael@478 | 1246 | + sidebar_folder_name[i]=' '; |
michael@478 | 1247 | + sidebar_folder_name[i]=0; |
michael@478 | 1248 | + strncat(sidebar_folder_name, basename(tmp->path), strlen(basename(tmp->path)) + sidebar_folder_depth); |
michael@478 | 1249 | + } |
michael@478 | 1250 | + } |
michael@478 | 1251 | + printw( "%.*s", SidebarWidth - delim_len + 1, |
michael@478 | 1252 | + make_sidebar_entry(sidebar_folder_name, tmp->msgcount, |
michael@478 | 1253 | + tmp->msg_unread, tmp->msg_flagged)); |
michael@478 | 1254 | + if (sidebar_folder_depth > 0) |
michael@478 | 1255 | + free(sidebar_folder_name); |
michael@478 | 1256 | + lines++; |
michael@478 | 1257 | + } |
michael@478 | 1258 | + SETCOLOR(MT_COLOR_NORMAL); |
michael@478 | 1259 | + for ( ; lines < LINES-1 - (menu != MENU_PAGER || option(OPTSTATUSONTOP)); lines++ ) { |
michael@478 | 1260 | + int i = 0; |
michael@478 | 1261 | + move( lines, 0 ); |
michael@478 | 1262 | + for ( ; i < SidebarWidth - delim_len; i++ ) |
michael@478 | 1263 | + addch(' '); |
michael@478 | 1264 | + } |
michael@478 | 1265 | + return 0; |
michael@478 | 1266 | +} |
michael@478 | 1267 | + |
michael@478 | 1268 | + |
michael@478 | 1269 | +void set_buffystats(CONTEXT* Context) |
michael@478 | 1270 | +{ |
michael@478 | 1271 | + BUFFY *tmp = Incoming; |
michael@478 | 1272 | + while(tmp) { |
michael@478 | 1273 | + if(Context && !strcmp(tmp->path, Context->path)) { |
michael@478 | 1274 | + tmp->msg_unread = Context->unread; |
michael@478 | 1275 | + tmp->msgcount = Context->msgcount; |
michael@478 | 1276 | + break; |
michael@478 | 1277 | + } |
michael@478 | 1278 | + tmp = tmp->next; |
michael@478 | 1279 | + } |
michael@478 | 1280 | +} |
michael@478 | 1281 | + |
michael@478 | 1282 | +void scroll_sidebar(int op, int menu) |
michael@478 | 1283 | +{ |
michael@478 | 1284 | + if(!SidebarWidth) return; |
michael@478 | 1285 | + if(!CurBuffy) return; |
michael@478 | 1286 | + |
michael@478 | 1287 | + switch (op) { |
michael@478 | 1288 | + case OP_SIDEBAR_NEXT: |
michael@478 | 1289 | + if ( CurBuffy->next == NULL ) return; |
michael@478 | 1290 | + CurBuffy = CurBuffy->next; |
michael@478 | 1291 | + break; |
michael@478 | 1292 | + case OP_SIDEBAR_PREV: |
michael@478 | 1293 | + if ( CurBuffy->prev == NULL ) return; |
michael@478 | 1294 | + CurBuffy = CurBuffy->prev; |
michael@478 | 1295 | + break; |
michael@478 | 1296 | + case OP_SIDEBAR_SCROLL_UP: |
michael@478 | 1297 | + CurBuffy = TopBuffy; |
michael@478 | 1298 | + if ( CurBuffy != Incoming ) { |
michael@478 | 1299 | + calc_boundaries(menu); |
michael@478 | 1300 | + CurBuffy = CurBuffy->prev; |
michael@478 | 1301 | + } |
michael@478 | 1302 | + break; |
michael@478 | 1303 | + case OP_SIDEBAR_SCROLL_DOWN: |
michael@478 | 1304 | + CurBuffy = BottomBuffy; |
michael@478 | 1305 | + if ( CurBuffy->next ) { |
michael@478 | 1306 | + calc_boundaries(menu); |
michael@478 | 1307 | + CurBuffy = CurBuffy->next; |
michael@478 | 1308 | + } |
michael@478 | 1309 | + break; |
michael@478 | 1310 | + default: |
michael@478 | 1311 | + return; |
michael@478 | 1312 | + } |
michael@478 | 1313 | + calc_boundaries(menu); |
michael@478 | 1314 | + draw_sidebar(menu); |
michael@478 | 1315 | +} |
michael@478 | 1316 | + |
michael@478 | 1317 | Index: sidebar.h |
michael@478 | 1318 | --- sidebar.h.orig 2011-01-17 19:33:15.000000000 +0100 |
michael@478 | 1319 | +++ sidebar.h 2011-01-17 19:33:15.000000000 +0100 |
michael@478 | 1320 | @@ -0,0 +1,36 @@ |
michael@478 | 1321 | +/* |
michael@478 | 1322 | + * Copyright (C) ????-2004 Justin Hibbits <jrh29@po.cwru.edu> |
michael@478 | 1323 | + * Copyright (C) 2004 Thomer M. Gil <mutt@thomer.com> |
michael@478 | 1324 | + * |
michael@478 | 1325 | + * This program is free software; you can redistribute it and/or modify |
michael@478 | 1326 | + * it under the terms of the GNU General Public License as published by |
michael@478 | 1327 | + * the Free Software Foundation; either version 2 of the License, or |
michael@478 | 1328 | + * (at your option) any later version. |
michael@478 | 1329 | + * |
michael@478 | 1330 | + * This program is distributed in the hope that it will be useful, |
michael@478 | 1331 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
michael@478 | 1332 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
michael@478 | 1333 | + * GNU General Public License for more details. |
michael@478 | 1334 | + * |
michael@478 | 1335 | + * You should have received a copy of the GNU General Public License |
michael@478 | 1336 | + * along with this program; if not, write to the Free Software |
michael@478 | 1337 | + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. |
michael@478 | 1338 | + */ |
michael@478 | 1339 | + |
michael@478 | 1340 | +#ifndef SIDEBAR_H |
michael@478 | 1341 | +#define SIDEBAR_H |
michael@478 | 1342 | + |
michael@478 | 1343 | +struct MBOX_LIST { |
michael@478 | 1344 | + char *path; |
michael@478 | 1345 | + int msgcount; |
michael@478 | 1346 | + int new; |
michael@478 | 1347 | +} MBLIST; |
michael@478 | 1348 | + |
michael@478 | 1349 | +/* parameter is whether or not to go to the status line */ |
michael@478 | 1350 | +/* used for omitting the last | that covers up the status bar in the index */ |
michael@478 | 1351 | +int draw_sidebar(int); |
michael@478 | 1352 | +void scroll_sidebar(int, int); |
michael@478 | 1353 | +void set_curbuffy(char*); |
michael@478 | 1354 | +void set_buffystats(CONTEXT*); |
michael@478 | 1355 | + |
michael@478 | 1356 | +#endif /* SIDEBAR_H */ |
michael@478 | 1357 | |
michael@478 | 1358 | ============================================================================== |
michael@478 | 1359 | |
michael@478 | 1360 | Fix drawing of sidebar delimiter with the intended |
michael@478 | 1361 | attributes of the "status" bar --rse 20070906 |
michael@478 | 1362 | |
michael@478 | 1363 | Index: sidebar.c |
michael@478 | 1364 | --- sidebar.c.orig 2007-11-04 15:05:17 +0100 |
michael@478 | 1365 | +++ sidebar.c 2007-11-04 15:05:17 +0100 |
michael@478 | 1366 | @@ -186,23 +186,14 @@ |
michael@478 | 1367 | return 0; |
michael@478 | 1368 | } |
michael@478 | 1369 | |
michael@478 | 1370 | - /* get attributes for divider */ |
michael@478 | 1371 | - SETCOLOR(MT_COLOR_STATUS); |
michael@478 | 1372 | -#ifndef USE_SLANG_CURSES |
michael@478 | 1373 | - attr_get(&attrs, &color_pair, 0); |
michael@478 | 1374 | -#else |
michael@478 | 1375 | - color_pair = attr_get(); |
michael@478 | 1376 | -#endif |
michael@478 | 1377 | - SETCOLOR(MT_COLOR_NORMAL); |
michael@478 | 1378 | |
michael@478 | 1379 | /* draw the divider */ |
michael@478 | 1380 | |
michael@478 | 1381 | for ( ; lines < LINES-1-(menu != MENU_PAGER || option(OPTSTATUSONTOP)); lines++ ) { |
michael@478 | 1382 | + SETCOLOR(MT_COLOR_STATUS); |
michael@478 | 1383 | move(lines, SidebarWidth - delim_len); |
michael@478 | 1384 | addstr(NONULL(SidebarDelim)); |
michael@478 | 1385 | -#ifndef USE_SLANG_CURSES |
michael@478 | 1386 | - mvchgat(lines, SidebarWidth - delim_len, delim_len, 0, color_pair, NULL); |
michael@478 | 1387 | -#endif |
michael@478 | 1388 | + SETCOLOR(MT_COLOR_NORMAL); |
michael@478 | 1389 | } |
michael@478 | 1390 | |
michael@478 | 1391 | if ( Incoming == 0 ) return 0; |