char *cp, *maildir;
unsigned char *comp = NULL;
char *text = NULL, *folder = NULL, buf[BUFSIZ];
+ char *file = NULL;
char **argp, **arguments;
struct msgs_array msgs = { 0, 0, NULL };
struct msgs *mp;
int delete = -2; /* delete header element if set */
int list = 0; /* list header elements if set */
int number = 0; /* delete specific number of like elements if set */
+ int havemsgs = 0;
#ifdef LOCALE
setlocale(LC_ALL, "");
number = 1;
else {
- if (strcmp(*argp, "all") == 0)
- number = -1;
-
- else if (!(number = atoi(*argp)))
+ if (strcmp(*argp, "all") == 0)
+ number = -1;
+ else if (!(number = atoi(*argp)))
adios(NULL, "missing argument to %s", argp[-2]);
-
argp++;
}
delete = number;
continue;
- case APPENDSW: /* append annotations instead of default prepend */
+ case APPENDSW:
append = 1;
continue;
- case PRESERVESW: /* preserve access and modification times on annotated message */
+ case PRESERVESW:
preserve = 1;
continue;
- case NOPRESERVESW: /* don't preserve access and modification times on annotated message (default) */
+ case NOPRESERVESW:
preserve = 0;
continue;
}
adios(NULL, "only one folder at a time!");
else
folder = getcpy(expandfol(cp));
- } else
+ } else if (*cp == '/' || *cp == '.') {
+ if (file)
+ adios(NULL, "only one file at a time!");
+ file = cp;
+ } else {
app_msgarg(&msgs, cp);
+ havemsgs = 1;
+ }
+ }
+
+ if (file && (folder || havemsgs)) {
+ adios(NULL, "Don't intermix files and messages.");
+ }
+
+ make_comp(&comp);
+
+ if (file) {
+ if (list)
+ annolist(file, comp, text, number);
+ else
+ annotate(file, comp, text,
+ datesw, delete, append, preserve);
+ done(0);
}
if (!msgs.size)
if (!m_convert(mp, msgs.msgs[msgnum]))
done(1);
- make_comp(&comp);
-
/* annotate all the SELECTED messages */
for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) {
if (is_selected(mp, msgnum)) {
if (list)
annolist(m_name(msgnum), comp, text, number);
else
- annotate(m_name(msgnum), comp, text, datesw, delete, append, preserve);
+ annotate(m_name(msgnum), comp, text, datesw,
+ delete, append, preserve);
}
}
- context_replace(curfolder, folder); /* update current folder */
- seq_setcur(mp, mp->lowsel); /* update current message */
- seq_save(mp); /* synchronize message sequences */
- folder_free(mp); /* free folder/message structure */
- context_save(); /* save the context file */
+ context_replace(curfolder, folder);
+ seq_setcur(mp, mp->lowsel);
+ seq_save(mp);
+ folder_free(mp);
+ context_save();
done(0);
return 1;
}