Flexible Packing List in Drafts

Recently, I created a shortcut for the Club MacStories Discord as part of the Automation Academy. If you're not a member, I highly recommend doing so. This shortcut was in response to the latest lesson, all about Reminders. I've been meaning to create this for a while, and it seemed like a good idea to apply this lesson in practice.

From the Discord:

I've been using packing lists in Drafts for a long time. Once it is created in Drafts, I send a single task over to Reminders with a link back to the packing list. This has worked well for years, but when I read the piece by Federico, I thought that maybe it'd be a good idea to make a customizable, variable shortcut for a packing list in Reminders instead.

I do appreciate this shortcut, as it creates reminders with subtasks in a packing list. Unfortunately, there are three things I do not like about it after using it for a short while: first, I cannot create a new list for each trip I without manual interaction; second, it clutters up my system with a lot of new tasks; third, it takes longer than I'd like to run. Now, that last point is a complete nitpick, but the first is critically important. There has been more than one occasion where I have needed to pack for work trip and then a subsequent personal trip. Having two lists to separate them is more ideal for me.

I started thinking about how I could better use Drafts to manage all of this. I have had a single packing list action for a long time. My biggest complaint about using this method is that it wasn't variable for the type of trip I was taking. I'd run the action to create the same list over and over, then have to remove items that weren't applicable to that particular trip. That kind of solution works, but is far less elegant. Having just gone through the shortcut activity, I couldn't help but think that there was a better solution for me: cleaner appearance in Reminders and faster automation with Drafts.

Managing a workspace is easier for me than a complex dictionary with arrays and items.

With this in mind, I created a new tag packing. This tag is only used by my newly created Packing workspace. None of my other workspaces contain this tag, and this workspace contains only this tag. I've also archived these particular drafts to keep them out of any other workspace inbox in the future, so it's very filtered for what I need. Next, I take each category from my shortcut and make its own draft. Within each draft, the title line is formatted ### Category and I have checkboxes for each item underneath. I can modify each draft as I need, or I can add completely new categories with items to pack.

Using a query on the drafts with the specific tag, I created a checklist prompt: it presents the same information as what was in Shortcuts and functions in much the same way. I even briefly thought about making an HTML prompt for this, but thought that this was easier and fits a user's preferred theme better; this is about quick interaction after all, right?. The way this is constructed grabs all of the draft titles and presents them as items; as the categories grow, so does the list.

Setting up individual trips is better this way.

The next script then pulls in the selected draft content, and compiles it into a single list. There's an optional forth step, which creates a new task in Reminders with the URL to the newly created draft. I personally don't like the way this is rendered as just the URL. I actually use Siri to do this, usually when on my iPad by pressing Globe + S and typing to Siri "remind me of this". This shows the Drafts icon to the right of the task and the URL; I will delete the URL part, which still keeps a link via the icon on the right, for cleanliness.

I prefer using Siri to "remind me of this", and edit the task in Reminders manually to make it cleaner.

This might seem a bit more complex than editing a single shortcut, but there are a few reasons why I prefer this method. First, It runs really quickly: sure, I might only be saving a few seconds, but it makes me feel better. Next, I think that the manipulation of text within a draft, combined with the power of arrange mode in Drafts, is better. I can also duplicate categories – like with my backpack and travel sling – to make a different version with or without camera gear far easier than creating another array in Shortcuts. Finally, it keeps me in Drafts. I'm not saying that Shortcuts isn't the right tool for most here, but I know that Drafts is a better tool for me. I trust the system I've developed over years, and it doesn't let me down. Unfortunately, I can't say the same for Shortcuts: even in the setup of the packing checklist shortcut, there were bugs that prevented me from completing it fully. With the groundwork done in Drafts, this is fully extensible and will adapt to new situations or changes in my gear.

Now that I'm going to travel slightly more than I have in the past, having this type of flexible packing list will keep me better prepared for travel. As I continue to venture out into The World, A.C., [1] I'll have the confidence and assurance that I have packed everything I need for any type of trip that might come my way.


  1. After COVID. ↩︎


Drafts 29: Autocomplete

With Techtober coming to an end, all of the major OS releases from Apple are finally out there, however buggy they may be. And of course, Drafts 29 has been released to accommodate the features in them. But some of the new features aren't even dependent on the latest OS releases, and add new levels of functionality to an amazingly capable app. Not only does the Mac have full Shortcuts support with the release of macOS Monterey – which as an iOS/iPadOS user I won't be writing about here – but Drafts also added new autocomplete options to its feature set. This post will go over what they are, what they do, and how I have incorporated them in my daily practice.

