Re: Folder+tags

Subject: Re: Folder+tags

Date: Mon, 28 Dec 2020 17:51:15 +0100

To: Tomi Ollila, notmuch@notmuchmail.org

Cc:

From: inwit


Thanks, Tomi.

While I learn enough elisp to dive into those hooks, I've solved my
need to move files according to tags with the following pre-new script,
which recycles parts from other scripts around:

#!/bin/bash

echo "[pre-new] Syncronizing tags and folders... "

path=/home/jlaznarte/mail/UNED/
exclude='signed attachment spam draft flagged passed replied unread encrypted deleted'
count=$(notmuch count 'folder:Inbox and not tag:inbox')

# Move a message file while removing its UID-part
function safeMove { s=${1##*/}; s=${s%%,*}; mv -f $1 $2/$s; }

if [ $count = 0 ]; then
    echo "[pre-new] No messages needed moving."
    else
        echo "[pre-new] Moving" $count "messages to their corresponding folder."

	for message_id in $(notmuch search --output=messages \
	    'folder:Inbox and not tag:inbox')
	do
		# Find the tags of the message that we need to move
	        tags_orig=$(notmuch search --output=tags $message_id)

	        # Remove notmuch special tags
		# (do not correspond to folders)
	        tags=$(tr ' ' '\n' <<< "$tags_orig" \
		    | grep -vf <(tr ' ' '\n' <<< "$exclude") | paste -sd ' ')

		# Get the path and filename for the message
	        filename=$(notmuch search --output=files $message_id)

	        echo "Moving message to" $tags
		safeMove $filename $path$tags"/cur/"
	done
fi && mbsync



On Sun Dec 27, 2020 at 10:09 PM CET, Tomi Ollila wrote:
> On Sun, Dec 27 2020, inwit@sindominio.net wrote:
>
> > On Sun Dec 27, 2020 at 2:12 PM CET, Tomi Ollila wrote:
> >> On Sun, Dec 27 2020, inwit@sindominio.net wrote:
> >>
> >> There sure is notmuch-after-tag-hook (in emacs MUA), but -hooks don't
> >> take argument(s) so how does it know what was tagged (cannot remember
> >> if there are let-bound (dynamically bound!) variables that could have
> >> such information).
> > Apparently (I'm a total noob wrt elisp), the hook should know what was
> > tagged and how it was tagged. In its documentation it reads:
> > «'tag-changes' will contain the tags that were added or removed as a
> > list of strings of the form "+TAG" or "-TAG". 'query' will be a string
> > containing the search query that determines the messages that were
> > tagged."
>
> nos that you said it, query is a variable the hook can access to know
> what
> was tgged. filnames it doesn't contain. with the query you can find the
> filenames with 'notmuch search --output=files query
>
> (writing on mobiledvice in a moving train, therefore terse)
>
> Tomi
>
> >
> >>
> >> Whateveruuuuuuch way, tags are assigned to Message-Id:, so you'd need to find
> >> the filename.
> > Having the 'query' mentioned above should be enough to find the
> > filename, shouldn't it?
> >
> >> With shell-command you can do notmuch | xargs pipeline
> >> (plain 'mv' w/ 'shell-command' would have been easily replaced w/
> >> 'rename-file' if that were enough).
> > I'm not sure if I get what you're trying to say: is rename-file not
> > enough? 
> >
> > In any case, if there's really a way to pass 'tag-changes' and 'query'
> > to such a hook, I could use that hook to move the file with either 'mv'
> > with 'shell-command' or directly with rename-file, am I wrong?
> >
> > In any case, I first need to actually learn elisp. This seems as the
> > right reason to finally get into it.
> >
> > Thanks for your help.
> >
> > Salud,
> >
> >>
> >> >
> >> > Salud,
> >>
> >> Tomi
> > _______________________________________________
> > notmuch mailing list -- notmuch@notmuchmail.org
> > To unsubscribe send an email to notmuch-leave@notmuchmail.org
_______________________________________________
notmuch mailing list -- notmuch@notmuchmail.org
To unsubscribe send an email to notmuch-leave@notmuchmail.org

Thread: