X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=curs_main.c;h=09f28a146305b780e1db920dca36e73f0bfccb64;hp=8cf1dff18bec90e83f2dd2d26c3f6f75154edff7;hb=a0aa3d4bba449529dfed997214b34e309ce451dd;hpb=9a1805afc94b21d8766e6e67ef57f92aaf966e84 diff --git a/curs_main.c b/curs_main.c index 8cf1dff..09f28a1 100644 --- a/curs_main.c +++ b/curs_main.c @@ -20,9 +20,12 @@ #include "mutt_menu.h" #include "mapping.h" #include "sort.h" +#include "recvattach.h" #include "buffy.h" #include "mx.h" #include "sidebar.h" +#include "thread.h" +#include "xterm.h" #ifdef USE_POP #include "pop.h" @@ -38,9 +41,14 @@ #include "nntp.h" #endif +#ifdef USE_SASL +#include "mutt_sasl.h" +#endif + #include "lib/mem.h" #include "lib/intl.h" #include "lib/str.h" +#include "lib/debug.h" #include #include @@ -57,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; \ } \ @@ -99,22 +114,6 @@ static const char *No_visible = N_("No visible messages."); extern const char *ReleaseDate; extern size_t UngetCount; -static void set_xterm_title_bar (char *title) -{ - fputs ("\033]2;", stdout); - fputs (title, stdout); - fputs ("\007", stdout); - fflush (stdout); -} - -static void set_xterm_icon_name (char *name) -{ - fputs ("\033]1;", stdout); - fputs (name, stdout); - fputs ("\007", stdout); - fflush (stdout); -} - void index_make_entry (char *s, size_t l, MUTTMENU * menu, int num) { format_flag flag = @@ -281,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 @@ -302,7 +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 **) safe_malloc (sizeof (HEADER *) * + (HEADER **) mem_malloc (sizeof (HEADER *) * (Context->msgcount - oldcount)); for (j = oldcount; j < Context->msgcount; j++) save_new[j - oldcount] = Context->hdrs[j]; @@ -335,7 +331,7 @@ static void update_index (MUTTMENU * menu, CONTEXT * ctx, int check, mutt_uncollapse_thread (Context, h); } } - FREE (&save_new); + mem_free (&save_new); mutt_set_virtual (Context); } } @@ -353,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) @@ -488,7 +483,7 @@ int mutt_index_menu (void) if ((check = mx_check_mailbox (Context, &index_hint, 0)) < 0) { if (!Context->path) { /* fatal error occurred */ - FREE (&Context); + mem_free (&Context); menu->redraw = REDRAW_FULL; } set_option (OPTSEARCHINVALID); @@ -571,15 +566,17 @@ int mutt_index_menu (void) DrawFullLine = 0; CLEARLINE (option (OPTSTATUSONTOP) ? 0 : LINES - 2); SETCOLOR (MT_COLOR_STATUS); + BKGDSET (MT_COLOR_STATUS); mutt_paddstr (COLS, buf); SETCOLOR (MT_COLOR_NORMAL); + BKGDSET (MT_COLOR_NORMAL); sidebar_set_buffystats (Context); menu->redraw &= ~REDRAW_STATUS; if (option (OPTXTERMSETTITLES)) { menu_status_line (buf, sizeof (buf), menu, NONULL (XtermTitle)); - set_xterm_title_bar (buf); + mutt_xterm_set_title (buf); menu_status_line (buf, sizeof (buf), menu, NONULL (XtermIcon)); - set_xterm_icon_name (buf); + mutt_xterm_set_icon (buf); } } @@ -591,14 +588,15 @@ int mutt_index_menu (void) if (option (OPTARROWCURSOR)) move (menu->current - menu->top + menu->offset, 2); + else if (option (OPTBRAILLEFRIENDLY)) + move (menu->current - menu->top + menu->offset, 0); else move (menu->current - menu->top + menu->offset, COLS - 1); mutt_refresh (); op = km_dokey (MENU_MAIN); - dprint (4, - (debugfile, "mutt_index_menu[%d]: Got op %d\n", __LINE__, op)); + debug_print (4, ("Got op %d\n", op)); #if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM) if (SigWinch) { @@ -932,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.")); @@ -948,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; @@ -967,8 +965,8 @@ int mutt_index_menu (void) snprintf (buf, sizeof (buf), "~A"); unset_option (OPTHIDEREAD); } - FREE (&Context->pattern); - Context->pattern = safe_strdup (buf); + mem_free (&Context->pattern); + Context->pattern = str_dup (buf); } if ((op == OP_TOGGLE_READ && mutt_pattern_func (M_LIMIT, NULL) == 0) || mutt_pattern_func (M_LIMIT, _("Limit to messages matching: ")) == 0) @@ -987,7 +985,7 @@ 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; } @@ -1153,7 +1151,7 @@ int mutt_index_menu (void) /* check for a fatal error, or all messages deleted */ if (!Context->path) - FREE (&Context); + mem_free (&Context); /* if we were in the pager, redisplay the message */ if (menu->menu == MENU_PAGER) { @@ -1196,14 +1194,15 @@ 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)); - buffy_next (buf, sizeof (buf)); + if (op != OP_SIDEBAR_OPEN) + buffy_next (buf, sizeof (buf)); } if (op == OP_SIDEBAR_OPEN) { @@ -1225,7 +1224,6 @@ int mutt_index_menu (void) else #endif mutt_expand_path (buf, sizeof (buf)); - sidebar_set_current (buf); if (mx_get_magic (buf) <= 0) { mutt_error (_("%s is not a mailbox."), buf); break; @@ -1252,7 +1250,7 @@ int mutt_index_menu (void) menu->redraw = REDRAW_INDEX | REDRAW_STATUS; break; } - FREE (&Context); + mem_free (&Context); } mutt_sleep (0); @@ -1270,6 +1268,7 @@ int mutt_index_menu (void) } else menu->current = 0; + sidebar_set_current (buf); #ifdef USE_NNTP /* buffy_check() must be done with mail-reader mode! */ @@ -1307,6 +1306,10 @@ int mutt_index_menu (void) menu->current = mutt_thread_next_unread (Context, CURHDR); } + if (option (OPTPGPAUTODEC) && + (tag || !(CURHDR->security & PGP_TRADITIONAL_CHECKED))) + mutt_check_traditional_pgp (tag ? NULL : CURHDR, &menu->redraw); + if ((op = mutt_display_message (CURHDR)) == -1) { unset_option (OPTNEEDRESORT); break; @@ -1330,7 +1333,7 @@ int mutt_index_menu (void) { if (Context) { mx_fastclose_mailbox (Context); - FREE (&Context); + mem_free (&Context); } done = 1; } @@ -1704,7 +1707,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; @@ -2012,6 +2015,10 @@ int mutt_index_menu (void) CHECK_MSGCOUNT; CHECK_VISIBLE; CHECK_ATTACH; + + if (option (OPTPGPAUTODEC) && + (tag || !(CURHDR->security & PGP_TRADITIONAL_CHECKED))) + mutt_check_traditional_pgp (tag ? NULL : CURHDR, &menu->redraw); ci_send_message (SENDFORWARD, NULL, NULL, Context, tag ? NULL : CURHDR); menu->redraw = REDRAW_FULL; break; @@ -2026,6 +2033,11 @@ int mutt_index_menu (void) CHECK_MSGCOUNT; CHECK_VISIBLE; CHECK_ATTACH; + + if (option (OPTPGPAUTODEC) && + (tag || !(CURHDR->security & PGP_TRADITIONAL_CHECKED))) + mutt_check_traditional_pgp (tag ? NULL : CURHDR, &menu->redraw); + ci_send_message (SENDREPLY | SENDGROUPREPLY, NULL, NULL, Context, tag ? NULL : CURHDR); menu->redraw = REDRAW_FULL; @@ -2036,6 +2048,11 @@ int mutt_index_menu (void) CHECK_ATTACH; CHECK_MSGCOUNT; CHECK_VISIBLE; + + if (option (OPTPGPAUTODEC) && + (tag || !(CURHDR->security & PGP_TRADITIONAL_CHECKED))) + mutt_check_traditional_pgp (tag ? NULL : CURHDR, &menu->redraw); + ci_send_message (SENDREPLY | SENDLISTREPLY, NULL, NULL, Context, tag ? NULL : CURHDR); menu->redraw = REDRAW_FULL; @@ -2157,7 +2174,7 @@ int mutt_index_menu (void) sleep (2); } else if (op != OP_FOLLOWUP || !CURHDR->env->followup_to || - safe_strcasecmp (CURHDR->env->followup_to, "poster") || + str_casecmp (CURHDR->env->followup_to, "poster") || query_quadoption (OPT_FOLLOWUPTOPOSTER, _("Reply by mail as poster prefers?")) != M_YES) { @@ -2189,6 +2206,11 @@ int mutt_index_menu (void) CHECK_ATTACH; CHECK_MSGCOUNT; CHECK_VISIBLE; + + if (option (OPTPGPAUTODEC) && + (tag || !(CURHDR->security & PGP_TRADITIONAL_CHECKED))) + mutt_check_traditional_pgp (tag ? NULL : CURHDR, &menu->redraw); + ci_send_message (SENDREPLY, NULL, NULL, Context, tag ? NULL : CURHDR); menu->redraw = REDRAW_FULL; break; @@ -2277,6 +2299,8 @@ int mutt_index_menu (void) break; case OP_BUFFY_LIST: + if (option (OPTFORCEBUFFYCHECK)) + buffy_check (1); buffy_list (); menu->redraw = REDRAW_FULL; break; @@ -2322,16 +2346,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);