Text Expander III: Scripting Fill Ins
TextExpander is a powerful Mac productivity app. It automatically expands keyboard shortcuts—or abbreviations—into longer blocks of text—snippets.
If you repeatedly send the same basic emails or write the same information, such as an address or phone number, TextExpander makes life easier.
In the previous two tutorials, in this series, I’ve looked at getting started with TextExpander and how to use more advanced features like fill ins and time and date macros.
In this tutorial, I’ll look at using scripting languages like JavaScript and AppleScript in fill ins.
Screencast
TextExpander and Scripting Languages
TextExpander supports three scripting languages: Shell Script, JavaScript and AppleScript. For the purposes of this tutorial I’m going to be focussing on the latter two as they are the most flexible. With scripting languages you can add logic to your TextExpander fill ins.
For example, in one of the example snippets in this tutorial, I use the fill in returns a different result depending on what day it is when you use it. Another example snippet returns a random response from an array of multiple possible responses. These are both impossible to do in TextExpander without a scripting language.
Of the three offered, JavaScript is the most useful as it also works with TextExpander Touch, the companion iOS app I’ll look at in the next tutorial in this series.
Prerequisites
To use this tutorial you’ll need the latest version of TextExpander installed. It costs $44.95—although there’s a 30-day free trial—and can be downloaded from the developer’s website.
You’ll also need to be familiar with TextExpander and fill ins. If you aren’t already, the best way to get up to speed is to check out the two previous tutorials in this series:
Further, in this tutorial, I’m using some very simple JavaScript and AppleScript. You don’t need to be familiar with either language although it helps.
To learn more about JavaScript you can check out this Code.Tuts+ tutorial and to learn more about AppleScript you can check out this tutorial right here on Computers.Tuts+.
Using Simple Logic With JavaScript
The first snippet I’m creating returns either I’ll get back to you tomorrow or I’ll get back to you after the weekend depending on whether it’s a weekday, or a weekend day—including Friday.
For this snippet I’m using JavaScripts’ built-in date function. For more information on the specifics, you can find the documentation here.
Create a new snippet and set its Content to JavaScript. Assign it a simple and relevant abbreviation.
Next, you need to create a variable to hold today’s date information. To do that, enter var today = new Date();
as the first line of the snippet.
On the next line, enter today.setDate(TextExpander.baseDate.getDate());
. This sets the today
variable to the current date.
The result of a snippet that uses a scripting language by default is the last statement executed in the snippet.
To finish, you need to check whether today is a Friday, Saturday or Sunday. The following if loop does that and, depending on the result, returns one of two possible sentences. Add the code below to your snippet to finish.
1 |
if (today.getDay() == 5 || today.getDay() == 6 || today.getDay() == 0) { |
2 |
'I\'ll get back to you after the weekend. '; |
3 |
}
|
4 |
else { |
5 |
'I\'ll get back to you tomorrow. '; |
6 |
}
|
When you enter the abbreviation, depending on the day, you’ll either tell people you’ll respond tomorrow or after the weekend.
Tip: Remember, snippets can be embedded within other snippets. This day dependant reply snippet can be used within any longer email snippets you have.
Creating a Randomised Fill In With JavaScript
One issue with snippets is that they can be very rigid. If every one of your emails has the same structure with little or no variation, you’ll appear stuffy and overly formal. With scripting languages you can overcome this by adding some randomness to your snippets.
The TextExpander team suggest one snippet that randomly selects a closing salutation from a number of acceptable ones like Yours Truly, Sincerely and Peace Out. This is a great use for this method. For this tutorial, however, I’m using it for something a little different.



I’ve been trying to get better about keeping a journal, however, quite often nothing much has happened during the day that’s worth writing about. When that happens I don’t write, thereby breaking the habit.
To overcome this, I created the following snippet that prompts me with a random thing to write about any time I need something.
Again, start by creating a new snippet and setting its Content to JavaScript. Assign it an abbreviation such as xjournal.
This snippet requires two parts, an array storing all the possible values and the logic to select one at random. First, I'll create the array. This is just the simplest method of declaring an array with JavaScript.
Copy and paste the code below into your snippet. Feel free to change the contents of the array to any collection of snippets you want to randomly select from.
1 |
var qList = ["_Write about one of your biggest inspirations._", "_Write about one of your biggest influencers._", "_Write about one of the best places you've ever been._", "_Write about a crazy adventure._", "_Write about a photo you've taken._", "_Write about one of the best days of your life._", "_Write about one of the worst days of your life._", "_What would you change about yourself?_", "_Write about one of your biggest successes", "_Write about one of your biggest regrets._", "_Where do you want to be a year from today?_", "_What do you want to be doing a year from today?_", "_Write about one of your favourite people._", "_Write about one of your favourite books._", "_Write about one of your favourite movies._", "_Write about one of your favourite music artists._"] |
With the array created, it’s time to randomly select from it. This requires three lines of code: one to count how many snippets there are, one to select a random number between that’s less than or equal to that, and one to select the snippet that falls at the random number’s position in the array.
Add the following three lines to your snippet to do just that.
1 |
var qLength = qList.length |
2 |
var qRandom = Math.floor((Math.random() * qLength)); |
3 |
qList[qRandom] |
Now when you enter the abbreviation, a random question will be returned.
Tip: The underscores make the questions italic when you write in a journaling app—such as Day One—that supports Markdown.
The Same Snippet With AppleScript
Although I prefer to use JavaScript because it works with TextExpander Touch, AppleScript also has its fans. Below is the code for the random journal question written in AppleScript. You can see it uses the exact same logic, the only difference is the language used.
1 |
set qList to {"_Write about one of your biggest inspirations._", "_Write about one of your biggest influencers._", "_Write about one of the best places you've ever been._", "_Write about a crazy adventure._", "_Write about a photo you've taken._", "_Write about one of the best days of your life._", "_Write about one of the worst days of your life._", "_What would you change about yourself?_", "_Write about one of your biggest successes", "_Write about one of your biggest regrets._", "_Where do you want to be a year from today?_", "_What do you want to be doing a year from today?_", "_Write about one of your favourite people._", "_Write about one of your favourite books._", "_Write about one of your favourite movies._", "_Write about one of your favourite music artists._"} |
2 |
set listLength to count qList |
3 |
set randomNumber to (random number from 1 to listLength) |
4 |
set selectedQ to item randomNumber of qList |
5 |
return selectedQ |
Conclusion
In this tutorial I looked at using scripting languages to add simple logic to your snippets. While I’ve shown you how to have a snippet return different values either at random or depending on the day, that’s only the basics of what you can do with scripting languages and TextExpander. If you can write it in JavaScript, you can run it in TextExpander.
I’d love to hear how other people use scripting languages with TextExpander so, if you do, please let me know in the comments below.