TextExpander Intervention Webinar Announcement (MacSparky Labs)

Let’s all get better at TextExpander together. In this webinar-style session, I’ll be sharing some of my favorite TextExpander snippets and tricks and I’ll be joined by Josh Centers from TextExpander with his own bag of tricks…

This is a post for MacSparky Labs Members only. Care to join? Or perhaps do you need to sign in?

TextExpander Best Practices

I have often said that one of the easiest on-ramps to automation is text expansion. That’s one of the reasons why I’m such a fan of TextExpander. They’ve gone the extra mile with giving you automation tools in addition to text expansion. But it is easy to get overwhelmed when you’re attempting to develop a text automation system.

For example, for years, I use the semicolon as my trigger. “;workadd”, for example, would expand to my work address. But then I started doing a lot of work on the iPad, and I was using the software keyboard where the semicolon wasn’t so easy to access. So I switched over to using the letter ‘x’ for the same purpose. We all have these collections of tricks we develop as we do more text expansion.

Recently, Josh Centers created a list of best practices and published them over at the TextExpander website. I think they’re all good ideas and if you want to up your game with text expansion, this is worth reading.

Power Up with TextExpander – Sponsor


This week MacSparky.com is sponsored by TextExpander, the easiest way to start automating your work on Mac, iPad, and iPhone. TextExpander is a text replacement tool. With it, you can type a phrase like “ccell” and it will automatically fill in your cell phone number. But TextExpander is so much more than that.

Using TextExpander, you can have it automatically create the date and time. For example, when I talk with someone on the phone related to the day job and want to keep notes about the conversation, I just type “xdts” which, in my head, means date and time string. Then TextExpander automatically creates something like this, “2018-03-28 06:42”. If I need to put the full date in a letter, I just type “fdate” and TextExpander puts in the current date, like this, “March 28, 2018”.

But TextExpander can still go deeper. It can use the contents of your clipboard to auto-fill in snippets. It can press keyboard keys, like the tab key, to automate filling in forms on the web or creating an email. You can get it for yourself and your team members so you can share snippets with your team members. 

I’ve done so much with TextExpander over the years that I even have a page of snippets I’ve created that you can download ranging from movie to reviews to conference calls. One of my personal favorite groups is foreign thanks where you can say thank you to people in most language. Sending an email to a French friend, just type “french thanks” and TextExpander gives you “Merci”. It’s like your own, personal translator.

To learn more, head over to TextExpander.com and let them know you heard about it at MacSparky in the “Where did you hear about us” field.

TextExpander Snippets for Fun and Shenanigans

I enjoyed this post over at TextExpander.com showing off some of the more fun tricks you can pull off with TextExpander. I would add to this that the ability to add emojis with keyboard shortcuts is pretty useful and more than a parlor trick. I’ve done something similar but use shorter abbreviations than recommended in the linked post. For instance, when I type “:tu”, TextExpander autofills a thumbs-up emoji: 👍🏻.

I find myself using these to respond to text messages and even simple emails all the time, and assigning your favorite emoji to TextExpander shortcuts can save you a lot of time.

TextExpander Public Groups

TextExpander has a new feature called Public Groups. With it, anyone can offer to share a TextExpander group publicly. There are already several interesting public groups. I have shared my “foreign thanks” group that automatically expands to say thank you in the language of choice. For instance typing “klingonthanks” renders “QA TLHO'” (of course in all caps).

Because the public groups are served up from the TextExpander.com site, when the original author makes alterations to the list, it automatically pushes the change out to subscribers. So if you look at my foreign thanks list and find a language I left out, let me know and I will update it for everyone. I plan on publishing several more of my more useful TextExpander groups through the TextExpander Public Groups in the next month. Keep your eyes out.

If you’re a TextExpander subscriber, I recommend checking out the public groups. You can even subscribe from iPad and iPhone and you’ll find quite a few that are even more useful than my “foreign thanks” group.

TextExpander Pricing Adjustments

