leahneukirchen / mblaze

Unix utilities to deal with Maildir
Other
441 stars 48 forks source link

Deleting mseq selections #182

Closed jeremybobbin closed 4 years ago

jeremybobbin commented 4 years ago

Say I delete the selected thread from my inbox:

mseq -r .= | grep "Inbox" | mflag -S | xargs rm

After doing this, the thread will remain in $MAILSEQ, so I need to either "re-index" my mail and their threads:

full_thread() {
    tmp="$(mktemp)"
    mdirs "$@" | xargs mlist | mthread | tee "$threads" | MAILSEQ="$tmp" mseq -S >/dev/null
    grep -nFf "$patterns" "$threads" | sed 's/:.*/=/' | MAILSEQ="$tmp" xargs -n1 mseq | awk '!x[$0]++'
}

mlist -s ~/.mail/*/Inbox | full_thread ~/.mail/ | mseq -S && mseq -C $

Or, I'd need to remove the selection from $MAILSEQ:

thread=$(mktemp)
old=$(mktemp)
mseq .= > "$thread" 
cp "${MBLAZE:-$HOME/.mblaze}/seq" "$old"
grep -vFf "$thread" "$old" | mseq -S  

I was curious as to whether you had any ideas on how do any of these things more effectively, as well as your thoughts on an "invert matches" option like grep's -v.

Thanks

leahneukirchen commented 4 years ago

I use a script mfix:

#!/bin/sh
# mfix - fix current sequence

mseq -f | mseq -S
Anachron commented 4 years ago

Afaik this is also documented somewhere in the mblaze docs. I do something similiar whenever I sync mails.

Edit: Interestingly its not in the manuals. Where did I see it? Or has it been deleted.

jeremybobbin commented 4 years ago

Hey thanks! Yeah I haven't found anything on it in the manuals.

The only issue with the solution that @leahneukirchen provided is that, I want to keep my inbox as empty as possible, and archive emails that I consider "dealt with".

When I delete a thread(or a single reply to a thread) from my inbox, then do mseq -f | mseq -S, only those ones are removed from the mseq list.

So this:

/home/jer/.mail/work/Sent Mail/cur/1597154230.1026742_15.Amphibian,U=979:2,S
 /home/jer/.mail/work/Archive/cur/1597154277.1026721_14.Amphibian,U=7089:2,RS
  /home/jer/.mail/work/Sent Mail/cur/1597154468.1028958_2.Amphibian,U=980:2,S
   /home/jer/.mail/work/Inbox/cur/1597155064.1031310_4.Amphibian,U=7093:2,S

Would turn into this:

/home/jer/.mail/work/Sent Mail/cur/1597154230.1026742_15.Amphibian,U=979:2,S
 /home/jer/.mail/work/Archive/cur/1597154277.1026721_14.Amphibian,U=7089:2,RS
  /home/jer/.mail/work/Sent Mail/cur/1597154468.1028958_2.Amphibian,U=980:2,S

When I'd prefer that the entire thread were gone.

Though I might just be trying get the mblaze suite to do something a mairix should be doing - what do you think?

leahneukirchen commented 4 years ago

I see, so a (fictional) mseq -v .= would be what you want? (Print all messages but .=)

jeremybobbin commented 4 years ago

Actually, I think I'd prefer to see mseq !.=.

leahneukirchen commented 4 years ago

But then mseq !1 !2 doesn't work.

jeremybobbin commented 4 years ago

Ah, good catch. A -v option would seem reasonable.

leahneukirchen commented 4 years ago

Unfortunately, this is not so easy to implement directly. :) Queueing as TODO.