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, [email protected] wrote:
>
> > On Sun Dec 27, 2020 at 2:12 PM CET, Tomi Ollila wrote:
> >> On Sun, Dec 27 2020, [email protected] 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 -- [email protected]
> > To unsubscribe send an email to [email protected]
_______________________________________________
notmuch mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to