News for hackers. Stuff that matters.
Re:Gmailctl – Declarative Configuration for Gmail Filters by saulrh on Sunday March 29, 2020 @01:34AM (#22716696)
`gmailctl` resolves a few of these, actually. The big one is that there's a command to diff your config file with what's in gmail, so you can capture any accidental changes that happen in gmail-land. This also helps with version-controlling your configuration, since it shows you when you just forgot to upload your config.

The imperative behavior and filter size limits are still annoying, granted. You can deal with it by staging through multiple labels, but it's not great.

Re:Gmailctl – Declarative Configuration for Gmail Filters by mehrdadn on Sunday March 29, 2020 @01:42AM (#22716722)
Oh cool! Version control is useful. I might give it a shot sometime. I didn't have anything of the sort.

If you're curious, the tool I came up with had a DSL like this:

  $excom = from:example.com
  $exorg = from:(example.org OR example.net)
  if ($excom AND $exorg) AND -(to:me OR in:spam)
    archive
    if cc:person
      label "Person"
    end
  end
and it'd auto-translate to this:

  <?xml version='1.0' encoding='UTF-8'?>
  <feed xmlns='http://www.w3.org/2005/Atom' xmlns:apps='http://schemas.google.com/apps/2006'>
    <entry>
      <category term='filter'></category>
      <apps:property name='hasTheWord' value='(from:example.com from:{example.org example.net}) -{to:me in:spam}'/>
      <apps:property name='shouldArchive' value='true'/>
    </entry>
    <entry>
      <category term='filter'></category>
      <apps:property name='hasTheWord' value='(from:example.com from:{example.org example.net}) -{to:me in:spam} cc:person'/>
      <apps:property name='label' value='Person'/>
    </entry>
  </feed>
which it would translate back to this:

  if (from:example.com from:{example.org example.net}) -{to:me in:spam}
    archive
  end
  if (from:example.com from:{example.org example.net}) -{to:me in:spam} cc:person
    label "Person"
  end
It didn't treat the filter as a blob (it actually parsed it and removed quotes etc. if appropriate) but it also didn't really change the underlying language either.

But it had variable and did let you nest conditions which made it easier to write some things. (Or so I hoped. In the end I didn't feel it was worth it...)

Re:Gmailctl – Declarative Configuration for Gmail Filters by tbodt on Sunday March 29, 2020 @03:00AM (#22716965)
Another advantage of gmailctl is it uploads the filters using the API, so you don't have open Gmail settings and manually import an XML file.