10 Reasons to Love Launch Center Pro 2.3

It's been four months since we received an update to Launch Center Pro. But, it's an update well worth the wait. In fact, I'd argue it's so massive that it should be called 3.0. And, here are the reasons why I think it's an awesome update.

1. Nested Encoding Helper Tags

If you're familiar with x-callback-url, you've probably already tried to create your own custom actions that involve more than one URL scheme. If you do, you will typically need to encode the URL behind x-success parameter. Launch Center Pro includes a special {{..}} tag to help encode the enclosed URL.

With the new 2.3 version, you can nest these encoding helper tags to make your URL schemes easier to write and read. You can even nest unlimited number of these tags. Launch Center Pro will resolve them from inside out.

As an example, I have rewritten my previous Drafts action to cross-post to Twitter, Facebook, and App.net, by chaining them inside Launch Center Pro.

Open this link to automatically install this action on your iOS device.

After prompting the user for the text to be cross-posted, I store it in the clipboard and use Drafts' ||clipboard|| tag to retrieve it before running any of the action. Because the clipboard content doesn't change throughout the chain of actions, I can use the same ||clipboard|| for all the subsequent actions too.

2. Expand the [clipboard] Tag at the Right Time

As shown in the previous example, clipboard is a great, yet tricky, resource. Prior to this, Launch Center Pro supports [clipboard] and [[clipboard]] tags to return the encoded and decoded version of the clipboard content. But, there's a catch to it. These tags will only be translated once, i.e. before Launch Center Pro runs the URL. While this may be enough for most use cases, there are some cases where we need a better way to manage the clipboard.

For example, if we want to chain one or more actions that can modify the clipboard content, and return to Launch Center Pro to work with the updated clipboard content, we need to resort to an encoding hack. This is probably one of the reasons why Drafts released the ||clipboard|| tag.

Read More

Using Launch Center Pro's [prompt-list] for Better Interaction with List Apps such as Clear, Silo, and Begin

I bet everyone has his own favorite list app. For a long time, I liked Clear and its simplicity. But when Silo came in with its x-callback-url support, I was hooked into it. I have been exploring several new list apps for the past couple of weeks, and one of the apps that I'm interested in is Begin.

Begin is the brainchild of Ben Brooks and Kyle Rosenbluth who were looking to build a simple list app that highlights Today's list and Tomorrow's list. It has a nice dark theme that suits my preferences. And, it also supports x-callback-url.

Now, all these apps have something in common. They allow you to send a comma-separated list of items via URL Scheme to be added to the list. While Clear and Silo allow you to create a new list or use an existing one, you're stuck with Today's and Tomorrow's lists in Begin.

Clear allows you to specify the list name that you're targeting in the URL. It will create a new list only when the list name is not found. Silo prompts you on which list you want the items to be added into. It will allow you to create a new list and add the items into the new list.

By default, Begin will add all items into the Today's list. But, it allows you to append (tomorrow) modifier to the end of each item that you want to send to the Tomorrow's list.

Begin has a nice dark theme and a simple approach to manage to-do lists.

Adding Multiple Items at Once

When doing a "brain dump", I'd like to write as many things as possible in Drafts, and send them in as a batch to Clear or Silo. Because both apps require the items to be sent as a comma-separated list, you need some form of preprocessing to reformat the data before sending them to Clear/Silo. Phillip Gruneich has written a Pythonista script to convert such entries into a comma-separated one. All you need to do is define the end-point according to your needs. He used Clear in his example, thus if you're using Silo or Begin, you may need to modify his script.

As a comparison, Drafts offers a nice built-in action that allows you to write each item on your list as a separate line. Then, simply trigger the List in Reminders action to convert the entire [[draft]] to entries in the default list on the built-in Reminder app. If only there's an easy way to convert such a list into a comma separated one without having to involve Pythonista nor being tied to use the built-in Reminder app.

Launch Center Pro has a prompt tag variant that allows you to convert a multi-line entry into a comma-separated list.

Launch Center Pro's [prompt-list]

