Default save mailbox from a script
Cameron Simpson
cs at cskk.id.au
Sun Jul 30 23:57:29 UTC 2023
On 30Jul2023 15:59, Nicolas George <george at nsup.org> wrote:
>I want to use an external command to decide in what mailbox to save
>messages.
>When I hit ‘s’ with its default action of save-message, mutt asks
>“Save to mailbox ('?' for list): =ml/debian”, with the default being
>chosen from save-hooks or from the author of the mail.
>
>What I want is that it invokes an external command to set the default.
>The idea is that the external command has access to an index of my
>mailboxes and implements heuristics of my choosing to store the mail,
>but I can still use Mutt's user interface to make a different decision.
[...]
>Except it does not work in two ways:
>- the backticks are evaluated once when loading the configuration, they
> need to be evaluated when saving the message, each time;
Yes. For something to run lateryou would need to quote them (to defer
their interpretation). But it won't help with save-hook because it does
not, itself, run a command.
I take it that you can't easily express what you want with a collection
of save hooks in the right order with clever patterns.
>- the command in the backticks need access to the content of the mail.
>
>I am considering a solution based on a macro that pipes the message to
>the command and generate a temporary configuration file, then sources it
>then saves normally.
Yes, this is the kind of approach you'd need.
>Also, I would like to avoid any solution that would slow down Mutt when
>I am not trying to save a message. A message-hook invoking guess_mailbox
>would probably not be acceptable, for example.
Go the macro, rebinding the "s" keystroke. That way it only fires when
you try to save. The <pipe-message> command can be used to feed the
message content to your script. Some macro which went:
<pipe-message>your_script.sh >mutt-commands.txt<enter>
<enter-command>source mutt-commands.txt<enter>
<save-message>
where your_script.sh read the message contents and then wrote a
save-hook command to mutt-commands.txt (obviously that should be a
better scratch filename), eg:
save-hook . your-desired-folder-name-here
_Or_ you could have your command write the folder name to a well known
file eg ~/var/mutt/save-folder and have the macro run:
<enter-command>save-hook . `cat ~/var/mutt/save-folder`</enter>
which feels a bit safer (it won't run arbitrary commands), so a macro
like:
<pipe-message>your_script.sh >~/var/mutt/save-folder<enter>
<enter-command>save-hook . `cat ~/var/mutt/save-folder`</enter>
<save-message>
All on one line. And the whole macro should be quoted of course, as it
includes special chars (the backticks):
macro s "<pipe-message>.......<save-message>" "save message with special sauce"
Note the macro description as the fourth string - it shows in the "?"
menu.
Something along those lines, anyway.
Cheers,
Cameron Simpson <cs at cskk.id.au>
More information about the Mutt-users
mailing list