diff -rc pine4.63/pico/estruct.h pine4.63.reply-all/pico/estruct.h *** pine4.63/pico/estruct.h 2004-11-30 16:39:55.000000000 -0800 --- pine4.63.reply-all/pico/estruct.h 2005-07-04 14:41:36.000000000 -0700 *************** *** 207,212 **** --- 207,213 ---- #define KS_SELECTCUR #define KS_UNDO #define KS_SPELLCHK + #define KS_REPLYALL #endif diff -rc pine4.63/pico/msmenu.h pine4.63.reply-all/pico/msmenu.h *** pine4.63/pico/msmenu.h 1998-02-27 16:10:30.000000000 -0800 --- pine4.63.reply-all/pico/msmenu.h 2005-07-04 14:41:36.000000000 -0700 *************** *** 94,101 **** #define KS_SELECTCUR 196 #define KS_UNDO 197 #define KS_SPELLCHK 198 ! #define KS_RANGEEND 198 #define KS_COUNT ((KS_RANGEEND - KS_RANGESTART) + 1) --- 94,102 ---- #define KS_SELECTCUR 196 #define KS_UNDO 197 #define KS_SPELLCHK 198 + #define KS_REPLYALL 199 ! #define KS_RANGEEND 199 #define KS_COUNT ((KS_RANGEEND - KS_RANGESTART) + 1) diff -rc pine4.63/pico/resource.h pine4.63.reply-all/pico/resource.h *** pine4.63/pico/resource.h 2003-08-22 16:58:22.000000000 -0700 --- pine4.63.reply-all/pico/resource.h 2005-07-04 14:41:36.000000000 -0700 *************** *** 96,101 **** --- 96,102 ---- #define IDM_MI_SELECTCUR 196 #define IDM_MI_UNDO 197 #define IDM_MI_SPELLCHK 198 + #define IDM_MI_REPLY_ALL 199 #define IDM_OPT_CARETBLOCK 200 #define IDM_OPT_CARETSMALLBLOCK 201 #define IDM_OPT_CARETHBAR 202 diff -rc pine4.63/pine/init.c pine4.63.reply-all/pine/init.c *** pine4.63/pine/init.c 2005-04-07 11:01:42.000000000 -0700 --- pine4.63.reply-all/pine/init.c 2005-07-04 14:41:36.000000000 -0700 *************** *** 2619,2624 **** --- 2619,2626 ---- F_AUTO_REPLY_TO, h_config_auto_reply_to, PREF_RPLY}, {"signature-at-bottom", F_SIG_AT_BOTTOM, h_config_sig_at_bottom, PREF_RPLY}, + {"separate-reply-all", + F_SEPARATE_REPLY_ALL, h_config_separate_reply_all, PREF_RPLY}, {"strip-from-sigdashes-on-reply", F_ENABLE_STRIP_SIGDASHES, h_config_strip_sigdashes, PREF_RPLY}, Only in pine4.63.reply-all/pine: init.c.orig diff -rc pine4.63/pine/mailcmd.c pine4.63.reply-all/pine/mailcmd.c *** pine4.63/pine/mailcmd.c 2005-04-27 11:54:59.000000000 -0700 --- pine4.63.reply-all/pine/mailcmd.c 2005-07-04 14:41:36.000000000 -0700 *************** *** 60,66 **** */ void cmd_delete PROTO((struct pine *, MSGNO_S *, int, CmdWhere)); void cmd_undelete PROTO((struct pine *, MSGNO_S *, int)); ! void cmd_reply PROTO((struct pine *, MSGNO_S *, int)); void cmd_forward PROTO((struct pine *, MSGNO_S *, int)); void cmd_bounce PROTO((struct pine *, MSGNO_S *, int)); void cmd_print PROTO((struct pine *, MSGNO_S *, int, CmdWhere)); --- 60,66 ---- */ void cmd_delete PROTO((struct pine *, MSGNO_S *, int, CmdWhere)); void cmd_undelete PROTO((struct pine *, MSGNO_S *, int)); ! void cmd_reply PROTO((struct pine *, MSGNO_S *, int, int)); void cmd_forward PROTO((struct pine *, MSGNO_S *, int)); void cmd_bounce PROTO((struct pine *, MSGNO_S *, int)); void cmd_print PROTO((struct pine *, MSGNO_S *, int, CmdWhere)); *************** *** 601,609 **** /*---------- Reply to message ----------*/ case MC_REPLY : ! cmd_reply(state, msgmap, 0); break; /*---------- Forward message ----------*/ case MC_FORWARD : --- 601,614 ---- /*---------- Reply to message ----------*/ case MC_REPLY : ! cmd_reply(state, msgmap, 0, (F_ON(F_SEPARATE_REPLY_ALL, ps_global)) ? ! RSF_NONE : RSF_QUERY_REPLY_ALL); break; + /*---------- Reply-all to message ----------*/ + case MC_REPLY_ALL : + cmd_reply(state, msgmap, 0, RSF_FORCE_REPLY_ALL); + break; /*---------- Forward message ----------*/ case MC_FORWARD : *************** *** 2812,2821 **** ----*/ void ! cmd_reply(state, msgmap, agg) struct pine *state; MSGNO_S *msgmap; int agg; { if(any_messages(msgmap, NULL, "to Reply to")){ #if defined(DOS) && !defined(WIN32) --- 2817,2827 ---- ----*/ void ! cmd_reply(state, msgmap, agg, flags) struct pine *state; MSGNO_S *msgmap; int agg; + int flags; { if(any_messages(msgmap, NULL, "to Reply to")){ #if defined(DOS) && !defined(WIN32) *************** *** 2824,2830 **** if(agg && !pseudo_selected(msgmap)) return; ! reply(state, NULL); if(agg) restore_selected(msgmap); --- 2830,2836 ---- if(agg && !pseudo_selected(msgmap)) return; ! reply(state, NULL, flags); if(agg) restore_selected(msgmap); *************** *** 3123,3129 **** break; case 'r': ! reply(state, role); break; case 'f': --- 3129,3135 ---- break; case 'r': ! reply(state, role, 0); break; case 'f': *************** *** 11551,11556 **** --- 11557,11569 ---- sel_opts3[i++].label = "Bounce"; } + if(F_ON(F_SEPARATE_REPLY_ALL,state)){ /* reply all? */ + sel_opts3[i].ch = '='; + sel_opts3[i].rval = '='; + sel_opts3[i].name = "="; + sel_opts3[i++].label = "Reply All"; + } + if(flags & AC_FROM_THREAD){ if(flags & (AC_COLL | AC_EXPN)){ sel_opts3[i].ch = '/'; *************** *** 11605,11611 **** break; case 'r' : /* reply */ ! cmd_reply(state, msgmap, agg); break; case 'f' : /* Forward */ --- 11618,11629 ---- break; case 'r' : /* reply */ ! cmd_reply(state, msgmap, agg, (F_ON(F_SEPARATE_REPLY_ALL, ps_global)) ? ! RSF_NONE : RSF_QUERY_REPLY_ALL); ! break; ! ! case '=' : /* reply all */ ! cmd_reply(state, msgmap, agg, RSF_FORCE_REPLY_ALL); break; case 'f' : /* Forward */ Only in pine4.63.reply-all/pine: mailcmd.c.orig diff -rc pine4.63/pine/mailindx.c pine4.63.reply-all/pine/mailindx.c *** pine4.63/pine/mailindx.c 2005-04-27 11:55:00.000000000 -0700 --- pine4.63.reply-all/pine/mailindx.c 2005-07-04 14:41:36.000000000 -0700 *************** *** 112,118 **** RCOMPOSE_MENU, HOMEKEY_MENU, ENDKEY_MENU, ! NULL_MENU, {"/","Collapse/Expand",{MC_COLLAPSE,1,{'/'}},KS_NONE}, NULL_MENU, NULL_MENU}; --- 112,118 ---- RCOMPOSE_MENU, HOMEKEY_MENU, ENDKEY_MENU, ! REPLY_ALL_MENU, {"/","Collapse/Expand",{MC_COLLAPSE,1,{'/'}},KS_NONE}, NULL_MENU, NULL_MENU}; *************** *** 131,136 **** --- 131,137 ---- #define SELCUR_KEY 38 #define ZOOM_KEY 39 #define COLLAPSE_KEY 45 + #define REPLY_ALL_KEY 44 /* used for thread_keymenu, too */ static struct key simple_index_keys[] = {HELP_MENU, *************** *** 197,203 **** RCOMPOSE_MENU, HOMEKEY_MENU, ENDKEY_MENU, ! NULL_MENU, {"/","Collapse/Expand",{MC_COLLAPSE,1,{'/'}},KS_NONE}, NULL_MENU, NULL_MENU}; --- 198,204 ---- RCOMPOSE_MENU, HOMEKEY_MENU, ENDKEY_MENU, ! REPLY_ALL_MENU, {"/","Collapse/Expand",{MC_COLLAPSE,1,{'/'}},KS_NONE}, NULL_MENU, NULL_MENU}; *************** *** 535,540 **** --- 536,543 ---- km->keys[EXCLUDE_KEY].label = "eXpunge"; KS_OSDATASET(&km->keys[EXCLUDE_KEY], KS_EXPUNGE); } + if(F_OFF(F_SEPARATE_REPLY_ALL,ps_global)) + clrbitn(REPLY_ALL_KEY, bitmap); } if(km != &simple_index_keymenu && !THRD_COLLAPSE_ENABLE()) diff -rc pine4.63/pine/mailpart.c pine4.63.reply-all/pine/mailpart.c *** pine4.63/pine/mailpart.c 2005-04-27 11:55:01.000000000 -0700 --- pine4.63.reply-all/pine/mailpart.c 2005-07-04 14:41:36.000000000 -0700 *************** *** 171,177 **** {"%", "Print", MC_PRINTMSG,1,{'%'}, KS_PRINT}, INDEX_MENU, REPLY_MENU, ! FORWARD_MENU}; INST_KEY_MENU(att_index_keymenu, att_index_keys); #define ATT_PARENT_KEY 2 #define ATT_EXPORT_KEY 11 --- 171,190 ---- {"%", "Print", MC_PRINTMSG,1,{'%'}, KS_PRINT}, INDEX_MENU, REPLY_MENU, ! FORWARD_MENU, ! ! HELP_MENU, ! OTHER_MENU, ! NULL_MENU, ! NULL_MENU, ! NULL_MENU, ! NULL_MENU, ! NULL_MENU, ! NULL_MENU, ! REPLY_ALL_MENU, ! NULL_MENU, ! NULL_MENU, ! NULL_MENU}; INST_KEY_MENU(att_index_keymenu, att_index_keys); #define ATT_PARENT_KEY 2 #define ATT_EXPORT_KEY 11 *************** *** 180,185 **** --- 193,199 ---- #define ATT_PRINT_KEY 20 #define ATT_REPLY_KEY 22 #define ATT_FORWARD_KEY 23 + #define ATT_REPLY_ALL_KEY 32 static struct key att_view_keys[] = *************** *** 206,212 **** NULL_MENU, WHEREIS_MENU, {"%", "Print", MC_PRINTMSG,1,{'%'}, KS_PRINT}, ! NULL_MENU, REPLY_MENU, FORWARD_MENU}; INST_KEY_MENU(att_view_keymenu, att_view_keys); --- 220,226 ---- NULL_MENU, WHEREIS_MENU, {"%", "Print", MC_PRINTMSG,1,{'%'}, KS_PRINT}, ! REPLY_ALL_MENU, REPLY_MENU, FORWARD_MENU}; INST_KEY_MENU(att_view_keymenu, att_view_keys); *************** *** 218,223 **** --- 232,238 ---- #define ATV_PIPE_KEY 16 #define ATV_BOUNCE_KEY 17 #define ATV_PRINT_KEY 20 + #define ATV_REPLY_ALL_KEY 21 #define ATV_REPLY_KEY 22 #define ATV_FORWARD_KEY 23 *************** *** 248,254 **** void display_digest_att PROTO((long, ATTACH_S *, int)); void forward_attachment PROTO((MAILSTREAM *, long, ATTACH_S *)); void forward_msg_att PROTO((MAILSTREAM *, long, ATTACH_S *)); ! void reply_msg_att PROTO((MAILSTREAM *, long, ATTACH_S *)); void bounce_msg_att PROTO((MAILSTREAM *, long, char *, char *)); int scroll_attachment PROTO((char *, STORE_S *, SourceType, HANDLE_S *, ATTACH_S *, int)); --- 263,269 ---- void display_digest_att PROTO((long, ATTACH_S *, int)); void forward_attachment PROTO((MAILSTREAM *, long, ATTACH_S *)); void forward_msg_att PROTO((MAILSTREAM *, long, ATTACH_S *)); ! void reply_msg_att PROTO((MAILSTREAM *, long, ATTACH_S *, int)); void bounce_msg_att PROTO((MAILSTREAM *, long, char *, char *)); int scroll_attachment PROTO((char *, STORE_S *, SourceType, HANDLE_S *, ATTACH_S *, int)); *************** *** 544,549 **** --- 559,566 ---- || MIME_DGST(last_type, last_subtype)){ if(F_OFF(F_ENABLE_BOUNCE, ps)) clrbitn(ATT_BOUNCE_KEY, bitmap); + if(F_OFF(F_SEPARATE_REPLY_ALL, ps)) + clrbitn(ATT_REPLY_ALL_KEY, bitmap); km->keys[ATT_EXPORT_KEY].name = ""; km->keys[ATT_EXPORT_KEY].label = ""; *************** *** 551,556 **** --- 568,574 ---- else{ clrbitn(ATT_BOUNCE_KEY, bitmap); clrbitn(ATT_REPLY_KEY, bitmap); + clrbitn(ATT_REPLY_ALL_KEY, bitmap); if(last_type != TYPETEXT) clrbitn(ATT_PRINT_KEY, bitmap); *************** *** 914,920 **** break; case MC_REPLY : ! reply_msg_att(ps->mail_stream, msgno, current->attp); break; case MC_FORWARD : --- 932,945 ---- break; case MC_REPLY : ! reply_msg_att(ps->mail_stream, msgno, current->attp, ! (F_ON(F_SEPARATE_REPLY_ALL, ps_global)) ? ! RSF_NONE : RSF_QUERY_REPLY_ALL); ! break; ! ! case MC_REPLY_ALL : ! reply_msg_att(ps->mail_stream, msgno, current->attp, ! RSF_FORCE_REPLY_ALL); break; case MC_FORWARD : *************** *** 2686,2695 **** --- 2711,2723 ---- if(MIME_MSG_A(a) || MIME_DGST_A(a)){ if(F_OFF(F_ENABLE_BOUNCE, ps_global)) clrbitn(ATV_BOUNCE_KEY, sargs.keys.bitmap); + if(F_OFF(F_SEPARATE_REPLY_ALL, ps_global)) + clrbitn(ATV_REPLY_ALL_KEY, sargs.keys.bitmap); } else{ clrbitn(ATV_BOUNCE_KEY, sargs.keys.bitmap); clrbitn(ATV_REPLY_KEY, sargs.keys.bitmap); + clrbitn(ATV_REPLY_ALL_KEY, sargs.keys.bitmap); clrbitn(ATV_EXPORT_KEY, sargs.keys.bitmap); } *************** *** 2732,2738 **** break; case MC_REPLY : ! reply_msg_att(ps_global->mail_stream, rawno, sparms->proc.data.p); break; case MC_FORWARD : --- 2760,2773 ---- break; case MC_REPLY : ! reply_msg_att(ps_global->mail_stream, rawno, sparms->proc.data.p, ! (F_ON(F_SEPARATE_REPLY_ALL, ps_global)) ? ! RSF_NONE : RSF_QUERY_REPLY_ALL); ! break; ! ! case MC_REPLY_ALL : ! reply_msg_att(ps_global->mail_stream, rawno, sparms->proc.data.p, ! RSF_FORCE_REPLY_ALL); break; case MC_FORWARD : *************** *** 3431,3447 **** ----*/ void ! reply_msg_att(stream, msgno, a) MAILSTREAM *stream; long msgno; ATTACH_S *a; { ADDRESS *saved_from, *saved_to, *saved_cc, *saved_resent; ENVELOPE *outgoing; BODY *body; void *msgtext; char *tp, *prefix = NULL; ! int include_text = 0, flags = RSF_QUERY_REPLY_ALL; long rflags; PAT_STATE dummy; REDRAFT_POS_S *redraft_pos = NULL; --- 3466,3483 ---- ----*/ void ! reply_msg_att(stream, msgno, a, flags) MAILSTREAM *stream; long msgno; ATTACH_S *a; + int flags; { ADDRESS *saved_from, *saved_to, *saved_cc, *saved_resent; ENVELOPE *outgoing; BODY *body; void *msgtext; char *tp, *prefix = NULL; ! int include_text = 0; long rflags; PAT_STATE dummy; REDRAFT_POS_S *redraft_pos = NULL; Only in pine4.63.reply-all/pine: mailpart.c.orig diff -rc pine4.63/pine/mailview.c pine4.63.reply-all/pine/mailview.c *** pine4.63/pine/mailview.c 2005-04-27 11:55:02.000000000 -0700 --- pine4.63.reply-all/pine/mailview.c 2005-07-04 14:41:36.000000000 -0700 *************** *** 238,244 **** NULL_MENU, NULL_MENU, NULL_MENU, ! NULL_MENU, NULL_MENU, NULL_MENU, NULL_MENU}; --- 238,244 ---- NULL_MENU, NULL_MENU, NULL_MENU, ! REPLY_ALL_MENU, NULL_MENU, NULL_MENU, NULL_MENU}; *************** *** 252,257 **** --- 252,258 ---- #define BOUNCE_KEY 33 #define FLAG_KEY 34 #define VIEW_PIPE_KEY 35 + #define REPLY_ALL_KEY 44 static struct key simple_text_keys[] = {HELP_MENU, *************** *** 595,600 **** --- 596,604 ---- if(F_OFF(F_ENABLE_FULL_HDR, ps_global)) clrbitn(VIEW_FULL_HEADERS_KEY, scrollargs.keys.bitmap); + if (F_OFF(F_SEPARATE_REPLY_ALL, ps_global)) + clrbitn(REPLY_ALL_KEY, scrollargs.keys.bitmap); + if(!handles){ /* * NOTE: the comment below only really makes sense if we Only in pine4.63.reply-all/pine: mailview.c.orig diff -rc pine4.63/pine/pine.h pine4.63.reply-all/pine/pine.h *** pine4.63/pine/pine.h 2005-04-15 15:07:15.000000000 -0700 --- pine4.63.reply-all/pine/pine.h 2005-07-04 14:41:36.000000000 -0700 *************** *** 1208,1213 **** --- 1208,1214 ---- F_VERTICAL_FOLDER_LIST, F_TAB_CHK_RECENT, F_AUTO_REPLY_TO, + F_SEPARATE_REPLY_ALL, F_VERBOSE_POST, F_FCC_ON_BOUNCE, F_SEND_WO_CONFIRM, *************** *** 2940,2945 **** --- 2941,2947 ---- #define MC_ADDABOOK 746 #define MC_DELABOOK 747 #define MC_VIEW_ENTRY 748 + #define MC_REPLY_ALL 749 #define MC_EDITABOOK 750 #define MC_OPENABOOK 751 #define MC_POPUP 752 *************** *** 3064,3069 **** --- 3066,3074 ---- #define REPLY_MENU {"R", "Reply", \ {MC_REPLY,1,{'r'}}, \ KS_REPLY} + #define REPLY_ALL_MENU {"=", "Reply All", \ + {MC_REPLY_ALL,1,{'='}}, \ + KS_REPLYALL} #define FORWARD_MENU {"F", "Forward", \ {MC_FORWARD,1,{'f'}}, \ KS_FORWARD} *************** *** 5130,5136 **** void sp_end PROTO((void)); /*-- reply.c --*/ ! void reply PROTO((struct pine *, ACTION_S *)); void reply_seed PROTO((struct pine *, ENVELOPE *, ENVELOPE *, ADDRESS *, ADDRESS *, ADDRESS *, ADDRESS *, BUILDER_ARG *, int)); --- 5135,5141 ---- void sp_end PROTO((void)); /*-- reply.c --*/ ! void reply PROTO((struct pine *, ACTION_S *, int)); void reply_seed PROTO((struct pine *, ENVELOPE *, ENVELOPE *, ADDRESS *, ADDRESS *, ADDRESS *, ADDRESS *, BUILDER_ARG *, int)); diff -rc pine4.63/pine/pine.hlp pine4.63.reply-all/pine/pine.hlp *** pine4.63/pine/pine.hlp 2005-04-28 10:22:02.000000000 -0700 --- pine4.63.reply-all/pine/pine.hlp 2005-07-04 14:41:36.000000000 -0700 *************** *** 23138,23143 **** --- 23138,23177 ---- <End of help on this topic> + ====== h_config_separate_reply_all ===== + + + OPTION: Separate-Reply-All + + +

