X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=curs_main.c;h=4d58326f89519470652bc00bed13daac3f9b243c;hp=84697245cc45ebbab61eb43b7fff00d8423d180f;hb=ce31869e540c4f27d4a398482a44856f314883da;hpb=bbc4fd52516a8afefbd14c77e34f8389d6f0a6ed diff --git a/curs_main.c b/curs_main.c index 8469724..4d58326 100644 --- a/curs_main.c +++ b/curs_main.c @@ -41,6 +41,10 @@ #include "nntp.h" #endif +#ifdef USE_SASL +#include "mutt_sasl.h" +#endif + #include "lib/mem.h" #include "lib/intl.h" #include "lib/str.h" @@ -61,9 +65,16 @@ static const char *Function_not_permitted_in_attach_message_mode = N_("Function not permitted in attach-message mode."); static const char *No_visible = N_("No visible messages."); +#define CHECK_IN_MAILBOX if (!Context) \ + { \ + mutt_flushinp (); \ + mutt_error (_(No_mailbox_is_open)); \ + break; \ + } + #define CHECK_MSGCOUNT if (!Context) \ { \ - mutt_flushinp (); \ + mutt_flushinp (); \ mutt_error(_(No_mailbox_is_open)); \ break; \ } \ @@ -269,19 +280,16 @@ static void update_index (MUTTMENU * menu, CONTEXT * ctx, int check, * they will be visible in the limited view */ if (Context->pattern) { #define THIS_BODY Context->hdrs[j]->content - if (oldcount || check == M_REOPENED) { - for (j = (check == M_REOPENED) ? 0 : oldcount; j < Context->msgcount; - j++) { - if (mutt_pattern_exec - (Context->limit_pattern, M_MATCH_FULL_ADDRESS, Context, - Context->hdrs[j])) { - Context->hdrs[j]->virtual = Context->vcount; - Context->v2r[Context->vcount] = j; - Context->hdrs[j]->limited = 1; - Context->vcount++; - Context->vsize += - THIS_BODY->length + THIS_BODY->offset - THIS_BODY->hdr_offset; - } + for (j = (check == M_REOPENED) ? 0 : oldcount; j < Context->msgcount; j++) { + if (mutt_pattern_exec + (Context->limit_pattern, M_MATCH_FULL_ADDRESS, Context, + Context->hdrs[j])) { + Context->hdrs[j]->virtual = Context->vcount; + Context->v2r[Context->vcount] = j; + Context->hdrs[j]->limited = 1; + Context->vcount++; + Context->vsize += + THIS_BODY->length + THIS_BODY->offset - THIS_BODY->hdr_offset; } } #undef THIS_BODY @@ -341,7 +349,6 @@ static void update_index (MUTTMENU * menu, CONTEXT * ctx, int check, if (menu->current < 0) menu->current = ci_first_message (); - } static void resort_index (MUTTMENU * menu) @@ -587,10 +594,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 (); @@ -608,6 +611,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 */ @@ -748,7 +755,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; } @@ -799,7 +806,7 @@ 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; } @@ -923,7 +930,7 @@ int mutt_index_menu (void) break; case OP_MAIN_SHOW_LIMIT: - CHECK_MSGCOUNT; + CHECK_IN_MAILBOX; if (!Context->pattern) mutt_message (_("No limit pattern is in effect.")); @@ -939,7 +946,7 @@ int mutt_index_menu (void) case OP_MAIN_LIMIT: case OP_TOGGLE_READ: - CHECK_MSGCOUNT; + CHECK_IN_MAILBOX; menu->oldcurrent = (Context->vcount && menu->current >= 0 && menu->current < Context->vcount) ? CURHDR->index : -1; @@ -978,10 +985,12 @@ int mutt_index_menu (void) else menu->current = 0; menu->redraw = REDRAW_INDEX | REDRAW_STATUS; - if ((Sort & SORT_MASK) == SORT_THREADS) + if (Context->msgcount && (Sort & SORT_MASK) == SORT_THREADS) mutt_draw_tree (Context); menu->redraw = REDRAW_FULL; } + if (Context->pattern) + mutt_message _("To view all messages, limit to \"all\"."); break; case OP_QUIT: @@ -1187,23 +1196,27 @@ int mutt_index_menu (void) cp = _("Open newsgroup in read-only mode"); else cp = _("Open newsgroup"); - nntp_buffy (buf); + nntp_buffy (buf, sizeof (buf)); } else #endif { if (Context && Context->path) strncpy (buf, Context->path, sizeof (buf)); - if (op != OP_SIDEBAR_OPEN) - buffy_next (buf, sizeof (buf)); + if (op != OP_SIDEBAR_OPEN) + buffy_next (buf, sizeof (buf)); } if (op == OP_SIDEBAR_OPEN) { strncpy (buf, NONULL(sidebar_get_current ()), sizeof (buf)); } - else if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) == - -1) - break; + 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; + } if (!buf[0]) { CLEARLINE (LINES - 1); break; @@ -1700,7 +1713,7 @@ int mutt_index_menu (void) case OP_TOGGLE_WRITE: - CHECK_MSGCOUNT; + CHECK_IN_MAILBOX; if (mx_toggle_write (Context) == 0) menu->redraw |= REDRAW_STATUS; break; @@ -2096,6 +2109,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; @@ -2104,6 +2125,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: @@ -2292,6 +2321,8 @@ int mutt_index_menu (void) break; case OP_BUFFY_LIST: + if (option (OPTFORCEBUFFYCHECK)) + buffy_check (1); buffy_list (); menu->redraw = REDRAW_FULL; break; @@ -2312,6 +2343,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: @@ -2337,16 +2372,19 @@ int mutt_index_menu (void) break; } + if (!attach_msg) { #ifdef USE_IMAP /* Close all open IMAP connections */ - if (!attach_msg) imap_logout_all (); #endif #ifdef USE_NNTP /* Close all open NNTP connections */ - if (!attach_msg) nntp_logout_all (); #endif +#ifdef USE_SASL + mutt_sasl_done (); +#endif + } mutt_menuDestroy (&menu); return (close);