From: Karel Zak Date: Sat, 30 Jan 2016 16:27:19 +0000 (+0000) Subject: feature: quasi-delete X-Git-Tag: neomutt-20160307~11^2~3 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d12844fad825b9a75686d49498b8e5738d7bf3b1;p=neomutt feature: quasi-delete Mark emails that should be hidden, but not deleted --- diff --git a/OPS b/OPS index 8414a8b33..6afab6987 100644 --- 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" diff --git a/curs_main.c b/curs_main.c index 855310245..1540f3569 100644 --- a/curs_main.c +++ b/curs_main.c @@ -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: diff --git a/functions.h b/functions.h index 7a1c5a9f1..23af09914 100644 --- a/functions.h +++ b/functions.h @@ -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 f8565fae8..ae6bec43f 100644 --- 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 4c5cb07de..2bc8f9527 100644 --- 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) {