On Thu, Dec 28, 2017 at 07:07:57PM +0300, Oleg A. Mamontov wrote:
> Hello,
> 
> On Tue, Dec 26, 2017 at 03:23:50PM +0000, Arkadiusz Drabczyk wrote:
> > On Tue, Dec 26, 2017 at 06:36:20AM +0800, Yubin Ruan wrote:
> > > 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?
> > 
> > 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"'
> 
> 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.

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 <arkadi...@drabczyk.org>

Reply via email to