Automation in OmniFocus 2.14 (released 2016-04-26)

If you set up your project the way you want it in OmniFocus, then use Share to Copy the TaskPaper form of your project to the pasteboard, what does that look like? (Any chance your database is configured to use a different separator rather than the default “:” (space colon space)?)

I believe it’s still the space-colon-space delimiter - it’s what’s displayed in my context views, and I don’t recall having fiddled with a setting, much less know how to change it. So I looked it up and found a handy support thread to show how to reset the separator. Sure enough, it looks alright.

Here’s where I think things get a little weird.

Here’s an excerpt from my template:

- get documentation for WOs @defer(«releaseDate yyyy-mm-dd» - 5d) @due(«releaseDate yyyy-mm-dd» - 2d) @context(office : email) @parallel(true) @autodone(true)
	- get implementation plans from teams @estimate(1h) @context(office : email)
	- get SQL scripts @estimate(1h) @context(office : email)

…and what’s rendered is:

- get documentation for WOs @autodone(true) @context(Office) @due(2016-05-18 00:00) @defer(2016-05-15 00:00)

		- get implementation plans from teams @estimate(60m)
		- get SQL scripts @estimate(60m)

So it’s stripping out the stuff after the separator too on the top level too (“Office” as opposed to “Office : Email”).

Does it work if you use Office : Email (with capital letters)? I think hierarchical context lookups are case-sensitive.

Ah, you’re right, it was a case mismatch. I corrected the case and it worked great. Thanks for catching that.

I do find it strange that I have to provide contexts for action groups. They don’t seem to inherit from the project consistently. This, for example, doesn’t inherit the Office context from the project but other tasks do.

- prepare CR for final approval @due(«releaseDate yyyy-mm-dd» - 2d) @parallel(true) @autodone(true) @context(Office)
	- fill out Change Control document @duration(30m)
	- attach test scripts @duration(15m)
	- zip up implementation plans and attach them @duration(15m)

Just a little snippet, I wanted a template with a date which depends on two variables, a start date and a delay, along with offsets for each task:

Here’s what I used.

@due(«date of trip yyyy-mm-dd» +«Number of Nights»+4d 10pm)

I’ve got 2 questions:

  • Has the relative date issue been fixed yet?
    I have a task in an editorial taskpaper template set to “<> -2d” and that always gives me 1970-2-1 instead of the 2 days from the due date…

  • Any news on importing taskpaper projects into a specific folder?

Thanks guys!

If you specify your baseline date as yyyy-mm-dd (e.g. today is 2016-09-09), the relative dates should always work.

Some other date formats are harder for OmniFocus to parse, and it can end up not understanding where the baseline date ends and the relative date starts. If you’re having trouble with another date format, we’ll need to know exactly what you’re entering and might also need to know your current locale’s date format settings.

Yes, 2.16 added support for this (as noted over in the implementation details thread):

Hey @kcase: To clarify, it doesn’t look like it’s possible to customize the location for a taskpaper import for a single document, right? It’s only as a part of the paste action? So there’s nothing like @target(Foo) or @target(folder/Foo) syntax that would let us create the project in a nested folder. Instead, we’d need to use the specific target param in our url?

A little help? I posted this question, but nobody’s commented.

I want to make a list of tasks in Drafts, and have them become multiple tasks in OF2 with a predetermined project, context, defer, due and flag. It would be like:

title=[list item] project=JobSiteTasks context=JobSite defer=today due=today flag=true

Is there a way to do this? Do I need to use javascript or something?

(The use case is being at the JobSite context and having many new immediate tasks thrown at me. I barely have time to jot them down in Drafts, and assigning project/context/defer/due/flag to each is untenable in the fast-paced environment. I’d like to jot them down in a Drafts list, tap a button, and have them all be categorized automatically. I’d like to just look at the JobSite perspective and see everything I have to do, including the short term things they just dropped on me.)

Thanks!

As I said on Twitter (userid @martinpacker) I enjoyed setting up a Taskpaper-based template in Editorial and using the Omnifocus-supplied workflow to turn it into a couple of projects.

