X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=compose.c;h=7c7517ab3998b92d8eed9a8763cc9df6d8efbe7c;hp=c695f3b929407e85f64d5dbfce8dde4c9af0e7d5;hb=7dcd7ee09b8760133ac8ec00562e4d60b2f0aebd;hpb=fc7b90fd61ac9efd35a5b506cc10679969d84cba diff --git a/compose.c b/compose.c index c695f3b..7c7517a 100644 --- a/compose.c +++ b/compose.c @@ -15,25 +15,24 @@ #include #include -#include -#include +#include #include #include #include #include "mutt.h" #include "alias.h" +#include "crypt.h" #include "mutt_idna.h" #include "attach.h" #include "recvattach.h" #include "sort.h" #include "charset.h" #include "buffy.h" -#include "remailer.h" #ifdef USE_NNTP -#include +#include "nntp.h" #endif #define CHECK_COUNT \ @@ -50,7 +49,6 @@ enum { HDR_SUBJECT, HDR_REPLYTO, HDR_FCC, - HDR_MIX, HDR_CRYPT, HDR_CRYPTINFO, @@ -70,8 +68,7 @@ enum { #define HDR_XOFFSET 14 #define TITLE_FMT "%14s" /* Used for Prompts, which are ASCII */ -#define SW (option(OPTMBOXPANE)?SidebarWidth:0) -#define W (COLS - HDR_XOFFSET - SW) +#define W (getmaxx(main_w) - HDR_XOFFSET) static const char *Prompts[] = { "From: ", @@ -86,36 +83,9 @@ static const char *Prompts[] = { #endif }; -static struct mapping_t ComposeHelp[] = { - {N_("Send"), OP_COMPOSE_SEND_MESSAGE}, - {N_("Abort"), OP_EXIT}, - {"To", OP_COMPOSE_EDIT_TO}, - {"CC", OP_COMPOSE_EDIT_CC}, - {"Subj", OP_COMPOSE_EDIT_SUBJECT}, - {N_("Attach file"), OP_COMPOSE_ATTACH_FILE}, - {N_("Descrip"), OP_COMPOSE_EDIT_DESCRIPTION}, - {N_("Help"), OP_HELP}, - {NULL, OP_NULL} -}; - -#ifdef USE_NNTP -static struct mapping_t ComposeNewsHelp[] = { - {N_("Send"), OP_COMPOSE_SEND_MESSAGE}, - {N_("Abort"), OP_EXIT}, - {"Newsgroups", OP_COMPOSE_EDIT_NEWSGROUPS}, - {"Subj", OP_COMPOSE_EDIT_SUBJECT}, - {N_("Attach file"), OP_COMPOSE_ATTACH_FILE}, - {N_("Descrip"), OP_COMPOSE_EDIT_DESCRIPTION}, - {N_("Help"), OP_HELP}, - {NULL, OP_NULL} -}; -#endif - - static void snd_entry (char *b, ssize_t blen, MUTTMENU * menu, int num) { - m_strformat(b, blen, COLS - SW, AttachFormat, mutt_attach_fmt, - ((ATTACHPTR **)menu->data)[num], - M_FORMAT_STAT_FILE | (option(OPTARROWCURSOR) ? M_FORMAT_ARROWCURSOR : 0)); + m_strformat(b, blen, getmaxx(main_w), AttachFormat, mutt_attach_fmt, + ((ATTACHPTR **)menu->data)[num], M_FORMAT_STAT_FILE); } static void redraw_crypt_lines (HEADER * msg) @@ -123,79 +93,50 @@ static void redraw_crypt_lines (HEADER * msg) int off = 0; if (!msg->security) - mvaddstr (HDR_CRYPT, SW, " Security: "); + mvwaddstr (main_w, HDR_CRYPT, 0, " Security: "); else if (msg->security & APPLICATION_SMIME) - mvaddstr (HDR_CRYPT, SW, " S/MIME: "); + mvwaddstr (main_w, HDR_CRYPT, 0, " S/MIME: "); else if (msg->security & APPLICATION_PGP) - mvaddstr (HDR_CRYPT, SW, " PGP: "); + mvwaddstr (main_w, HDR_CRYPT, 0, " PGP: "); if ((msg->security & (ENCRYPT | SIGN)) == (ENCRYPT | SIGN)) - addstr (_("Sign, Encrypt")); + waddstr (main_w, _("Sign, Encrypt")); else if (msg->security & ENCRYPT) - addstr (_("Encrypt")); + waddstr (main_w, _("Encrypt")); else if (msg->security & SIGN) - addstr (_("Sign")); + waddstr (main_w, _("Sign")); else - addstr (_("Clear")); + waddstr (main_w, _("Clear")); if ((msg->security & APPLICATION_PGP) && (msg->security & (ENCRYPT | SIGN))) { if ((msg->security & INLINE)) - addstr (_(" (inline)")); + waddstr (main_w, _(" (inline)")); else - addstr (_(" (PGP/MIME)")); + waddstr (main_w, _(" (PGP/MIME)")); } - clrtoeol (); + wclrtoeol (main_w); - move (HDR_CRYPTINFO, SW); - clrtoeol (); + wmove (main_w, HDR_CRYPTINFO, 0); + wclrtoeol (main_w); if (msg->security & APPLICATION_PGP && msg->security & SIGN) - printw ("%s%s", _(" sign as: "), + wprintw (main_w, "%s%s", _(" sign as: "), PgpSignAs ? PgpSignAs : _("")); if (msg->security & APPLICATION_SMIME && msg->security & SIGN) { - printw ("%s%s", _(" sign as: "), + wprintw (main_w, "%s%s", _(" sign as: "), SmimeDefaultKey ? SmimeDefaultKey : _("")); } if ((msg->security & APPLICATION_SMIME) && (msg->security & ENCRYPT) && SmimeCryptAlg && *SmimeCryptAlg) { - mvprintw (HDR_CRYPTINFO, SW + 40, "%s%s", _("Encrypt with: "), + mvwprintw (main_w, HDR_CRYPTINFO, 40, "%s%s", _("Encrypt with: "), NONULL (SmimeCryptAlg)); off = 20; } } -static void redraw_mix_line (string_list_t * chain) -{ - int c; - const char *t; - - mvaddstr (HDR_MIX, SW, " Mix: "); - - if (!chain) { - addstr (""); - clrtoeol (); - return; - } - - for (c = 12; chain; chain = chain->next) { - t = chain->data; - if (t && t[0] == '0' && t[1] == '\0') - t = ""; - - if (c + m_strlen(t) + 2 >= COLS - SW) - break; - - addstr (NONULL (t)); - if (chain->next) - addstr (", "); - - c += m_strlen(t) + 2; - } -} - static int check_attachments (ATTACHPTR ** idx, short idxlen) { int i, r; @@ -231,8 +172,8 @@ static void draw_envelope_addr (int line, address_t * addr) buf[0] = 0; rfc822_addrcat(buf, sizeof (buf), addr, 1); - mvprintw (line, SW, TITLE_FMT, Prompts[line - 1]); - mutt_paddstr (W, buf); + mvwprintw (main_w, line, 0, TITLE_FMT, Prompts[line - 1]); + mutt_paddstr (main_w, W, buf); } static void draw_envelope (HEADER * msg, char *fcc) @@ -246,32 +187,27 @@ static void draw_envelope (HEADER * msg, char *fcc) draw_envelope_addr (HDR_BCC, msg->env->bcc); #ifdef USE_NNTP } else { - mvprintw (HDR_TO, SW, TITLE_FMT, Prompts[HDR_NEWSGROUPS - 1]); - mutt_paddstr (W, NONULL (msg->env->newsgroups)); - mvprintw (HDR_CC, SW, TITLE_FMT, Prompts[HDR_FOLLOWUPTO - 1]); - mutt_paddstr (W, NONULL (msg->env->followup_to)); - if (option (OPTXCOMMENTTO)) { - mvprintw (HDR_BCC, 0, TITLE_FMT, Prompts[HDR_XCOMMENTTO - 1]); - mutt_paddstr (W, NONULL (msg->env->x_comment_to)); - } + mvwprintw (main_w, HDR_TO, 0, TITLE_FMT, Prompts[HDR_NEWSGROUPS - 1]); + mutt_paddstr (main_w, W, NONULL (msg->env->newsgroups)); + mvwprintw (main_w, HDR_CC, 0, TITLE_FMT, Prompts[HDR_FOLLOWUPTO - 1]); + mutt_paddstr (main_w, W, NONULL (msg->env->followup_to)); } #endif - mvprintw (HDR_SUBJECT, SW, TITLE_FMT, Prompts[HDR_SUBJECT - 1]); - mutt_paddstr (W, NONULL (msg->env->subject)); + mvwprintw (main_w, HDR_SUBJECT, 0, TITLE_FMT, Prompts[HDR_SUBJECT - 1]); + mutt_paddstr (main_w, W, NONULL (msg->env->subject)); draw_envelope_addr (HDR_REPLYTO, msg->env->reply_to); - mvprintw (HDR_FCC, SW, TITLE_FMT, Prompts[HDR_FCC - 1]); - mutt_paddstr (W, fcc); + mvwprintw (main_w, HDR_FCC, 0, TITLE_FMT, Prompts[HDR_FCC - 1]); + mutt_paddstr (main_w, W, fcc); redraw_crypt_lines (msg); - redraw_mix_line (msg->chain); - SETCOLOR (MT_COLOR_STATUS); - mvaddstr (HDR_ATTACH - 1, SW, _("-- Attachments")); - BKGDSET (MT_COLOR_STATUS); - clrtoeol (); + SETCOLOR(main_w, MT_COLOR_STATUS); + mvwaddstr (main_w, HDR_ATTACH - 1, 0, _("-- Attachments")); + BKGDSET(main_w, MT_COLOR_STATUS); + wclrtoeol (main_w); - BKGDSET (MT_COLOR_NORMAL); - SETCOLOR (MT_COLOR_NORMAL); + BKGDSET(main_w, MT_COLOR_NORMAL); + SETCOLOR(main_w, MT_COLOR_NORMAL); } static int edit_address_list (int line, address_t ** addr) @@ -301,8 +237,8 @@ static int edit_address_list (int line, address_t ** addr) /* redraw the expanded list so the user can see the result */ buf[0] = 0; rfc822_addrcat(buf, sizeof (buf), *addr, 1); - move (line, HDR_XOFFSET + SW); - mutt_paddstr (W, buf); + wmove (main_w, line, HDR_XOFFSET); + mutt_paddstr (main_w, W, buf); return 0; } @@ -426,7 +362,7 @@ static const char *compose_format_str (char *buf, ssize_t buflen, char op, case 'h': /* hostname */ snprintf (fmt, sizeof (fmt), "%%%ss", prefix); - snprintf (buf, buflen, fmt, NONULL (Hostname)); + snprintf (buf, buflen, fmt, NONULL(mod_core.shorthost)); break; case 'l': /* approx length of current message in bytes */ @@ -457,7 +393,7 @@ static const char *compose_format_str (char *buf, ssize_t buflen, char op, static void compose_status_line (char *buf, ssize_t buflen, MUTTMENU * menu, const char *p) { - m_strformat(buf, buflen, COLS - SW, p, compose_format_str, menu, 0); + m_strformat(buf, buflen, getmaxx(main_w), p, compose_format_str, menu, 0); } /* return values: @@ -471,7 +407,6 @@ int mutt_compose_menu (HEADER * msg, /* structure for new message */ ssize_t fcclen, HEADER * cur __attribute__ ((unused))) { /* current message */ - char helpstr[STRING]; char buf[LONG_STRING]; char fname[_POSIX_PATH_MAX]; MUTTMENU *menu; @@ -506,14 +441,6 @@ int mutt_compose_menu (HEADER * msg, /* structure for new message */ menu->make_entry = snd_entry; menu->tag = mutt_tag_attach; menu->data = idx; -#ifdef USE_NNTP - if (news) - menu->help = mutt_compile_help(helpstr, sizeof(helpstr), MENU_COMPOSE, - ComposeNewsHelp); - else -#endif - menu->help = mutt_compile_help(helpstr, sizeof(helpstr), MENU_COMPOSE, - ComposeHelp); if (option (OPTMBOXPANE)) buffy_check (0); @@ -573,10 +500,10 @@ int mutt_compose_menu (HEADER * msg, /* structure for new message */ p_delete(&msg->env->newsgroups); m_strrtrim(buf); msg->env->newsgroups = m_strdup(skipspaces(buf)); - move (HDR_TO, HDR_XOFFSET); - clrtoeol (); + wmove (main_w, HDR_TO, HDR_XOFFSET); + wclrtoeol (main_w); if (msg->env->newsgroups) - printw ("%-*.*s", W, W, msg->env->newsgroups); + wprintw (main_w, "%-*.*s", W, W, msg->env->newsgroups); } } break; @@ -591,30 +518,14 @@ int mutt_compose_menu (HEADER * msg, /* structure for new message */ p_delete(&msg->env->followup_to); m_strrtrim(buf); msg->env->followup_to = m_strdup(skipspaces(buf)); - move (HDR_CC, HDR_XOFFSET); - clrtoeol (); + wmove (main_w, HDR_CC, HDR_XOFFSET); + wclrtoeol (main_w); if (msg->env->followup_to) - printw ("%-*.*s", W, W, msg->env->followup_to); + wprintw (main_w, "%-*.*s", W, W, msg->env->followup_to); } } break; - case OP_COMPOSE_EDIT_X_COMMENT_TO: - if (news && option (OPTXCOMMENTTO)) { - buf[0] = 0; - if (msg->env->x_comment_to) - m_strcpy(buf, sizeof(buf), msg->env->x_comment_to); - if (mutt_get_field ("X-Comment-To: ", buf, sizeof (buf), 0) == 0 - && buf[0]) { - p_delete(&msg->env->x_comment_to); - msg->env->x_comment_to = m_strdup(buf); - move (HDR_BCC, HDR_XOFFSET); - clrtoeol (); - if (msg->env->x_comment_to) - printw ("%-*.*s", W, W, msg->env->x_comment_to); - } - } - break; #endif case OP_COMPOSE_EDIT_SUBJECT: if (msg->env->subject) @@ -623,10 +534,10 @@ int mutt_compose_menu (HEADER * msg, /* structure for new message */ buf[0] = 0; if (mutt_get_field ("Subject: ", buf, sizeof (buf), 0) == 0) { m_strreplace(&msg->env->subject, buf); - move (HDR_SUBJECT, HDR_XOFFSET + SW); - clrtoeol (); + wmove (main_w, HDR_SUBJECT, HDR_XOFFSET); + wclrtoeol (main_w); if (msg->env->subject) - mutt_paddstr (W, msg->env->subject); + mutt_paddstr (main_w, W, msg->env->subject); } mutt_message_hook (NULL, msg, M_SEND2HOOK); break; @@ -639,16 +550,16 @@ int mutt_compose_menu (HEADER * msg, /* structure for new message */ if (mutt_get_field ("Fcc: ", buf, sizeof (buf), M_FILE | M_CLEAR) == 0) { m_strcpy(fcc, _POSIX_PATH_MAX, buf); mutt_pretty_mailbox (fcc); - move (HDR_FCC, HDR_XOFFSET + SW); - mutt_paddstr (W, fcc); + wmove (main_w, HDR_FCC, HDR_XOFFSET); + mutt_paddstr (main_w, W, fcc); fccSet = 1; } MAYBE_REDRAW (menu->redraw); mutt_message_hook (NULL, msg, M_SEND2HOOK); break; case OP_COMPOSE_EDIT_MESSAGE: - if (Editor && !option (OPTEDITHDRS)) { - mutt_edit_file (Editor, msg->content->filename); + if (!option (OPTEDITHDRS)) { + mutt_edit_file(msg->content->filename); mutt_update_encoding (msg->content); menu->redraw = REDRAW_CURRENT | REDRAW_STATUS; mutt_message_hook (NULL, msg, M_SEND2HOOK); @@ -662,8 +573,7 @@ int mutt_compose_menu (HEADER * msg, /* structure for new message */ char *err = NULL; mutt_env_to_local (msg->env); - mutt_edit_headers (NONULL (Editor), msg->content->filename, msg, - fcc, fcclen); + mutt_edit_headers(msg->content->filename, msg, fcc, fcclen); if (mutt_env_to_idna (msg->env, &tag, &err)) { mutt_error (_("Bad IDN in \"%s\": '%s'"), tag, err); p_delete(&err); @@ -687,34 +597,10 @@ int mutt_compose_menu (HEADER * msg, /* structure for new message */ mutt_message_hook (NULL, msg, M_SEND2HOOK); break; - case OP_COMPOSE_ATTACH_KEY: - if (idxlen == idxmax) { - p_realloc(&idx, idxmax += 5); - menu->data = idx; - } - - idx[idxlen] = p_new(ATTACHPTR, 1); - if ((idx[idxlen]->content = - crypt_pgp_make_key_attachment (NULL)) != NULL) { - update_idx (menu, idx, idxlen++); - menu->redraw |= REDRAW_INDEX; - } - else - p_delete(&idx[idxlen]); - - menu->redraw |= REDRAW_STATUS; - - if (option (OPTNEEDREDRAW)) { - menu->redraw = REDRAW_FULL; - unset_option (OPTNEEDREDRAW); - } - - mutt_message_hook (NULL, msg, M_SEND2HOOK); - break; - case OP_COMPOSE_ATTACH_FILE: { - char *prompt, **files; + const char *prompt; + char **files; int error, numfiles; fname[0] = 0; @@ -765,7 +651,7 @@ int mutt_compose_menu (HEADER * msg, /* structure for new message */ case OP_COMPOSE_ATTACH_NEWS_MESSAGE: #endif { - char *prompt; + const char *prompt; HEADER *h; fname[0] = 0; @@ -1006,9 +892,6 @@ int mutt_compose_menu (HEADER * msg, /* structure for new message */ break; } - if (msg->chain && mix_check_message (msg) != 0) - break; - if (!fccSet && *fcc) { if ((i = query_quadoption (OPT_COPY, _("Save a copy of this message?"))) == -1) @@ -1023,7 +906,7 @@ int mutt_compose_menu (HEADER * msg, /* structure for new message */ case OP_COMPOSE_EDIT_FILE: CHECK_COUNT; - mutt_edit_file (NONULL (Editor), idx[menu->current]->content->filename); + mutt_edit_file(idx[menu->current]->content->filename); mutt_update_encoding (idx[menu->current]->content); menu->redraw = REDRAW_CURRENT | REDRAW_STATUS; mutt_message_hook (NULL, msg, M_SEND2HOOK); @@ -1087,7 +970,7 @@ int mutt_compose_menu (HEADER * msg, /* structure for new message */ int itype; FILE *fp; - CLEARLINE (LINES - 1); + CLEARLINE(main_w, LINES - 1); fname[0] = 0; if (mutt_get_field (_("New file: "), fname, sizeof (fname), M_FILE) != 0 || !fname[0]) @@ -1231,20 +1114,7 @@ int mutt_compose_menu (HEADER * msg, /* structure for new message */ r = 1; break; - case OP_COMPOSE_ISPELL: - endwin (); - snprintf (buf, sizeof (buf), "%s -x %s", NONULL (Ispell), - msg->content->filename); - if (mutt_system (buf) == -1) - mutt_error (_("Error running \"%s\"!"), buf); - else { - mutt_update_encoding (msg->content); - menu->redraw |= REDRAW_STATUS; - } - break; - case OP_COMPOSE_WRITE_MESSAGE: - fname[0] = '\0'; if (Context) { m_strcpy(fname, sizeof(fname), NONULL(Context->path)); @@ -1277,15 +1147,11 @@ int mutt_compose_menu (HEADER * msg, /* structure for new message */ } msg->security = 0; } - msg->security = crypt_pgp_send_menu (msg, &menu->redraw); + msg->security = crypt_send_menu (msg, &menu->redraw, 0); redraw_crypt_lines (msg); mutt_message_hook (NULL, msg, M_SEND2HOOK); break; - case OP_FORGET_PASSPHRASE: - crypt_forget_passphrase (); - break; - case OP_COMPOSE_SMIME_MENU: if (msg->security & APPLICATION_PGP) { if (mutt_yesorno (_("PGP already selected. Clear & continue ? "), @@ -1295,25 +1161,20 @@ int mutt_compose_menu (HEADER * msg, /* structure for new message */ } msg->security = 0; } - msg->security = crypt_smime_send_menu (msg, &menu->redraw); + msg->security = crypt_send_menu(msg, &menu->redraw, 1); redraw_crypt_lines (msg); mutt_message_hook (NULL, msg, M_SEND2HOOK); break; - - case OP_COMPOSE_MIX: - mix_make_chain (&msg->chain, &menu->redraw); - mutt_message_hook (NULL, msg, M_SEND2HOOK); - break; } /* Draw formated compose status line */ if (menu->redraw & REDRAW_STATUS) { compose_status_line (buf, sizeof (buf), menu, NONULL (ComposeFormat)); - CLEARLINE (option (OPTSTATUSONTOP) ? 0 : LINES - 2); - SETCOLOR (MT_COLOR_STATUS); - move (option (OPTSTATUSONTOP) ? 0 : LINES - 2, SW); - printw ("%-*.*s", COLS-SW, COLS-SW, buf); - SETCOLOR (MT_COLOR_NORMAL); + CLEARLINE(main_w, 0); + SETCOLOR(main_w, MT_COLOR_STATUS); + wmove (main_w, 0, 0); + wprintw (main_w, "%-*.*s", getmaxx(main_w), getmaxx(main_w), buf); + SETCOLOR(main_w, MT_COLOR_NORMAL); menu->redraw &= ~REDRAW_STATUS; } }