summaryrefslogtreecommitdiff
path: root/alpine
diff options
context:
space:
mode:
authorEduardo Chappa <chappa@washington.edu>2020-06-28 21:51:11 -0600
committerEduardo Chappa <chappa@washington.edu>2020-06-28 21:51:11 -0600
commit8c0d2a658c5c41f2be062dad11c4deeb6274802f (patch)
tree5cd8224931ad7a3e60844a8ac58110ac67df0718 /alpine
parent33d28e5ec670e974d555bcee34a631d878fda84c (diff)
downloadalpine-8c0d2a658c5c41f2be062dad11c4deeb6274802f.tar.xz
* When messages are selected, pressing the ";" command to broaden or narrow
a search, now offers the possibility to completely replace the search, and is almost equivalent to being a shortcut to "unselect all messages, and select again". The difference is that cancelling this command will not unselect all currently selected messages. Suggested by Holger Trapp.
Diffstat (limited to 'alpine')
-rw-r--r--alpine/mailcmd.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/alpine/mailcmd.c b/alpine/mailcmd.c
index e26495e..8c94aa4 100644
--- a/alpine/mailcmd.c
+++ b/alpine/mailcmd.c
@@ -132,6 +132,7 @@ ESCKEY_S sel_opts1[] = {
{'b', 'b', "B", N_("Broaden selctn")},
{'n', 'n', "N", N_("Narrow selctn")},
{'f', 'f', "F", N_("Flip selected")},
+ {'r', 'r', "R", N_("Replace selctn")},
{-1, 0, NULL, NULL}
};
@@ -6921,7 +6922,7 @@ int
aggregate_select(struct pine *state, MSGNO_S *msgmap, int q_line, CmdWhere in_index)
{
long i, diff, old_tot, msgno, raw;
- int q = 0, rv = 0, narrow = 0, hidden, ret = -1;
+ int p = 0, q = 0, rv = 0, narrow = 0, hidden, ret = -1;
ESCKEY_S *sel_opts;
MESSAGECACHE *mc;
SEARCHSET *limitsrch = NULL;
@@ -6998,6 +6999,9 @@ aggregate_select(struct pine *state, MSGNO_S *msgmap, int q_line, CmdWhere in_in
case 'n' : /* narrow selection */
narrow++;
+ case 'r' : /* replace selection */
+ p = 1; /* set flag we want to replace */
+ sel_opts -= 2; /* re-enable first two options */
case 'b' : /* broaden selection */
q = 0; /* offer criteria prompt */
break;
@@ -7032,6 +7036,17 @@ aggregate_select(struct pine *state, MSGNO_S *msgmap, int q_line, CmdWhere in_in
}
}
+ /* When we are replacing the search, unselect all messages first, unless
+ * we are cancelling, in whose case, leave the screen as is, because we
+ * are cancelling!
+ */
+ if(p == 1 && q != 'x'){
+ msgno = any_lflagged(msgmap, MN_SLCT);
+ diff = (!msgno) ? mn_get_total(msgmap) : 0L;
+ agg_select_all(state->mail_stream, msgmap, &diff,
+ any_lflagged(msgmap, MN_SLCT) <= 0L);
+ }
+
/*
* The purpose of this is to add the appropriate searchset to the
* search so that the search can be limited to only looking at what