]> 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>
Mon, 4 Apr 2016 02:34:32 +0000 (03:34 +0100)
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 a76aac998e0fc94f303fa3e4730f197b56eb71f9..67c395c4d0fd0377292547ad9099731f94d00836 100644 (file)
@@ -1150,6 +1150,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 de26fd84226daf057ddcc9841c8d0da4828956c4..a2bf5755254e6cb138b502ca538ab10af04ed2fa 100644 (file)
--- a/mutt.h
+++ b/mutt.h
@@ -720,6 +720,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 acc81d4257b73b2f1c671832795d26579eab13be..508ac3a21f04554695209f3d88a0423b417fdd00 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)
       {