Discussion:
reference the folder name in a folder-hook push command
Yubin Ruan
2017-12-25 22:36:20 UTC
Permalink
Hi,

I have a folder hook like this:

folder-hook =somembox 'push "!touch /tmp/\1-touched\n"'

where I would like to create a file "/tmp/somebox-touched" when I select and
enter a mailbox. As you can see, \1 here should represent the name of the mbox
(as in many Regex). Is there a way to do this so that I do not have to write
rules for all the mbox one by one?

(actually I just want to pass as argument the name of a mbox to some external
shell command)


Regards,
Yubin
Arkadiusz Drabczyk
2017-12-26 15:23:50 UTC
Permalink
Post by Yubin Ruan
Hi,
folder-hook =somembox 'push "!touch /tmp/\1-touched\n"'
where I would like to create a file "/tmp/somebox-touched" when I select and
enter a mailbox. As you can see, \1 here should represent the name of the mbox
(as in many Regex). Is there a way to do this so that I do not have to write
rules for all the mbox one by one?
Like that:

folder-hook . 'set my_oldrecord=$record; set record=^; set my_folder=$record; set record=$my_oldrecord'
folder-hook . 'push "!touch /tmp/${my_folder}-touched\n"'
--
Arkadiusz Drabczyk <***@drabczyk.org>
Yubin Ruan
2017-12-28 01:26:55 UTC
Permalink
Post by Arkadiusz Drabczyk
Post by Yubin Ruan
Hi,
folder-hook =somembox 'push "!touch /tmp/\1-touched\n"'
where I would like to create a file "/tmp/somebox-touched" when I select and
enter a mailbox. As you can see, \1 here should represent the name of the mbox
(as in many Regex). Is there a way to do this so that I do not have to write
rules for all the mbox one by one?
folder-hook . 'set my_oldrecord=$record; set record=^; set my_folder=$record; set record=$my_oldrecord'
folder-hook . 'push "!touch /tmp/${my_folder}-touched\n"'
Thanks! I didn't know that ^ represent the current folder name. A greate trick
;-)

Yubin
Oleg A. Mamontov
2017-12-28 16:07:57 UTC
Permalink
Hello,
Post by Arkadiusz Drabczyk
Post by Yubin Ruan
Hi,
folder-hook =somembox 'push "!touch /tmp/\1-touched\n"'
where I would like to create a file "/tmp/somebox-touched" when I select and
enter a mailbox. As you can see, \1 here should represent the name of the mbox
(as in many Regex). Is there a way to do this so that I do not have to write
rules for all the mbox one by one?
folder-hook . 'set my_oldrecord=$record; set record=^; set my_folder=$record; set record=$my_oldrecord'
folder-hook . 'push "!touch /tmp/${my_folder}-touched\n"'
Thanks for sharing such an interesting approach. How can it be extended
to remove the '=' starting character? I've tried to do following:

folder-hook . 'set my_oldrecord=$record; set record=^; set my_folder=`echo $record | sed s/=//`; set record=$my_oldrecord'

But unfortunately it doesn't work for some reason.
--
Cheers,
Oleg A. Mamontov

mailto: ***@mamontov.net

skype: lonerr11
cell: +7 (903) 798-1352
Arkadiusz Drabczyk
2017-12-29 07:27:14 UTC
Permalink
Post by Oleg A. Mamontov
Hello,
Post by Arkadiusz Drabczyk
Post by Yubin Ruan
Hi,
folder-hook =somembox 'push "!touch /tmp/\1-touched\n"'
where I would like to create a file "/tmp/somebox-touched" when I select and
enter a mailbox. As you can see, \1 here should represent the name of the mbox
(as in many Regex). Is there a way to do this so that I do not have to write
rules for all the mbox one by one?
folder-hook . 'set my_oldrecord=$record; set record=^; set my_folder=$record; set record=$my_oldrecord'
folder-hook . 'push "!touch /tmp/${my_folder}-touched\n"'
Thanks for sharing such an interesting approach. How can it be extended to
folder-hook . 'set my_oldrecord=$record; set record=^; set my_folder=`echo $record | sed s/=//`; set record=$my_oldrecord'
But unfortunately it doesn't work for some reason.
The best I could come up with:

folder-hook . 'set my_oldrecord=$record; set record=^; set my_folder=$record; set record=$my_oldrecord'
folder-hook . 'push "!touch /tmp/$(echo ${my_folder} | sed 's,^=,,)-touched\n"'

The reason the solution you tried doesn't work is probably because
mutt performs shell substitution before parsing the line as said in
the manual:

"It is also possible to substitute the output of a Unix command in an
initialization file. This is accomplished by enclosing the command in
backticks (``). In Example 3.5, "Using external command's output in
configuration files", the output of the Unix command "uname -a" will
be substituted before the line is parsed."

So what shell sees is:

$ echo | sed s/=//
--
Arkadiusz Drabczyk <***@drabczyk.org>
Oleg A. Mamontov
2017-12-30 20:42:41 UTC
Permalink
Post by Arkadiusz Drabczyk
Post by Oleg A. Mamontov
Hello,
Post by Arkadiusz Drabczyk
Post by Yubin Ruan
Hi,
folder-hook =somembox 'push "!touch /tmp/\1-touched\n"'
where I would like to create a file "/tmp/somebox-touched" when I select and
enter a mailbox. As you can see, \1 here should represent the name of the mbox
(as in many Regex). Is there a way to do this so that I do not have to write
rules for all the mbox one by one?
folder-hook . 'set my_oldrecord=$record; set record=^; set my_folder=$record; set record=$my_oldrecord'
folder-hook . 'push "!touch /tmp/${my_folder}-touched\n"'
Thanks for sharing such an interesting approach. How can it be extended to
folder-hook . 'set my_oldrecord=$record; set record=^; set my_folder=`echo $record | sed s/=//`; set record=$my_oldrecord'
But unfortunately it doesn't work for some reason.
folder-hook . 'set my_oldrecord=$record; set record=^; set my_folder=$record; set record=$my_oldrecord'
folder-hook . 'push "!touch /tmp/$(echo ${my_folder} | sed 's,^=,,)-touched\n"'
The reason the solution you tried doesn't work is probably because
mutt performs shell substitution before parsing the line as said in
"It is also possible to substitute the output of a Unix command in an
initialization file. This is accomplished by enclosing the command in
backticks (``). In Example 3.5, "Using external command's output in
configuration files", the output of the Unix command "uname -a" will
be substituted before the line is parsed."
$ echo | sed s/=//
Thank you for suggestion and explanation, but do I understand right that
there is no way to create internal mutt variable ($my_foo) as
modification of another one ($my_bar)?
Post by Arkadiusz Drabczyk
--
--
Cheers,
Oleg A. Mamontov

mailto: ***@mamontov.net

skype: lonerr11
cell: +7 (903) 798-1352
Arkadiusz Drabczyk
2017-12-31 13:26:33 UTC
Permalink
Post by Oleg A. Mamontov
Thank you for suggestion and explanation, but do I understand right that
there is no way to create internal mutt variable ($my_foo) as
modification of another one ($my_bar)?
None that I'm aware of.
--
Arkadiusz Drabczyk <***@drabczyk.org>
Loading...