On Wed, Feb 17, 1999 at 12:57:52AM -0800, Daniel Eisenbud <[EMAIL PROTECTED]> wrote: > On Wed, Feb 17, 1999 at 02:52:36AM -0500, Randall J. Million <[EMAIL PROTECTED]> >wrote: > > > What are the problems that you have with this? It would take just a > > > tiny bit of code to add a "trash_folder" variable, which when set, would > > > receive a copy of deleted messages. But I'm not sure what doesn't work > > > about the above? > > > > 1. You cannot undelete messages and have them removed from the Trash > > folder. > > 2. It is possible to delete a message multiple times (and svae it to the > > Trash folder multiple times). Limited accoutn space made the > > duplicated messages hard to deal with. > > Hmm. I guess the time to save the mesags to the trash folder would be > when actually synchronizing the mailbox, then. Something about this that I somehow failed to consider is that this will save a copy of a message to the trash folder when you are just trying to copy the message to another mailbox, rather than delete it. Maybe we need a flag which gets set when the message is succesfully saved somewhere? [...] > Hmm, I wonder how hard this would be to code? Looking at the code a > bit, I come to the conclusion that it would be trivial to do this, but > such an implementation would have the problem that we would sometimes > save a copy of the message to the trash mailbox but then fail to > synchronize the folder. By the time we successfully synchronized the > folder, we would have several copies of the message in the trash. This > is not so bad, since this is just a backup mechanism, and too many is > much better than too few. But it is still a bit ugly. Alternatives are > to do this from within the routines specific to different types of > mailboxes, after we have checked for new messages and dealt with > locking. That would be a bit ugly too. A third alternative would be to > split up the various sync functions into two parts, but I don't know if > this change justifies that. I will think about this a little bit more. For the moment, I did this the easy way. It should work fine, but if you have a lot of new mail arriving, you may get multiple copies of deleted mails in the trash folder. Also, as stated above, a copy of all copied mail will also end up in the trash folder. If there is sufficient interest in this patch, I plan to fix both of these things, though. Oh yeah, the variable name is $trash_folder. And no, it isn't yet smart enough to actually delete the messages when you're in the trash folder, so you'll need a folder-hook if you want to do that. I plan on fixing that, too. So be cautious with this patch. I can't see how it could do anything worse than failing to save your deleted messages to the trash, or causing a coredump. It should do neither of those things, but it's late at night, so I might have missed something obvious. After applying the patch, you will have to run "make clean" before recompiling mutt, if you've already compiled in that source tree before. -Daniel -- Daniel Eisenbud [EMAIL PROTECTED]
diff -durpN mutt-0.95.3/globals.h mutt-0.95.3.trashfolder/globals.h --- mutt-0.95.3/globals.h Thu Jan 7 01:14:40 1999 +++ mutt-0.95.3.trashfolder/globals.h Wed Feb 17 01:42:42 1999 @@ -77,6 +77,7 @@ WHERE char *StChars; WHERE char *Status; WHERE char *Tempdir; WHERE char *Tochars; +WHERE char *TrashFolder; WHERE char *Username; WHERE char *Visual; diff -durpN mutt-0.95.3/init.h mutt-0.95.3.trashfolder/init.h --- mutt-0.95.3/init.h Wed Feb 10 08:20:11 1999 +++ mutt-0.95.3.trashfolder/init.h Wed Feb 17 01:42:06 1999 @@ -266,6 +266,7 @@ struct option_t MuttVars[] = { { "tilde", DT_BOOL, R_PAGER, OPTTILDE, 0 }, { "timeout", DT_NUM, R_NONE, UL &Timeout, 600 }, { "tmpdir", DT_PATH, R_NONE, UL &Tempdir, 0 }, + { "trash_folder", DT_PATH, R_NONE, UL &TrashFolder, UL "" }, { "to_chars", DT_STR, R_BOTH, UL &Tochars, UL " +TCF" }, { "use_8bitmime", DT_BOOL, R_NONE, OPTUSE8BITMIME, 0 }, { "use_domain", DT_BOOL, R_NONE, OPTUSEDOMAIN, 1 }, diff -durpN mutt-0.95.3/mx.c mutt-0.95.3.trashfolder/mx.c --- mutt-0.95.3/mx.c Tue Feb 9 15:53:40 1999 +++ mutt-0.95.3.trashfolder/mx.c Wed Feb 17 02:55:12 1999 @@ -946,6 +946,7 @@ void mx_update_tables(CONTEXT *ctx, int int mx_sync_mailbox (CONTEXT *ctx) { int rc, i; + CONTEXT *trash; if (ctx->dontwrite) { @@ -988,8 +989,33 @@ int mx_sync_mailbox (CONTEXT *ctx) ctx->hdrs[i]->deleted = 0; ctx->deleted = 0; } - } + else if (TrashFolder && *TrashFolder) + { + rc = 0; + mutt_message (_("Copying deleted to %s..."), TrashFolder); + trash = mx_open_mailbox (TrashFolder, M_APPEND, NULL); + if (trash) + { + for (i = 0; i < ctx->msgcount && !rc; i++) + { + if (ctx->hdrs[i]->deleted) + rc = mutt_append_message (trash, ctx, ctx->hdrs[i], 0, CH_UPDATE_LEN); + } + mx_close_mailbox (trash); + safe_free ((void **) &trash); + } + else + rc = -1; + + if (rc) + { + mutt_error (_("Could not copy deleted to %s"), TrashFolder); + return (-1); + } + } + } + if ((rc = sync_mailbox (ctx)) == 0) { mutt_message (_("%d kept, %d deleted."), ctx->msgcount - ctx->deleted,