Last week TextExpander announced its conversion to a subscription model and storage of snippets at TextExpander.com. I was actually okay with the new pricing. That isn’t because they paid me to produce their videos (they did) or that they sponsor the Mac Power Users (they do) or even that the developers are dear friends (they are). To me it was worth it because the application saves me so damn much time. When it comes to automation, however, I’ll be the first to admit I’m pretty far out there. A lot of users complained the pricing was too high and now Smile has lowered it.

You can read all the details at Smile’s blog but the short version is: $20/year for existing users and they’ll be keeping a separate build that does not sync through TextExpander.com for those who prefer to put their snippets in iCloud or Dropbox. 

New TextExpander and Video Series

Smile Software has released a new version of TextExpander. This upgrade has been a long time in the making and is the culmination of a lot of work. TextExpander got a new design and now you’ll store your snippets at TextExpander.com. There are a lot of advantages to keeping your snippets at TextExpander.com. To start out, you can now share snippets and snippet groups. The application can do this on an individual basis and also among work teams. This lets management create snippets that are used, for instance, in a customer service department across the company.

This new model also lets TextExpander share your snippets among multiple platforms. You can share your snippets on the Mac, iPad, iPhone, and now on Windows. The Windows app is currently in beta but I’ve been testing it and it’s pretty great seeing TextExpander work on Windows. This will be especially nice for those of you stuck using a PC at the office.

I’ve made a series of videos about the new version that you can find here. There are a total of 10 videos and watching these make you a TextExpander pro. They are, essentially, a free MacSparky Field Guide on TextExpander so make sure to check them out.

With all of these changes, Smile has switched TextExpander to a subscription model. I know that makes some users nervous but, frankly, I think it is a good idea. As a fan of productivity software, I’d really like the companies that make my favorite tools stay in business. In order for TextExpander to continue to get the love and attention it needs to make my life so much easier, it needs ongoing support. TextExpander is so worth it.

Automating Invoice Processing on My Mac

When I first opened my solo law practice, one of the unanswered questions in my mind was how I would go about billing clients. This is supposed to be hard. Some law firms spends days every month on getting bills out the door. Others pay outside vendors. I decided to nerd the s%*t out of this problem and do it myself.

I use an online practice management solution, Clio, to track my time. At the end of the month, the service creates PDFs of my invoices that go into my Mac’s Downloads folder. Rather than show an actual client invoice, I’ll use this dummy invoice for my side landscaping business.

One of the tricks of this workflow is that when I push a button in Clio, the PDF is created and opens automatically on my Mac in the Preview application. The first tool to help me automate the process is Hazel. I’ve talked a lot about Hazel at this site and on the podcast over the years. One of Hazel’s many talents, is the ability to identify, name, and move files. So I’ve got Hazel constantly looking at my Downloads folder. If it sees a PDF file that has the text “Lawn Care Products and Livestock”, “PO number”, and “Gunther’s Gardening”, it will start acting on that file. My logic is that there will be no PDFs in my Downloads folder that have all of those words in that order that are not an invoice. Here’s the Hazel Rule.

Once Hazel finds a match, usually within seconds of the file downloading, Hazel renames the file with the current date, client name, and a further description of the invoice. Because the PDFs open on my desktop at the time of the download, it’s fun to watch the name change as I’m reading the invoice over. Next Hazel moves the invoice to a folder I’ve designated in the client’s Admin/Invoices folder.

So within seconds of downloading the invoice, my Mac has named and moved the invoice to its appropriate folder.

Next I click on the sharing button in the Preview App (which is diplaying the invoice). From there I click on the Mail icon and this creates a new blank email with the invoice already attached.

My next big tool is TextExpander. I manually type in the client’s name as an email recipient. Then I tab down to the s ubject line and fire off a TextExander snippet. The snippet phrase is “newbill”. The snippet first fills in the subject line with the terms “Sparks Law %B Invoice” which TextExpander fills in as “Sparks Law October Invoice”. Next month the snippet will automatically change “October” to “November”. (TextExpander recognizes the wildcard %B as the current month.)

