Biting the TextExpander bullet

I suppose this was inevitable, and I’m surprised I held out this long. This morning I switched all my TextExpander snippet abbreviations from using a semicolon prefix to using a “jj” prefix. For example, to get a date stamp in the form “September 7, 2015,” I now type “jjds” instead of “;ds.” The motivation for this, of course, is that I wanted to sync my snippets between OS X and iOS. Using a semicolon prefix on iOS is dumb because the main iOS keyboard doesn’t have a semicolon, and switching keyboards to get to the semicolon defeats the purpose of using TextExpander.

Why didn’t I do this earlier? After all, snippet syncing between OS X and iOS has been available since (I think) 2011. The answer is twofold. First, there’s stubbornness. I was used to using the semicolon on the Mac and didn’t want to change. Second, I just don’t do all that much typing on my iPhone outside of the Mail and Messages apps, neither of which support (or ever will support) TextExpander.

Update 9/7/15 12:45 PM
I am reminded by Ryan on Twitter of the TextExpander keyboard, which allows snippets to be used in every app. At first, I thought I’d use it all the time, but I soon realized how much I rely on autocorrect, especially for contractions. I disabled the TextExpander keyboard pretty quickly after trying it out and haven’t thought about it since then.

Yes, I use Drafts quite a bit for quick notes, but I don’t do much sustained typing in it because my iPhone just isn’t convenient for longer writing. This is less about the keyboard being too small for easy typing (although that’s part of it) and more about it being too big to allow much of the written text to show. This can be an especially acute problem in landscape orientation.

Drafts in landscape on iPhone 5

This problem will be eased somewhat when I get a new 6-sized iPhone this fall and may be erased entirely if I get an iPad. So it seems like the time is finally ripe for me to take writing more seriously on iOS. Which means using TextExpander. Which means syncing my snippets. Which means changing to a more iOS-friendly abbreviation prefix.

Changing the prefix on all my snippets was pretty easy, thanks to my reaffix script. Here are the steps I took:

  1. Open TextExpander on my Mac and save all the snippet groups to a new folder. That gave me a bunch of files with names like Symbols.textexpander, Emoji.textexpander, and Math.textexpander.
  2. Make a copy of that folder of files for safe keeping in case I screw up the next couple of steps.
  3. Delete all the snippet groups from TextExpander.
  4. Run reaffix on each of the .textexpander files via

    for f in *; do reaffix -r --old-prefix=';' --new-prefix='jj' "$f"; done
  5. Import all of the changed .textexpander files back into TextExpander and do some spot-checking to see if they work (they did).
  6. Open TextExpander touch on my iPhone and delete the snippet groups I had there.
  7. Turn on syncing for TextExpander touch. I already had syncing (via Dropbox) turned on for my Macs.

After a bit of gear spinning, this left me with a big bunch of new snippets on my phone.

TextExpander snippets on iOS

The AppleScript and shell script snippets I had for OS X are, of course, useless on iOS. They return “(Script),” which I thought was pretty thoughtful of the folks at Smile. I was afraid they’d return either

Why did I choose “jj” as the prefix? It’s easy to type on any device, it’s on the home row, and there are—for my purposes, anyway—no words that include “jj.” I tested this by running

grep jj /usr/share/dict/words

which returned only avijja and Zulhijjah. I’ll take my chances.

Now my only problem will be retraining my fingers. I’ve made a few mistakes already just in typing this short post, but I’ve also discovered why the retraining probably won’t take as long as I’d always feared: I use TextExpander so much my writing will be littered with semicolons until I get “jj” into my muscle memory.

TextExpander snippet history