OPTION: Separate-Reply-All

+ + This option specifies an aspect of Pine's Reply command. Normally, Pine offers + a single reply command; if you reply to an email with multiple recipients, Pine + asks you whether you want to reply to all recipients, or just to the sender. + +

+ If this option is set, the standard reply command will always reply to the + sender (or reply-to address). A separate reply-to-all command will be offered, + which will always reply to all recipients. + +

+ This option is intended to discourage unintentional replying to all. Users + often inadvertently train themselves to "click past" prompts, such as Pine's + "reply to all recipients?" prompt. This reduces their effectiveness. Separating + the reply and reply-to-all commands may alleviate this problem. + +

+ Note: the reply-to-all command is not offerred in the attachment index or + attachment view, but if this option is set, the standard reply command in those + screens will still only reply to the sender. + +

+ <End of help on this topic> + + ====== h_config_empty_hdr_msg ===== Only in pine4.63.reply-all/pine: pine.hlp.orig Only in pine4.63.reply-all/pine: pine.h.orig diff -rc pine4.63/pine/reply.c pine4.63.reply-all/pine/reply.c *** pine4.63/pine/reply.c 2005-04-28 10:22:03.000000000 -0700 --- pine4.63.reply-all/pine/reply.c 2005-07-04 14:41:36.000000000 -0700 *************** *** 144,152 **** - pass off to pine_send() ---*/ void ! reply(pine_state, role_arg) struct pine *pine_state; ACTION_S *role_arg; { ADDRESS *saved_from, *saved_to, *saved_cc, *saved_resent; ENVELOPE *env, *outgoing; --- 144,153 ---- - pass off to pine_send() ---*/ void ! reply(pine_state, role_arg, flags) struct pine *pine_state; ACTION_S *role_arg; + int flags; { ADDRESS *saved_from, *saved_to, *saved_cc, *saved_resent; ENVELOPE *env, *outgoing; *************** *** 156,162 **** char *tmpfix = NULL, *prefix = NULL; long msgno, j, totalm, rflags, *seq = NULL; int i, include_text = 0, times = -1, warned = 0, ! flags = RSF_QUERY_REPLY_ALL, reply_raw_body = 0; gf_io_t pc; PAT_STATE dummy; REDRAFT_POS_S *redraft_pos = NULL; --- 157,163 ---- char *tmpfix = NULL, *prefix = NULL; long msgno, j, totalm, rflags, *seq = NULL; int i, include_text = 0, times = -1, warned = 0, ! reply_raw_body = 0; gf_io_t pc; PAT_STATE dummy; REDRAFT_POS_S *redraft_pos = NULL; Only in pine4.63.reply-all/pine: reply.c.orig