Next, the snippet asks me to fill in the client name and let’s me choose from several frequent options. Three common issues in these cover emails are questions about whether the client wants to pay online via credit card, wants a snail mail copy of the invoice, and if there is someone else at the company that needs to get the invoice. I use TextExpander Optional Selection phrases for this. I can check or uncheck the appropriate phrases for the particular invoice.

Finally,  I have a multi-line field at the bottom where I can write or dictate in a further description of services or plans for the coming month.

Here is the finalized email from the above snippet screen.

Here is a screenshot of the snippet form TextExpander.

Here is the full text of the snippet if you want to adapt it for use use it in your copy of TextExpander at home.

Sparks Law %B Invoice
%key:tab%Hi %filltext:name=field 1%,

Attached is this month’s invoice. %fillpart:name=online pay:default=yes%I also sent you a separate email with online payment instructions if you’d prefer to pay that way via credit card.%fillpartend% %fillpart:name=optional part 3:default=yes%Also, please let me know if you’d like hard copies of these invoices in the mail.%fillpartend% %fillpart:name=someone else:default=yes%Finally, if you’d like me to direct these to someone else at the company, let me know.%fillpartend%

%fillarea:name=Message:default=Thank you for your business.%

Kind regards,

David Sparks
Sparks Law

So this detailed explanation probably sounds like a lot but in action, the whole process is wicked fast. It takes just moments for me to approve and download a PDF invoice, at which point my Mac names and files the invoice, and I send it off to the client with a customized email. I love being a nerd.

As an aside, I have had very few clients take me up on the offer to get snail mail invoices. Almost everyone wants things in just PDF form. I have brilliant clients.

TextExpander Script for Recipient’s Name in Outlook

Awhile back, I wrote this post about how to automatically add a recipient’s name to an email. Reader Jaco Muller (Twitter) liked the idea but uses Outlook. Jaco re-wrote the script to work with Outlook. Okay Outlook users, here you go. Thanks Jaco.

tell application "System Events"
    tell process "Microsoft Outlook"
        set theToRecipient to (value of static text of text area 1 of scroll area 1 of splitter group 1 of window 1)
        set theToRecipient to theToRecipient as string
        if (count words of theToRecipient) is greater than 0 then return word 1 of theToRecipient
    end tell
end tell

Automatically Add Recipient’s Name to Email with TextExpander

I occasionally have need of a TextExpander snippet to automatically add the first name of an email recipient to the body of an email. Over the years, I’ve made lots of snippets that have a fill-in field asking me to type in the recipient’s name but wouldn’t it be great if the tiny robot inside my Mac did it for me? To a certain extent, this quest has been my white whale and I’ve been plunking away at it when the mood struck me for the past year. I initially went down the road of AppleScript, which never worked consistently. Ultimately, I found success using System Events. Below is the AppleScript code for System Events that pulls the first name from your recipient and types it in the subject line or body of the message.

tell application "System Events"
    tell process "Mail"
        tell text field "To:" of window 1
            if UI element 1 exists then
                set theToRecipient to (value of UI element 1)
                if (count words of theToRecipient) is greater than 0 then return word 1 of theToRecipient
            end if
        end tell
    end tell
end tell

I owe many thanks to Ben Waldie (@AppleScriptGuru) for his assistance in getting this to work. I also had a lot of help on this from Greg Scown at Smile (@macgreg). I put this script into a TextExpander snippet designated AppleScript. It looks like this.

Typing “xnm” in an email will insert the recipient’s first name. You can combine them with additional snippets in TextExpander. For example, this snippet …

… is activated in the subject line. It types “Purchase Confirmation”, then hits the Tab Key, jumping to the message body, and then addresses the email to the customer first name and some additional text. Note the phrase “%snippet:xnm%” runs the prior snippet to drop the name in the text. This allows you to run an AppleScript inside a text snippet, which I thought was particularly clever.

Click HERE to download these snippets.