keyboard maestro

    Fixing Things with Keyboard Maestro

    I can’t help playing with Things sometimes. Even though there are plenty of reasons not to use Things, it’s pretty. It’s my attractive nuisance. However, I can’t stand its inability to complete repeating items before they’re scheduled, so I fixed it.

    You know I like Keyboard Maestro and Shortcuts. I combined them to work around Things’s glaring shortcoming. So can you!

    First, install my Shortcut, Things: Get ID of current selection. Look inside it. It only copies the internal ID of the currently selected item to the clipboard.

    Then, install my Things: Repeat action early Keyboard Maestro macro and set it to trigger with a hotkey you like. Since cmd-K is the using Things shortcut for completing an item, I set mine to trigger when I press shift-cmd-K. Then it takes these steps:

    1. Calls the Shortcut to get the ID of the current Things item.
    2. Goes to the latest completed copy of that item.
    3. Duplicates the completed copy and navigates to the new copy.
    4. Calls the Shortcut to get the ID of the new copy.
    5. Marks that copy as “open”, that is, not completed.
    6. That causes Things to move the copy from the “logged items” section back up to the list of open items, so the macro calls a Things URL to jump back to the re-opened, copied item via its ID that we saved a couple steps ago.
    7. Marks the new copy as deleted. That causes Things to update the repeating task so that its When and/or Deadline dates are relative to today.
    8. Calls the Things URL to jump all the way back to the repeating item, via its ID that we saved in the first step.

    Whew. That’s a handful, huh? But it mostly works!


    1. There’s no error handling. Keyboard Maestro just blindly sends keyboard presses and menu selections to Things and assumes that everything’s going well.
    2. I’m not really sure what would happen if you run the shortcut with no items selected, or more than 1 item.
    3. If it’s been ages since the last time the item was completed and there’s no longer a “latest” item to go to, I don’t know what happens next.

    In short, use this at your own risk. There are a dozen things it could be doing better or more safely and I haven’t (yet) done any of them. Still, it works! If I squint hard enough and get lucky, the new macro makes Things repeating actions work like every other to-do app in existence. I’m calling that a win.

    Reliable Shortcuts with Stream Deck and Keyboard Maestro

    I talked myself into buying a Stream Deck to control my Mac. I didn’t want one for the media features. I wanted a cool, programmable external keyboard-like thing to trigger actions. For example, I have buttons to turn my office lights on and off, toggle between playing sounds through my external speakers and headphones, and open my notes app to the Today’s Journal page. I like it.

    Most docs I found suggest using the Shortcuts plugin to execute Apple Shortcuts. I recommend that you use Keyboard Maestro instead. The “Shortcuts” plugin is neat in principle. It’s free. It looks like exactly the right tool for the job. For me, it’s not. Using the most current macOS (version 14.3.1), Stream Deck app (v6.5.0), and plugin (v1.0.7.1), keypresses work about half the time. After using the setup for a few days straight, it always hangs and stops responding altogether until I quit and restart the Stream Deck app. It’s frustrating to have this nice device to boost productivity, then have to pause for a beat every time I’ve used it to see if it worked.

    The Keyboard Maestro setup’s experience has been the opposite. Once configured, if I press a button, that button does what it’s supposed to do 100% of the time. It has some drawbacks: it’s slightly more complex to configure, and you have to pay for Keyboard Maestro (which if you’re a Mac power user, you’ll want to do anyway). Still, the result has been worth it.

    Here’s how I used it to build the toggle I mentioned that switches between speakers and headphones.

    First, I created Shortcuts called “SoundSource: Output to Headphones” and “SoundSource: Output to Speakers”, with each Shortcut doing the expected thing. The names don’t matter: I could have called them “Spam” and “Eggs” for all my Mac would care. I just like being verbose so I can quickly find things again next time I want to tweak them.

    The Shortcuts

    Next, I made Keyboard Maestro macros that execute those Shortcuts:

    "SoundSource: Output to Headphones" (without trigger) "SoundSource: Output to Speakers" (without trigger)

    Then I opened the Stream Deck app to create the “Multi Action Switch” button. I put mine on row 1, column 3. That’ll be important in a moment.

    Toggle 1 Toggle 2

    When you create a Keyboard Maestro action inside a Multi Action Switch, the Stream Deck app doesn’t fill in the “Virtual Row” and “Virtual Column” values like it would if you put the Keyboard Maestro action directly into an empty key. That’s OK. We’re going to change the column value anyway! See how I used Virtual Columns “301” and “302”? That lets the Keyboard Maestro app treat these as separate buttons. The Stream Deck app will do the work of remembering which action we’re currently on.

    With that done, I went back into the Keyboard Maestro editor and added “USB Device Key Triggers” to each macro. When it was waiting for me to press a button, I tapped the physical Stream Deck button I was setting up.

    "SoundSource: Output to Headphones" (with trigger) "SoundSource: Output to Speakers" (with trigger)

    That’s a little bit more complicated than the “Shortcuts plugin” setup, but only a little bit:

    • I’d have to create the Shortcuts either way.
    • I’d have to create the Multi Action Switch either way.
    • Instead of using the “Shortcuts” plugin to run Shortcuts directly, I send a trigger to Keyboard Maestro and have it run the Shortcuts.

    In exchange for this smidgen of extra one-time work, now my Stream Deck buttons work perfectly and instantly every time I press them. I don’t hesitate to see if the effect I wanted to happen had indeed happened because I can trust that it did. That made an enormous difference in how productively I can use the little Stream Deck.

    Making Notes look like a Markdown editor, if you squint

    I use Apple’s Notes app to, well, take notes. It’s the only non-Markdown I regularly use for such things. While I can, should, and mostly do try to use its built-in keyboard shortcuts to format text, sometimes I find myself looking at the screen wondering why ``` didn’t put it into a pre-formatted text mode. Today I decided to use Keyboard Maestro to indulge my Markdown muscle memory. The results are on my Gitea server.

    It’s a collection of short little macros that let me type something like this:

    # My title
    ## A heading
    def hello():
        print("Hey, world!")
    And that's about it.

    and have it render like this:

    Resulting note in Notes

    Hey! That looks and feels a lot like typing in a Markdown editor!

    I don’t want to rely on this. It’s usually better to lean into an app and use it the way it’s built to be used than try to make it act like another. Still, if this reduces a tiny bit of friction on those days when I’m crossing my signals, I’ll be glad to have it.

    More apps lost to subscriptions

    Two more apps I really like(d) have recently announced that they’re moving to subscription models: Fantastical and Paste. The Internet almost universally decided to stomp on the former’s announcement, but I’m not sure that the latter is widely popular enough to get a lot of people riled up. With rare exception, these moves are death knells for my usage of such apps. As I’ve written before, the bottom line is that apps have to offer good value to their users. To me, $40 per year for a pretty calendar does not offer good value. A clipboard manager which jumps from $15 once to $10 per year does not offer good value.

    What these changes really do for me is nudge me out of complacency and into reevaluating my app choices. As it turns out, the built-in isn’t as pretty as Fantastical, but for $40 per year it’s gotten to be good enough. There are any number of clipboard managers - some inside apps I was already using, like Keyboard Maestro - that aren’t as nice as Paste, but for $10 per year they’re good enough. And so those moves to subscription models, which are always accompanied by long blog posts explaining how it’s really in my best interest, move me away from the apps I had liked and push me to check out the alternatives. What they almost never do is get me to switch to the desired Patreon-like financial model.

    Merlin Mann described the category of little things that sit in the background and suck money or resources from you as eels attached to your neck. One is bad. Dozens are terrible. Well, I’m getting rid of my neck eels. There are very few apps I use that can’t be replaced. And when an app’s price suddenly skyrockets and stops offering good value, that’s exactly why I do.