From: risto.salminen@gmx.com
To: 9front@9front.org
Subject: [9front] upas/nedmail: copy messages between IMAP folders
Date: Fri, 28 May 2021 18:25:41 +0300 [thread overview]
Message-ID: <971EAFFF76D75B465FE8AE28F208FAB9@gmx.com> (raw)
Dear 9front community,
the following patch makes nedmail to take advantage
of the message copy support introduced in my previous
mail. This is useful when one wants to archive
messages from inbox to another IMAP folder. I have
been using this for half a year now, as the upas/fs
part of the changes too.
Would this be useful for the broader audience?
Thanks,
rsal
diff -r 7c895ae504fa sys/man/1/nedmail
--- a/sys/man/1/nedmail Fri May 28 13:02:58 2021 +0200
+++ b/sys/man/1/nedmail Fri May 28 16:57:27 2021 +0300
@@ -153,6 +153,10 @@
.B b
Print the headers for the next ten messages.
.TP
+.BI c " mbox
+Copy message to the named mailbox.
+At the moment only supported with IMAP mailboxes.
+.TP
.B d
Mark message to be deleted upon exiting
.IR nedmail .
@@ -184,6 +188,16 @@
but allow the user to type in text to be included
with the forwarded message.
.TP
+.BI move " mbox
+Copy message to the named mailbox
+and mark it as deleted.
+This is just
+.B c
+followed by
+.B d
+for convenience.
+At the moment only supported with IMAP mailboxes.
+.TP
.B p
Print message.
An interrupt stops the printing.
diff -r 7c895ae504fa sys/src/cmd/upas/ned/nedmail.c
--- a/sys/src/cmd/upas/ned/nedmail.c Fri May 28 13:02:58 2021 +0200
+++ b/sys/src/cmd/upas/ned/nedmail.c Fri May 28 16:57:27 2021 +0300
@@ -93,6 +93,7 @@
Mfn acmd;
Mfn bangcmd;
Mfn bcmd;
+Mfn ccmd;
Mfn dcmd;
Mfn eqcmd;
Mfn Fcmd;
@@ -106,6 +107,7 @@
Mfn kcmd;
Mfn mbcmd;
Mfn mcmd;
+Mfn movecmd;
Mfn Pcmd;
Mfn pcmd;
Mfn pipecmd;
@@ -130,6 +132,7 @@
{ "a", 1, 1, acmd, "a\t" "reply to sender and recipients" },
{ "A", 1, 0, acmd, "A\t" "reply to sender and recipients with copy" },
{ "b", 0, 0, bcmd, "b\t" "print the next 10 headers" },
+ { "c", 1, 1, ccmd, "c mbox\t" "copy message to mailbox" },
{ "d", 0, 1, dcmd, "d\t" "mark for deletion" },
{ "F", 1, 1, Fcmd, "f\t" "set message flags [+-][aDdfrSs]" },
{ "f", 0, 1, fcmd, "f\t" "file message by from address" },
@@ -143,6 +146,7 @@
{ "m", 1, 1, mcmd, "m addr\t" "forward mail" },
{ "M", 1, 0, mcmd, "M addr\t" "forward mail with message" },
{ "mb", 1, 0, mbcmd, "mb mbox\t" "switch mailboxes" },
+ { "move", 1, 1, movecmd, "move mbox\t" "move message to mailbox" },
{ "p", 1, 0, pcmd, "p\t" "print the processed message" },
{ "P", 0, 0, Pcmd, "P\t" "print the raw message" },
{ "\"", 0, 0, quotecmd, "\"\t" "print a quoted version of msg" },
@@ -2406,6 +2410,57 @@
return m;
}
+Message*
+ccmd(Cmd *c, Message *m)
+{
+ char buf[1024], *dest, *e, *p, *msg;
+ int fd;
+
+ if(c->an != 2){
+ eprint("!usage: c mailbox\n");
+ return nil;
+ }
+ dest = c->av[1];
+ fd = open("/mail/fs/ctl", OWRITE);
+ if(fd < 0){
+ eprint("can't open /mail/fs/ctl: %r\n");
+ return nil;
+ }
+ while(m->parent != &top)
+ m = m->parent;
+ msg = strrchr(m->path, '/');
+ if(msg == nil)
+ msg = m->path;
+ else
+ msg++;
+ p = buf;
+ e = buf + sizeof buf;
+ p = seprint(p, e, "copy %s %s %s", mbname, msg, dest);
+ if(write(fd, buf, p - buf) < 0){
+ eprint("!error %r\n");
+ close(fd);
+ return nil;
+ }
+ eprint("!copied to %s\n", dest);
+ setflags(m, "S");
+ close(fd);
+ return m;
+}
+
+Message*
+movecmd(Cmd *c, Message *m)
+{
+ Message *r;
+
+ r = ccmd(c, m);
+ if(r == nil)
+ return nil;
+ r = dcmd(c, m);
+ if(r == nil)
+ return nil;
+ return r;
+}
+
int
appendtofile(Message *m, char *part, char *base, int mbox, int f)
{
next reply other threads:[~2021-05-28 15:35 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-28 15:25 risto.salminen [this message]
2021-05-31 11:52 ` Risto Salminen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=971EAFFF76D75B465FE8AE28F208FAB9@gmx.com \
--to=risto.salminen@gmx.com \
--cc=9front@9front.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).