Apparently, Launch Center Pro has been including a variant to its [prompt] tag that automatically converts a multi-line entry into a comma-separated list since its earlier version. Yet, I was unable to discover this feature until the release of its 2.0 version. Combined with the new [prompt:label] feature, creating new entries into list apps has become more intuitive to perform in Launch Center Pro.

Here are the Launch Center Pro's actions that you can download and install for Clear, Silo, and Begin. Have fun!

Open this link to automatically install this action on Launch Center Pro 2.0 on your iPhone.

Open this link to automatically install this action on Launch Center Pro 2.0 on your iPhone.

Open this link to automatically install this action on Launch Center Pro 2.0 on your iPhone.

You should follow me on Twitter here.

Workflow: Using TextExpander Snippets in Drafts as Templates for Creating Lists

One of the features in Drafts that I haven't discussed much is its support for TextExpander snippets in custom action fields. With this feature, we can create URL actions that contain fenced abbreviations, such as <<abbreviation>>, and have Drafts automatically expands it when the action is fired.

This feature is different from the built-in support that Drafts has for TextExpander snippets when you write your posts. For example, you can type ddrafts in the post window to have Drafts automatically expand it to the default Drafts' x-callback-url:

drafts://x-callback-url/create?text=&action=&x-success={{}}&afterSuccess=Delete

This is very useful if you like to create your own custom URL actions in Drafts. I personally find it very helpful to store these x-callback-url syntax into TextExpander snippets instead of remembering them. Open this link to download a copy of a TextExpander group containing my most-frequently used iOS URL Schemes.

Use TextExpander to define a comma-separated list of essential items for the template of your lists.

List Templates

While it's quite obvious that TextExpander snippets can really help the process of creating new URL actions in Drafts, figuring out how they can be used inside the actions themselves is not a trivial task. One of the workflows that I find most useful is using a comma-separated list of items stored in TextExpander as a template for lists that I frequently use and discard afterwards. Examples of such lists include travel packing list, weekly groceries list, and daily habit list. Creating a slightly modified version of them each time a new event occurs can be cumbersome.

For example, I can have most of the basic essentials on my travel packing list to be relatively the same, regardless of where I'm going and whom I'm traveling with. Yet, depending on the destination, duration, and travel companions, I might want to add a few more items to the list. On the other hand, the basic list itself already contains more than a handful of items that I wouldn't want to forget. The same can be said with weekly groceries list and daily habit list.

Read More

Tutorial: Designing an x-callback-url Action with x-cancel Parameter

When we design an x-callback-url action, we tend to focus on the x-success parameter because we want to get more things done. Yet, when we use these actions, especially the ones that involve two or more chained actions, sometimes we feel the need to cancel the first task and either return to the original app or continue with the second task. Either way, based on our most frequent use cases, we may need to revisit these chained actions and redesign them to include the x-cancel parameter.

This diagram shows how the inter-app routing of Fantastical and Clear action chain.

Cancel and Return

For example, in one of my earlier workflows, I share an action that allows you to add an event in Fantastical and a task item in Clear with a single post in Drafts. When I use it on a regular basis, I often find myself cancelling the event and want to return to Drafts. Either because I want to cancel the intent altogether or because there's a major change I need to make on the entire command structure that I prefer to restart it in Drafts. There has never been a case where I want to cancel the event, but continue to add the task item in Clear.

Read More

Workflow: Adding an Event in Fantastical and a Task Item in Clear with a single post in Drafts

Today, the great guys at Flexibits released a new update to Fantastical for iOS. In its updated FAQ page, they announce that Fantastical 1.1.1 update fully supports x-callback-url. That means it supports the x-source, x-success, x-cancel, and x-error parameters.

To me personally, that's a great news, because I've been trying to automate the workflow of registering a new event in Fantastical while also adding a new task item in Clear. The new Fantastical update enables me to write everything I need as a single three-line post in Drafts. Here's a skeleton of how I want to write my post:

The event details to be parsed in Fantastical
The list name in Clear
The new task item to be put in that list

Read More