X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=curs_main.c;h=36ed33ac51f0b04b31a5237f0ed92e51a89e166d;hp=09f28a146305b780e1db920dca36e73f0bfccb64;hb=2b2f17c2b838911949a6e8665ef3131382099a62;hpb=b85f52d2ec4d820ab5c4b577857548bec294bb27 diff --git a/curs_main.c b/curs_main.c index 09f28a1..36ed33a 100644 --- a/curs_main.c +++ b/curs_main.c @@ -14,11 +14,15 @@ # include "config.h" #endif +#include +#include +#include +#include + #include "mutt.h" #include "mutt_curses.h" #include "mx.h" #include "mutt_menu.h" -#include "mapping.h" #include "sort.h" #include "recvattach.h" #include "buffy.h" @@ -45,9 +49,6 @@ #include "mutt_sasl.h" #endif -#include "lib/mem.h" -#include "lib/intl.h" -#include "lib/str.h" #include "lib/debug.h" #include @@ -110,8 +111,8 @@ static const char *No_visible = N_("No visible messages."); #define CURHDR Context->hdrs[Context->v2r[menu->current]] #define OLDHDR Context->hdrs[Context->v2r[menu->oldcurrent]] #define UNREAD(h) mutt_thread_contains_unread (Context, h) +#define SW (option(OPTMBOXPANE)?SidebarWidth:0) -extern const char *ReleaseDate; extern size_t UngetCount; void index_make_entry (char *s, size_t l, MUTTMENU * menu, int num) @@ -297,9 +298,7 @@ static void update_index (MUTTMENU * menu, CONTEXT * ctx, int check, /* save the list of new messages */ if (oldcount && check != M_REOPENED && ((Sort & SORT_MASK) == SORT_THREADS)) { - save_new = - (HEADER **) mem_malloc (sizeof (HEADER *) * - (Context->msgcount - oldcount)); + save_new = p_new(HEADER*, Context->msgcount - oldcount); for (j = oldcount; j < Context->msgcount; j++) save_new[j - oldcount] = Context->hdrs[j]; } @@ -331,7 +330,7 @@ static void update_index (MUTTMENU * menu, CONTEXT * ctx, int check, mutt_uncollapse_thread (Context, h); } } - mem_free (&save_new); + p_delete(&save_new); mutt_set_virtual (Context); } } @@ -385,7 +384,7 @@ struct mapping_t IndexHelp[] = { {N_("Reply"), OP_REPLY}, {N_("Group"), OP_GROUP_REPLY}, {N_("Help"), OP_HELP}, - {NULL} + {NULL, OP_NULL} }; #ifdef USE_NNTP @@ -398,7 +397,7 @@ struct mapping_t IndexNewsHelp[] = { {N_("Followup"), OP_FOLLOWUP}, {N_("Catchup"), OP_CATCHUP}, {N_("Help"), OP_HELP}, - {NULL} + {NULL, OP_NULL} }; #endif @@ -445,7 +444,7 @@ int mutt_index_menu (void) sidebar_set_current (Context->path); } - FOREVER { + for (;;) { tag = 0; /* clear the tag-prefix */ menu->max = Context ? Context->vcount : 0; @@ -483,7 +482,7 @@ int mutt_index_menu (void) if ((check = mx_check_mailbox (Context, &index_hint, 0)) < 0) { if (!Context->path) { /* fatal error occurred */ - mem_free (&Context); + p_delete(&Context); menu->redraw = REDRAW_FULL; } set_option (OPTSEARCHINVALID); @@ -561,13 +560,13 @@ int mutt_index_menu (void) } if (menu->redraw & REDRAW_STATUS) { - DrawFullLine = 1; menu_status_line (buf, sizeof (buf), menu, NONULL (Status)); - DrawFullLine = 0; CLEARLINE (option (OPTSTATUSONTOP) ? 0 : LINES - 2); + sidebar_draw_frames(); SETCOLOR (MT_COLOR_STATUS); BKGDSET (MT_COLOR_STATUS); - mutt_paddstr (COLS, buf); + move(option (OPTSTATUSONTOP) ? 0 : LINES - 2,SW); + mutt_paddstr (COLS-SW, buf); SETCOLOR (MT_COLOR_NORMAL); BKGDSET (MT_COLOR_NORMAL); sidebar_set_buffystats (Context); @@ -594,10 +593,6 @@ int mutt_index_menu (void) move (menu->current - menu->top + menu->offset, COLS - 1); mutt_refresh (); - op = km_dokey (MENU_MAIN); - - debug_print (4, ("Got op %d\n", op)); - #if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM) if (SigWinch) { mutt_flushinp (); @@ -615,6 +610,10 @@ int mutt_index_menu (void) } #endif + op = km_dokey (MENU_MAIN); + + debug_print (4, ("Got op %d\n", op)); + if (op == -1) continue; /* either user abort or timeout */ @@ -755,7 +754,7 @@ int mutt_index_menu (void) if (op == OP_GET_MESSAGE) { buf[0] = 0; - if (mutt_get_field (_("Enter Message-Id: "), buf, sizeof (buf), 0) + if (mutt_get_field (_("Enter Message-ID: "), buf, sizeof (buf), 0) != 0 || !buf[0]) break; } @@ -767,7 +766,7 @@ int mutt_index_menu (void) break; } - strfcpy (buf, ref->data, sizeof (buf)); + m_strcpy(buf, sizeof(buf), ref->data); } if (!Context->id_hash) Context->id_hash = mutt_make_id_hash (Context); @@ -806,14 +805,14 @@ int mutt_index_menu (void) int old = CURHDR->index, i; if (!CURHDR->env->message_id) { - mutt_error (_("No Message-Id. Unable to perform operation")); + mutt_error (_("No Message-ID. Unable to perform operation")); break; } if (!Context->id_hash) Context->id_hash = mutt_make_id_hash (Context); - strfcpy (buf, CURHDR->env->message_id, sizeof (buf)); + m_strcpy(buf, sizeof(buf), CURHDR->env->message_id); if (op == OP_RECONSTRUCT_THREAD) { LIST *ref = CURHDR->env->references; @@ -822,7 +821,7 @@ int mutt_index_menu (void) nntp_check_msgid (Context, ref->data); /* the last msgid in References is the root message */ if (!ref->next) - strfcpy (buf, ref->data, sizeof (buf)); + m_strcpy(buf, sizeof(buf), ref->data); ref = ref->next; } } @@ -960,13 +959,13 @@ int mutt_index_menu (void) set_option (OPTHIDEREAD); } else { - strfcpy (buf, Context->pattern + 8, sizeof (buf)); + m_strcpy(buf, sizeof(buf), Context->pattern + 8); if (!*buf || strncmp (buf, ".*", 2) == 0) snprintf (buf, sizeof (buf), "~A"); unset_option (OPTHIDEREAD); } - mem_free (&Context->pattern); - Context->pattern = str_dup (buf); + p_delete(&Context->pattern); + Context->pattern = m_strdup(buf); } if ((op == OP_TOGGLE_READ && mutt_pattern_func (M_LIMIT, NULL) == 0) || mutt_pattern_func (M_LIMIT, _("Limit to messages matching: ")) == 0) @@ -989,6 +988,8 @@ int mutt_index_menu (void) mutt_draw_tree (Context); menu->redraw = REDRAW_FULL; } + if (Context->pattern) + mutt_message _("To view all messages, limit to \"all\"."); break; case OP_QUIT: @@ -1151,7 +1152,7 @@ int mutt_index_menu (void) /* check for a fatal error, or all messages deleted */ if (!Context->path) - mem_free (&Context); + p_delete(&Context); /* if we were in the pager, redisplay the message */ if (menu->menu == MENU_PAGER) { @@ -1200,17 +1201,21 @@ int mutt_index_menu (void) #endif { if (Context && Context->path) - strncpy (buf, Context->path, sizeof (buf)); + m_strcpy(buf, sizeof(buf), Context->path); if (op != OP_SIDEBAR_OPEN) buffy_next (buf, sizeof (buf)); } if (op == OP_SIDEBAR_OPEN) { - strncpy (buf, NONULL(sidebar_get_current ()), sizeof (buf)); + m_strcpy(buf, sizeof(buf), sidebar_get_current()); + } + else if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) == -1) { + if (menu->menu == MENU_PAGER) { + op = OP_DISPLAY_MESSAGE; + continue; + } else + break; } - else if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) == - -1) - break; if (!buf[0]) { CLEARLINE (LINES - 1); break; @@ -1228,18 +1233,18 @@ int mutt_index_menu (void) mutt_error (_("%s is not a mailbox."), buf); break; } - str_replace (&CurrentFolder, buf); + m_strreplace(&CurrentFolder, buf); if (Context) { int check; #ifdef USE_COMPRESSED if (Context->compressinfo && Context->realpath) - str_replace (&LastFolder, Context->realpath); + m_strreplace(&LastFolder, Context->realpath); else #endif - str_replace (&LastFolder, Context->path); + m_strreplace(&LastFolder, Context->path); oldcount = Context ? Context->msgcount : 0; if ((check = mx_close_mailbox (Context, &index_hint)) != 0) { @@ -1250,7 +1255,7 @@ int mutt_index_menu (void) menu->redraw = REDRAW_INDEX | REDRAW_STATUS; break; } - mem_free (&Context); + p_delete(&Context); } mutt_sleep (0); @@ -1333,7 +1338,7 @@ int mutt_index_menu (void) { if (Context) { mx_fastclose_mailbox (Context); - mem_free (&Context); + p_delete(&Context); } done = 1; } @@ -2103,6 +2108,14 @@ int mutt_index_menu (void) CHECK_MSGCOUNT; CHECK_VISIBLE; mutt_pipe_message (tag ? NULL : CURHDR); +#ifdef USE_IMAP + /* in an IMAP folder index with imap_peek=no, piping could change + * * new or old messages status to read. Redraw what's needed. + */ + if (Context->magic == M_IMAP && !option (OPTIMAPPEEK)) { + menu->redraw = (tag ? REDRAW_INDEX : REDRAW_CURRENT) | REDRAW_STATUS; + } +#endif MAYBE_REDRAW (menu->redraw); break; @@ -2111,6 +2124,14 @@ int mutt_index_menu (void) CHECK_MSGCOUNT; CHECK_VISIBLE; mutt_print_message (tag ? NULL : CURHDR); +#ifdef USE_IMAP + /* in an IMAP folder index with imap_peek=no, piping could change + * * new or old messages status to read. Redraw what's needed. + */ + if (Context->magic == M_IMAP && !option (OPTIMAPPEEK)) { + menu->redraw = (tag ? REDRAW_INDEX : REDRAW_CURRENT) | REDRAW_STATUS; + } +#endif break; case OP_MAIN_READ_THREAD: @@ -2174,7 +2195,7 @@ int mutt_index_menu (void) sleep (2); } else if (op != OP_FOLLOWUP || !CURHDR->env->followup_to || - str_casecmp (CURHDR->env->followup_to, "poster") || + m_strcasecmp(CURHDR->env->followup_to, "poster") || query_quadoption (OPT_FOLLOWUPTOPOSTER, _("Reply by mail as poster prefers?")) != M_YES) { @@ -2321,6 +2342,10 @@ int mutt_index_menu (void) mutt_what_key (); break; + case OP_REBUILD_CACHE: + mx_rebuild_cache (); + break; + case OP_SIDEBAR_SCROLL_UP: case OP_SIDEBAR_SCROLL_DOWN: case OP_SIDEBAR_NEXT: