]> granicus.if.org Git - neomutt/commitdiff
feature: quasi-delete
authorKarel Zak <kzak@redhat.com>
Sat, 30 Jan 2016 16:27:19 +0000 (16:27 +0000)
committerRichard Russon <rich@flatcap.org>
Sun, 6 Mar 2016 02:34:53 +0000 (02:34 +0000)
Mark emails that should be hidden, but not deleted

OPS
curs_main.c
functions.h
mutt.h
mx.c

diff --git a/OPS b/OPS
index 8414a8b337671ddee819f83f06b26da76559ee92..6afab6987fb11c3d7c9ead95cb3e4761de03bd24 100644 (file)
--- a/OPS
+++ b/OPS
@@ -127,6 +127,7 @@ OP_MAIN_READ_SUBTHREAD "mark the current subthread as read"
 OP_MAIN_SET_FLAG "set a status flag on a message"
 OP_MAIN_SYNC_FOLDER "save changes to mailbox"
 OP_MAIN_TAG_PATTERN "tag messages matching a pattern"
+OP_MAIN_QUASI_DELETE "delete from mutt, don't touch on disk"
 OP_MAIN_UNDELETE_PATTERN "undelete messages matching a pattern"
 OP_MAIN_UNTAG_PATTERN "untag messages matching a pattern"
 OP_MIDDLE_PAGE "move to the middle of the page"
index 8553102457bc96794c8f13cd2d580f9be0c692c4..1540f35696d58401b137b6214919ebd0cf7be00b 100644 (file)
@@ -1154,6 +1154,23 @@ int mutt_index_menu (void)
          menu->redraw = REDRAW_FULL;
        break;
 
+      case OP_MAIN_QUASI_DELETE:
+       if (tag)
+       {
+         for (j = 0; j < Context->vcount; j++) {
+           if (Context->hdrs[Context->v2r[j]]->tagged) {
+             Context->hdrs[Context->v2r[j]]->quasi_deleted = TRUE;
+             Context->changed = TRUE;
+           }
+         }
+       }
+       else
+       {
+         CURHDR->quasi_deleted = TRUE;
+         Context->changed = 1;
+       }
+       break;
+
       case OP_MAIN_CHANGE_FOLDER:
       case OP_MAIN_NEXT_UNREAD_MAILBOX:
 
index 7a1c5a9f126b7da177fbbee023acacab45af07e3..23af099140c7432684fc6dccf2ae0514221d01d5 100644 (file)
@@ -167,6 +167,7 @@ const struct binding_t OpMain[] = { /* map: index */
   { "mail-key",                        OP_MAIL_KEY,                    "\033k" },
   { "decrypt-copy",            OP_DECRYPT_COPY,                NULL },
   { "decrypt-save",            OP_DECRYPT_SAVE,                NULL },
+  { "quasi-delete",            OP_MAIN_QUASI_DELETE,           NULL },
 
 
   { NULL,                      0,                              NULL }
@@ -271,6 +272,7 @@ const struct binding_t OpPager[] = { /* map: pager */
   { "decrypt-save",            OP_DECRYPT_SAVE,                NULL },
 
   { "what-key",                OP_WHAT_KEY,            NULL },
+  { "quasi-delete",    OP_MAIN_QUASI_DELETE,           NULL },
 
   { NULL,              0,                              NULL }
 };
diff --git a/mutt.h b/mutt.h
index f8565fae86c270641e82c68c9c131dfb47b5729c..ae6bec43f08869143abde45fbf464159f3abdbbb 100644 (file)
--- a/mutt.h
+++ b/mutt.h
@@ -714,6 +714,7 @@ typedef struct header
   unsigned int flagged : 1;            /* marked important? */
   unsigned int tagged : 1;
   unsigned int deleted : 1;
+  unsigned int quasi_deleted : 1;      /* deleted from mutt, but not modified on disk */
   unsigned int changed : 1;
   unsigned int attach_del : 1;                 /* has an attachment marked for deletion */
   unsigned int old : 1;
diff --git a/mx.c b/mx.c
index 4c5cb07de423f740385da227f5e144a7463044a2..2bc8f9527b939c45463377a8e147e1b42bc12c5a 100644 (file)
--- a/mx.c
+++ b/mx.c
@@ -1005,9 +1005,10 @@ void mx_update_tables(CONTEXT *ctx, int committing)
 #define this_body ctx->hdrs[j]->content
   for (i = 0, j = 0; i < ctx->msgcount; i++)
   {
-    if ((committing && (!ctx->hdrs[i]->deleted || 
+    if (!ctx->hdrs[i]->quasi_deleted &&
+       ((committing && (!ctx->hdrs[i]->deleted || 
                        (ctx->magic == M_MAILDIR && option (OPTMAILDIRTRASH)))) ||
-       (!committing && ctx->hdrs[i]->active))
+       (!committing && ctx->hdrs[i]->active)))
     {
       if (i != j)
       {