The first of the autocomplete features is fairly simple: creating a link to a specific draft. Creating a link starts by typing [[ and then a menu pops up with your most recent drafts. Selecting a draft completes the [[wiki-style]] link for the draft for quick reference. You can also use the arrow and enter keys to select the item you want, so your hands don't have to leave the keyboard. This has been great for my work and personal wikis that I have been creating and is a feature that has improved my workflows considerably over the past year.

Sometimes you want to take it a step further than a link and include the content of the draft inside another draft, which is where the second feature comes in. Starting with <<, you can now select from the same recent drafts list and then upon selection, the entire content of that draft is inserted into the current draft. This is great for those that use templates from existing drafts for various purposes like taskpaper lists, emails, and more.[1] I'll use this option far less frequently, but I'm thankful that the option is there. If you dare to use a custom syntax, you can even customize this autocomplete option to use the [[body]] template tag instead of [[draft]]. I'd only recommend changing this if you know what you're doing: I haven't changed this myself, as it's pretty easy to delete the line through an action or by using the arrange mode.

The last autocomplete feature is all about text. By default, the trigger is !!, but you can customize this in the app to be something else if you prefer. When you type this, you'll bring up a list of items to select, and upon doing so, it will insert that text into your draft. You can customize all of this within the app, in the editor Aa menu. But the fascinating thing here is that you can use this for standard text snippets or utilize the templates feature of drafts to go further.

There are a few simple examples of using templates in this way. Dates and times are a perfect example of this. The standard [[date]] template will insert the date in the YYYY-MM-DD format, but using strftime format string methods, you can customize both dates and times to be in a specific format: using [[date|%A, %B %d, %Y]] will insert text like "Monday, October 25, 2021" and using [[time|%l:%M %p]] will insert the time formatted in an AM/PM format. Another great example is some of the draft information, like [[uuid]] or the url of a draft using [[draft_open_url]]. I've even created a location text autocomplete, that inserts Location: [[latitude]], [[longitude]] for the current location of the device.

Where things start to get interesting is when you start combining a bit more of the complex template examples. Drafts also uses encoding and HTML templating which extends what you can do with the text. Using these options in conjunction with the [[clipboard]] tag, you can create functions to insert copied text when the {{[[clipboard]]}} has been encoded or insert the HTML for the %%[[clipboard]]%% by applying the correct characters. I use this often for HTML. In the future, I'd really like to see some new template features added specifically for this purpose to add title case, hyphenation, encoding/decoding text, and more. This could even be done using the same syntax as the date and time examples, where the options are provided after a pipe like[[clipboard|hyphenate]]. If you're in to using [[template|path]] files in action steps, you can now use those to directly insert the text into a draft.[2] Combining the power of templates into text insertion has been a game changer for me, and I can't wait to see this expanded further.

You can also use autocomplete to insert blocks of custom text that have multiple return lines, giving more power to text replacements than the standard implementation of iOS. For example, I use my signature often in emails but I prefer to send them as HTML. If I start this in Drafts, my standard signatures with returns does not work. So in addition to all of my information –  which includes my name, phone, Twitter handle, and email – it also includes line break HTML <br> after each line, saving me time when writing emails in Drafts. For work, I use a custom header which inserts two wiki-style links for my Work Tasks and Work Wiki files for quick navigation.

Make custom blocks of text using autocomplete.

But where I've personally appreciated text autocomplete the most is where I have been able to take single or multiple menu actions and completely replace them. I used to have keyboard shortcuts to insert the date and/or time, but now I can do both with the text autocomplete trigger. I've taken my "Insert Text Element" action and completely replaced it with autocomplete. I'm sure I'll find some more as I go through a cleanup of my entire Drafts setup, but having some extra keyboard shortcuts will come in handy down the road.

All of the autocomplete features work in the editor window itself, though I'd love to see an option to have it for the script editor to insert blocks of code that I often use. With the additional option to add multiple custom text autocompletes in custom syntaxes, I could even add this for when I start a new script in draft form, rather than in the editor. I haven't done any customizations beyond what I've shown here, but I'm sure that given some time I'll start exploring a bit more and come up with some interesting use cases that I'll be sure to share. For now, at least, I've updated my Draftsdown syntax to support the standard autocomplete features discussed here.

The new autocomplete feature for text has replaces several actions for me.

Like other new features introduced into Drafts, the new autocomplete features will be a huge productivity boost to some, and open new opportunities to others. The feature will get even more feedback, and perhaps some new enhancements in the future. We'll see some power users use custom syntaxes pushing this even further, something that I personally can't wait to see. This is yet just another rung on the feature ladder of Drafts. The view from the top is great.


  1. There's also another option for this that I'll explain in a bit. ↩︎

  2. This works best when the file is in a .txt format. ↩︎


Cycle Through Workspaces

Not long ago, my buddy Seth walked me through a bit of his Drafts setup. He's been creating a lot more workspaces as of late, but didn't think the workspace switching actions I had created before were enough, and he wanted a better way to cycle through them.

My coding skills aren't that great, and quite frankly, are rusty as hell because I haven't really done a lot of it due to other commitments. At the time, I was preparing for some big reviews at work, so I didn't even have time to look into it. Seth then reached out to the Drafts Community. It did take long before Jacob (jsamlarose) answered the call and created the action Seth requested. (Great work, Jacob!)

After discussing this over the phone with Seth, he was elated at his new method of switching. But he also wanted to cycle this in reverse as well. A quick search later, I found the .reverse() javascript function, and simply added the line under the first line of the script. This reverses the array created in the line above, and then the rest of the script works in the same way. I ended up renaming the actions to Cycle Workspace FWD and Cycle Workspace REV and changing the icons used, along with changing the keyboard actions to ⌘→ and ⌘← respectively.

This is just something simple that's really great and really effective. I think too often we can complicated the automation of different things and set our sights on creating complex actions (or shortcuts) to make our lives better. I'm finding that more and more, the simplest actions tend to be the right ones.


Drafts 28

In the past few years, after a summer of running and testing beta software, I often find it difficult to sit down and think about what is new. Don't get me wrong: it's not because there isn't anything, but rather that it's become second nature to the way I'm working with my systems. This is probably why I don't do massive reviews of iOS, iPadOS, watchOS, or macOS every year: having to keep all this straight in my brain – given everything else I have going on in my life – just isn't going to happen. But every fall, I do enjoy writing about the latest version of Drafts and how it's improving my daily life.

You're going to notice something here: this isn't going to be a big, extensive review: there's no actions, no crazy automations. This isn't for a lack of updates, but it's rather a reflection of where my life is at the moment. I actually think that if I'm going to continue to share content – especially with Drafts, Shortcuts, productivity, journaling, etc. – I need to approach everything I do from this point on from a smaller perspective, rather than an all-encompassing viewpoint. I think that many of you would appreciate shorter, easier-to-digest posts that can give targeted use cases/actions/automations going forward. This is the way.

Drafts, of course, provides the compatibility you've come to expect with the new iOS, iPadOS, watchOS, and macOS updates that occur every fall. This year is no different, but one important thing is that some of what Drafts now provides is further extension of already existing functionality. Some of the new features have existed on one part of the platform and not the other due to OS limitations, but now they are synchronized in iOS/iPadOS 15 and macOS Monterey. It brings a sense of cohesiveness across your devices that previously wasn't there, and I think will open the doors to a lot more possibilities for both iOS/iPadOS and macOS users alike.

For example, one of the biggest parts of this year's fall update is the all-new watchOS app, completely rewritten in Swift. This isn't a small undertaking, but it takes the already fantastic watch app and adds additional functionality. It retains everything that it had before, but adds the ability for multiple compilation types. If you really want, you can now have an all-Drafts watch face. Another nice feature, and one I've wanted for a while, is the inbox count reflecting the default workspace options; this means I no longer need to see 60+ drafts in my inbox, but rather only a handful that I want to keep in an inbox.

Ok, an all-Drafts watch face might be a bit too much, even for me, but it's possible.

Another huge update is the incorporation of Shortcuts for the Mac. As I don't use a Mac, I'm not the expert here, but you can use a lot with it. All of the same features you've come to love on iOS are available – even if Shortcuts is buggy – and the Mac adds a few specific items like AppleScript and shell scripts. Hopefully someone out there writes this up nicely: should they do, I will link it here.

While I do use the watch and not the Mac, those aren't the big things for me this year, despite the massive efforts of the AgileTortoise himself to bring both of them forward. He's not only been working hard on those, but many others across the other parts of the ecosystem. One of the big features in iOS/iPadOS is the implementation of Live Text. This feature is great, as you can select text from images and scanned documents. Drafts takes advantage of this feature in iOS by providing a menu option to scan a document directly and import the text right on the iPhone. This, like dictation before it, has been a game changer for me when I've needed it for work, personal, or legal things over the course of the beta. The fact that I don't have to manually transfer something into Drafts is huge: from a small bit of text I want to use later to a large document, I can tap (from the widget!) and import the text right into my text editor of choice.

In iPadOS, the support for the latest implementation of the keyboard shortcut menu overlay is there, which mirrors the awesome Global keyboard shortcuts introduced this year. You already had something similar in previous releases when you pressed the command ⌘ key, but it was a jumbled mess of what the keyboard shortcuts where. Now, you get a tabulated overlay in easy-to-locate divisions. Given that I have a ton of actions and tried to set up the best keyboard combinations that I could, this is very helpful for me since I might forget them if they are infrequently used. There are 4 categories that are default – file, edit, editor, and view: the remaining sections are all of the actions which have your keyboard shortcuts assigned. Once you invoke the menu, you can either enter the keyboard combination or, my personal favorite, tap the keyboard shortcut in the menu overlay to run it. Saves me some clicks, and I love it. There's also a search feature where you can search the menu overlay, which is nice for someone like me who has a lot of actions to search.

As you can see, I have a lot of keyboard shortcuts.

The share extension has been updated to include the recently used drafts for easy selection and re-use. While this isn't the Quick Note feature we'd all love,[1] it is going to be helpful for when I'm writing/researching a topic I want to investigate and/or write about. Another fantastic usability improvement is the new tag selection interface, which lets you select from your current tags as you type so you don't duplicate them in weird ways (think: post, posts). In the last few years, I've actually pared down my usage of tags because I didn't want them to proliferate too much; now that this feature is there, I might tag my drafts with more than a singular tag. I like this interface so much that I'm hoping Drafts adds this same functionality for creating [[wiki-style]] links, as it's something I'm using a lot more for my own personal uses. I know that this would be a massive undertaking like folding headers would be, but I can't help but want both in the future.

Speaking of wiki-style linking, there are a few new ways to interact with them. You can now right-click/long tap on them to give a quick look of the text as well and commands for wiki links: open the draft in the current or new window, preview in a new window, or a series of copy commands for the content, title, link, or UUID. I really like the new expandable/collapsible menus in iOS/iPadOS 15, which Drafts takes advantage of here; it's a great way for Drafts and other apps to add a lot of functionality at your fingertips.

Folder bookmarks are a feature that have been included in apps like Scriptable for a long time. But they are now included in the File action and File Manager scripting. This will allow those that like to write in other apps – say Obsidian or iA Writer – to save to a specific location outside of the Drafts sandbox. You can also use the scripting to read as well as write to a location, making it possible to use Drafts with apps like Working Copy on iOS/iPadOS or Taskpaper on the Mac.[2] I think this will open a door to those that love using Drafts on iOS/iPadOS and then might want other tools on the Mac. It's not using the file manager to store the files, but it does give the option to use it through actions. I can see where someone might use this to run a single action on files with a specific tag, and have them saved to a specific location in Files; they might also run another action to import those files back into Drafts. It's not something built in and requires manual syncing but it's very possible to create now. I hope to see it taken that last step further to open up Drafts to more people who are searching for their ideal solution.

There's a new "What's New" screen where you can find all of the high-level features as well as a link to the full change log to see the small improvements to things like interface updates, automations, bug fixes, share extensions, and more. You can find this in the Settings (gear) menu in the bottom right of the screen, just under where you can manage your subscription.[3] You can interact with this new what's new screen and even jump to the Drafts website to check out specific features or the full change log. And I almost forgot the best part of this update by far: the two new icon choices. I really adore the color palette of both of them and think they are fantastic additions.

The biggest thing that strikes me with this release is the continued customization and usability enhancements update after update with Drafts. Going all the way back to the initial Drafts 5 launch, the customization was further refined from Drafts 4; workspaces created a customizable, modular interface to make that app yours. In Drafts 15, contextual menus and updated icons further extended the customization to pick just the right look for workspaces and actions; Multiwindow support brought more power to the user by navigating back and forth through their drafts. Drafts 22 brought us widgets to customize our home screens and quickly jump into the app or use an action directly. In Drafts 26, the ability to completely customize the interface and create your own syntaxes was introduced, spawning completely unique apps from user to user. And now with Drafts 28, we get more integrations in actions to make Drafts yours and be more extensible. This is yet another solid release in a long string of updates since April 2018. I'm looking forward to what's coming next.


  1. Yes, I'd like the option to use Drafts instead of notes, but I don't think that will ever happen. ↩︎

  2. Looking at you, Merlin. ↩︎

  3. Which I highly recommend you pick up. ↩︎


On This Date

Even though Seth and I no longer have a podcast, we still talk nearly daily about a lot of things. One of them is Drafts, and how we are using it for small life improvements here and there. Journaling is one of them, and it has become a part of standard practice for me. I don't always have to put something in that's poignant, but I do document quite a bit from time to time. I'm not perfect at it, but I try to do the best that I can. After all, it's for me – so if I don't do well at it, I'm only disappointing myself…

I journal using Drafts because I trust the system. Using Shortcuts, I run an automation in the morning to create the entry at 4:00am so I never miss a day; this entry is created in a specific format with the journal tag, date heading in yyyy-mm-dd format, and some weather and date information. I have another automation that runs just before midnight to save it as a nice-looking PDF at night and archive the draft. I still keep all the journal entries in Drafts: they live in my Journal workspace in the archive folder at the top of the drafts list. I keep them just in case I need to search for something later, even though I hardly do it. But there are times where I might want to go back and review them just to see what happened in the past. One of Seth's problems was that he wanted a way to review things that happened on that day throughout the life of his digital journal. We used to use Shortcuts to do this, but that's cumbersome at best. Why use another app when Drafts is perfectly suited for this? Seth ended up finding this forum tip on creating temporary workspaces, which admittedly was from a while ago (November 2018). Even though a lot of you think I'm an expert, there's quite a bit of this stuff that I don't know or use.

Using this example, I was able to create an action to show what happened On This Date. In simple terms, it searches for all drafts tagged journal, then searches for a string of the current date in mm-dd format; the action then has some code to let you filter the look of it, then load the workspace. I added a few things because I want to keep my Journal themes applied when creating this temporary workspace.

Let's walk through the code a bit. First, you'll find some configurable variables for your searching. This sets the name of the temporary workspace, the tags you want to include (or omit using !tag), and some strings to search.

//BEGIN config variables
//setup tags or searches you wish to load...
let name = "On This Date";
let tagFilter = "journal"
const now = new Date()
const date = now.toString("MM-dd")
let queryString = date;
let group = ActionGroup.find("Journal");
app.loadActionGroup(group);
let lTheme = Theme.find("custom", "Journal Light");
let dTheme = Theme.find("custom", "Journal Dark");
//END config variables

I also added the action groups I use for journaling as well as my journaling themes as variables, since I want to make sure I use them later in the action. Now that all that is configured, we can set up the workspace:

//create workspace
//for other options, see:
//https://reference.getdrafts.com/objects/Workspace.html
let ws = Workspace.create();
ws.name = name;
ws.tagFilter = tagFilter;
ws.queryString = queryString;
ws.setInboxSort("created", true);
ws.loadFolder = "all";
ws.showPreview = false;
ws.showTags = false;
ws.showLastAction = false;
ws.showDate = false;
ws.loadActionBarGroup = group;
ws.loadActionListGroup = group;
//ws.lightTheme = lTheme;
//ws.darkTheme = dTheme;

There's a surprising amount of customization. I did find out that there was an undocumented .showDate customization that I could take advantage of. The only thing I would like to see added here is .lightTheme and .darkTheme so that I can set the themes directly with the temporary workspace which would eliminate the need for me to call them using the other methods; maybe those will get added in the future. The last part applies the workspace, shows the draft list, and applies my themes. I appreciated the callout in the original action, so I kept it in there: the workspace is temporary unless you use the .update() function, very much akin to a temporary draft to store information.

//unless you call `ws.update()`, this ws is temporary
//load this workspace, and display draft list
app.applyWorkspace(ws);
app.showDraftList();

//set the Journal themes
app.lightTheme = lTheme;
app.darkTheme = dTheme;

Actions like this can seem like a lot at first, but they are fairly simple enough to manage. This action can bring a lot of awareness and possibly even some joy to your day, looking back on the things you've done in the past. I've also included this in my widgets: I've found that I use it more often this way, and it's a great use of a widget action for Drafts.


I have to admit, this is the first time in a while that I've done something like this to change some of my workflows. Not because I don't adore Drafts, but because of how life has been going for me (all good things, thankfully). But it makes me wonder: what else am I missing? Seems like a great time to go exploring…