+ /* we need to restart the whole thing */
+ for (i = 0; i < maxLine; i++) {
+ lineInfo[i].offset = 0;
+ lineInfo[i].type = -1;
+ lineInfo[i].continuation = 0;
+ lineInfo[i].chunks = 0;
+ lineInfo[i].search_cnt = -1;
+ lineInfo[i].quote = NULL;
+
+ p_realloc(&(lineInfo[i].syntax), 1);
+ if (SearchCompiled && lineInfo[i].search)
+ p_delete(&(lineInfo[i].search));
+ }
+
+ if (SearchCompiled) {
+ regfree (&SearchRE);
+ SearchCompiled = 0;
+ }
+ SearchFlag = 0;
+
+ /* try to keep the old position */
+ topline = 0;
+ lastLine = 0;
+ while (j > 0 && display_line (fp, &last_pos, &lineInfo, topline,
+ &lastLine, &maxLine,
+ (has_types ? M_TYPES : 0),
+ &QuoteList, &q_level, &force_redraw,
+ &SearchRE) == 0) {
+ redraw |= REDRAW_SIDEBAR;
+ if (!lineInfo[topline].continuation)
+ j--;
+ if (j > 0)
+ topline++;
+ }
+
+ ch = 0;
+ }
+
+ if (option (OPTFORCEREDRAWPAGER))
+ redraw = REDRAW_FULL;
+ unset_option (OPTFORCEREDRAWINDEX);
+ unset_option (OPTFORCEREDRAWPAGER);
+ break;
+
+ case OP_FLAG_MESSAGE:
+ CHECK_MODE (IsHeader (extra));
+ CHECK_READONLY;
+
+ CHECK_MX_ACL (Context, ACL_WRITE, _("Flagging"));
+
+ mutt_set_flag (Context, extra->hdr, M_FLAG, !extra->hdr->flagged);
+ redraw = REDRAW_STATUS | REDRAW_INDEX;
+ if (option (OPTRESOLVE)) {
+ ch = -1;
+ rc = OP_MAIN_NEXT_UNDELETED;
+ }
+ break;
+
+ case OP_PIPE:
+ CHECK_MODE (IsHeader (extra) || IsAttach (extra));
+ if (IsAttach (extra))
+ mutt_pipe_attachment_list (extra->fp, 0, extra->bdy, 0);
+ else
+ mutt_pipe_message (extra->hdr);
+ MAYBE_REDRAW (redraw);
+ break;
+
+ case OP_PRINT:
+ CHECK_MODE (IsHeader (extra) || IsAttach (extra));
+ if (IsAttach (extra))
+ mutt_print_attachment_list (extra->fp, 0, extra->bdy);
+ else
+ mutt_print_message (extra->hdr);
+ break;
+
+ case OP_MAIL:
+ CHECK_MODE (IsHeader (extra) && !IsAttach (extra));
+ CHECK_ATTACH;
+ ci_send_message (0, NULL, NULL, extra->ctx, NULL);
+ redraw = REDRAW_FULL;
+ break;
+
+#ifdef USE_NNTP
+ case OP_POST:
+ CHECK_MODE (IsHeader (extra) && !IsAttach (extra));
+ CHECK_ATTACH;
+ if (extra->ctx && extra->ctx->magic == M_NNTP &&
+ !((NNTP_DATA *) extra->ctx->data)->allowed &&
+ query_quadoption (OPT_TOMODERATED,
+ _
+ ("Posting to this group not allowed, may be moderated. Continue?"))
+ != M_YES)
+ break;
+ ci_send_message (SENDNEWS, NULL, NULL, extra->ctx, NULL);
+ redraw = REDRAW_FULL;
+ break;
+
+ case OP_FORWARD_TO_GROUP:
+ CHECK_MODE (IsHeader (extra) || IsMsgAttach (extra));
+ CHECK_ATTACH;
+ if (extra->ctx && extra->ctx->magic == M_NNTP &&
+ !((NNTP_DATA *) extra->ctx->data)->allowed &&
+ query_quadoption (OPT_TOMODERATED,
+ _
+ ("Posting to this group not allowed, may be moderated. Continue?"))
+ != M_YES)
+ break;
+ if (IsMsgAttach (extra))
+ mutt_attach_forward (extra->fp, extra->hdr, extra->idx,
+ extra->idxlen, extra->bdy, SENDNEWS);
+ else
+ ci_send_message (SENDNEWS | SENDFORWARD, NULL, NULL, extra->ctx,
+ extra->hdr);
+ redraw = REDRAW_FULL;
+ break;
+
+ case OP_FOLLOWUP:
+ CHECK_MODE (IsHeader (extra) || IsMsgAttach (extra));
+ CHECK_ATTACH;
+
+ if (IsMsgAttach (extra))
+ followup_to = extra->bdy->hdr->env->followup_to;
+ else
+ followup_to = extra->hdr->env->followup_to;
+
+ if (!followup_to || m_strcasecmp(followup_to, "poster") ||
+ query_quadoption (OPT_FOLLOWUPTOPOSTER,
+ _("Reply by mail as poster prefers?")) != M_YES) {
+ if (extra->ctx && extra->ctx->magic == M_NNTP
+ && !((NNTP_DATA *) extra->ctx->data)->allowed
+ && query_quadoption (OPT_TOMODERATED,
+ _
+ ("Posting to this group not allowed, may be moderated. Continue?"))
+ != M_YES)
+ break;
+ if (IsMsgAttach (extra))
+ mutt_attach_reply (extra->fp, extra->hdr, extra->idx,
+ extra->idxlen, extra->bdy, SENDNEWS | SENDREPLY);
+ else
+ ci_send_message (SENDNEWS | SENDREPLY, NULL, NULL,
+ extra->ctx, extra->hdr);
+ redraw = REDRAW_FULL;
+ break;
+ }