(As I said in a reply to that tweet) I would like, however, to see some simple enhancements to this script.

I know they are simple-ish because I examined the (Python) code at the heart of the workflow.

The question is how to make this happen.

Thoughts?

Guided here by @kcase

The MacSparky Field Guide did a nice job of describing how to use Editorial (via Taskpaper) to add a project template.

This works fine for me but (or maybe “and”) :-) …

I have several similar project types so the ability to code conditionals would be nice. I know the Taskpaper format doesn’t include this but something like…

£ifdef(<>)

  • Examine batch jobs
    £endifdef

Would really help me.

Also default values for placeholders such as:

£default(Batch=’’)

Ultimately

£include “boilerplate.taskpaper”

Sorry I can’t find octothorpe or french quotes keys on this keyboard.

Having examined the Python some of these look very doable, others a larger programming challenge. So…

Even if I code them how do I get them out there? Maybe a branch in github?

I also thought. - in testing - that if I specify a project with the same name as an existing one it creates a duplicate project (name). This with nested projects where the duplicate project name is the top level one.

Can anyone confirm or deny?

Thanks, Martin

I guess the follow up question is, has the Editorial workflow been updated (or how do we update the Editorial workflow ourselves, if our knowledge in Python is limited), to take advantage of importing taskpaper projects into a specific project?

The Python is relatively simple, as it happens.

If this hasn’t already been done already it would be nice to Open Source the code - probably on github.

I made an attempt at this a couple of months ago on this thread. The Editorial workflow I shared on the thread will split up a taskpaper file into separate projects or one project (using a custom “++” heading) and then import the project(s) to the specified location.

A few other approaches, using the Drafts app, were created on this thread to demonstrate how tasks can be imported to a single project at a time.

It’s my understanding that a simpler solution for specifying a project target doesn’t yet exist other than by developing custom import scripts or workflows.

Ideally, I think users are looking for a simple “@project(string)” tag, similar to how contexts are specified, or even better, a “@target(string)” tag that would work similarly to the current “paste-to-target” method (allowing you to specify import to targets other than projects, such as folders, or even actions).

1 Like

That’s exactly what I was looking for. Thanks for that.

1 Like

I’m seeing an issue with contexts that have parentheses in them. For example:

@context(Energy : Short Dash (15 min))

The resulting task does not include a context, and its name contains an extra ) at the end, e.g.

- Do something @context(Energy : Short Dash (15 min))

Would end up as Do something) without a context.

I tried escaping the inner parentheses but that did not have an impact. For what it’s worth, they are not escaped when exporting TaskPaper from OmniFocus.

Please advise.

Please forgive me if this has been answered already. I scrolled through and searched as best I could, and I didn’t see any mention of this issue.

Im trying to create a template in Editorial and Taskpaper that woud make a task the day before a meeting. Say I have a meeting and I want to prepare something for it the day before and have that task due at 11PM that same day. So defer till the morning of the day before and due at 11pm on the day before. So I write:

Prepare Meeting @defer(«date»-1d) @due(«date»-1d 23:00)

When I run it, the due date is set to «date» (I believe) the year 2001 at 11PM. If I remove the “23:00” it makes it due at 12 am - the same time as the defer date. So the defer and due times are the same.

If I remove the date math with the variable and write something like

Prepare meeting @due(«date» 23:00)

It will work. But there is something about the adding «date»-1d that isn’t working right.

Am i writing this wrong?

UPDATE: OK! date needs to be yyyy-mm-dd to work. Got it. I was using something like “Jan 10”

Yeah, that bug got me a few times. I make my fields things like «date yyyy-mm-dd» as a reminder. I expected the bug to be fixed without me noticing as a result, shame it’s still there. Sorry I didn’t notice your comment earlier, it would have been easy to help you out.

The issue here is that the date parser sees “jan 10-1d 23:00” and tries to guess how to turn those pieces into a date, and mistakenly guesses that the third number is a year. You can solve this by placing a plus between the input date placeholder and the rest of the date, i.e. “«date» + -1d 23:00”, at which point entering “jan 10” should work just fine.

1 Like