The Smile Blog, With News, Tips, Photos and Other Stuff That Makes Us Smile

Letters in Circles Snippet Group

Posted 10/17/2014 by Greg

Ⓛⓔⓣⓣⓔⓡⓢ ⓘⓝ Ⓒⓘⓡⓛⓔⓢ

Perhaps you’ve seen something like this on Twitter:

When I saw that, I thought: I can make a TextExpander group to make that really easy to do, and so…

To add the Letters in Circles group on a Mac:
1. Click the + button under the snippets list and choose “Add Group from URL…"
2. Enter this as the URL:
3. Press OK

To add the Letters in Circles group an iPhone or iPad:
1. Turn off “Ignore Case” in the settings, or you’ll be limited to capital letters in your circles
2. Tap the + button under the Groups list and choose “Add via URL"
3. Enter this as the URL:
4. Tap OK

To use the Letters in Circles group:
Type a lowercase o three times then the letter you want to be in the circle.

For example:

oooT gets you: Ⓣ
ooox gets you: ⓧ
ooo4 gets you: ④

(if ooox gets you Ⓧ on iOS, you probably have Ignore Case turned on in the settings)

I chose triple o as the abbreviation prefix so that it’s easy to type on both OS X and iOS, and so that it’s easy to remember.

I included numerals 0-9, but I did not include 10-20. Although 10-20 in circles are available, they won’t work with my abbreviation scheme and expand immediately, and I doubt they’re used very often.

Ⓘ ⓗⓞⓟⓔ ⓨⓞⓤ ⓗⓐⓥⓔ ⓢⓞⓜⓔ ⓕⓤⓝ ⓦⓘⓣⓗ ⓣⓗⓘⓢ!

iOS-ify your Mac Snippet Abbreviations

Posted 10/03/2014 by Brian

For those of us who made the bulk of our snippets on the Mac, some of us use a system of prefixes to differentiate snippets from other words we type. For example,

slash / used to start web addresses
comma comma ,, used to start code snippets
semi-colon ; used to start snippets you share with the rest of your team

Whatever your prefix system, it is tricky to use these types of snippets on iOS, where punctuation keys take an extra tap to shift out of letter view into punctuation view.

In trying to solve this problem, we have considered adding a key to the letter view of the TextExpander keyboard which is programmable by the user. As in, you would have an extra key to setup as a semi-colon ; key on the letter view of the keyboard, while others could choose to make that a / slash key. 

However, this is still on the “nice to have in the future” feature list. In the meantime, here’s a script-based work-around.

Download this Abbreviation Alias script to create a new group of snippet aliases which have your choice of iOS friendly abbreviation prefix. You will end up with a new snippet group and your current snippets are not effected.

How does this work?

This script uses the nested snippet feature of TextExpander. While a single snippet cannot have two abbreviations, you can have two snippets, both with unique abbreviations, where the second nests the first so that both expand to the same content. This script makes those second snippets for you so you can have your Mac abbreviations and your iOS abbreviations. For example:

Snippet 1: Mac style

Abbreviation: /wiki

Snippet 2: iOS style

Abbreviation: zzwiki
Content: %snippet:/wiki%

Use the Script

1. Download the script and click on it to open it in the AppleScript Editor, an app that comes with your Mac. Yes, this means you are looking at actual script, but we have added directions for you to follow, all of the gray text on each line after a "--".

There are only two places you need to change things:

  • Set the abbreviation prefix you use and want to change
  • Set the new iOS friendly prefix you want to use

Optional Third

  • Scan your snippets one group at a time instead of all at once by changing the word “true” to “false” 

2. Once you have done this, in the menubar of the AppleScript Editor window click on “Run.” If you chose to run one group at a time a popup window will appear to let you choose one of your snippet groups.

3. A dialog will appear to let you save and name the new snippet group, which appears in the dialog as a TSV file. It will even show you how many new snippets you have. Click Save and you will find a new group of snippets in TextExpander with their punctuation prefixes replaced with iOS friendly “cc” or “zz” or whatever you chose.

It doesn’t matter where the TSV file saves, once you see the new group in the TextExpander window, you can delete the TSV file.

This new group is just aliases. When you need to edit a snippet, go to the original snippet to edit its contents.

iCloud, PDFpen and iOS 8 — Before you update

Posted 09/30/2014 by Maia

If you have PDFpen running on your Mac and PDFpen on your iPad or iPhone, please be aware of what updating to iOS 8’s new iCloud Drive will mean for you — no more syncing with your Mac until Yosemite (OS X 10.10).

Macworld already has a good article on this topic, check it out for more details.

When you update your iPhone or iPad to iOS 8, you are offered the option to update to the new iCloud Drive. If you do, all your iCloud documents are transferred from the old iCloud to the new iCloud Drive. However, this means files on your iOS 8 device can no longer use iCloud to sync with files on devices running iOS 7 or Mavericks, they can only sync with iOS 8 and Yosemite devices. Yosemite is not expected to release until later this year.

Essentially, the iCloud of iOS 7 and Mavericks (OS X 10.9) is a different “cloud” than the new iCloud Drive of iOS 8 and the upcoming Yosemite, and those two clouds don’t talk to each other.

If you have updated to iOS 8 and the new iCloud Drive, you can still sync your documents in PDFpen using Dropbox. In PDFpen for Mac, simply store your files in a Dropbox folder. In PDFpen for iPhone or iPad add that same Dropbox folder as a sync folder.

Adding a Synchronized Folder:

  1. Tap “Documents”, or the folder title or icon presently displayed in the navigation bar. A menu appears. 
  2. Tap “Edit Sync Folders” and select Dropbox as your sync service and login. 
  3. In the following navigation dialog select a folder for synchronizing then tap “+ Sync Folder”. 

Set this folder to sync its contents automatically by choosing Tools > Settings > Dropbox and switching on “Automatically Sync.”

Navigate into and out of this new folder by tapping the folder title or icon displayed in the navigation bar.

More details are available in the “Synchronized Folders with Dropbox” section of the in-app Help.

What about that scary Full Access warning?

Posted 09/22/2014 by Greg

(or, Q: Does TextExpander transmit all my keystrokes to Smile's servers? A: No.)

TextExpander touch 3's custom keyboard requires Full Access to function as you'd expect a keyboard to, and the warning iOS presents about this is quite ominous:

Full Access Warning Dialog

The TextExpander keyboard needs to share snippet data with the TextExpander app and to play sounds, such as key clicks and the expansion sound. These are only possible if Full Access is turned on. The TextExpander keyboard does not transmit your data on any network, Wi-Fi or cellular. The keyboard maintains a small buffer of recent key taps for the purpose of matching a snippet abbreviation. The buffer clears after a limited number of key taps, and is never saved to a file or transmitted anywhere. The contents of the buffer are neither stored nor shared with the TextExpander touch app.

Without Full Access, keyboards operate in their own container, which means they don't have access to data from other apps, including the TextExpander app itself. It also means they have more limited access to system services, for example, they can't play sounds. Once a keyboard is granted Full Access, it can share data with another app from the same developer. Once it can do that, the other app can do pretty much anything with that data, including transmitting it over the network. Simply because an app CAN do this doesn't mean that it DOES, nor that it's wise of the app's developer to even consider doing so.

Any standard app on iOS can store and transmit your keystrokes, and this has been true long before iOS 8. Apps in general don't do this because it would be a severe abuse of your trust. Any app caught doing this without your permission would at least be panned on the App Store, if not removed from sale by Apple.

What's new in iOS 8 is that extensions can be more severely limited than apps. This is a great way for new app developers to build trust with users. For established app developers, it can be too limiting, and that's certainly the case with TextExpander. We have done our best to earn your trust over the past 8 years of TextExpander for OS X and 5 years of TextExpander touch for iOS. We tell you what we do with Full Access, and we tell you what we don't do, then we match that with our keyboard's actions.

It's fair of Apple to warn users of the extent of what Full Access means. It’s up to keyboard developers to make the case for Full Access to their users. Perhaps, in a future iOS update, Apple will allow space for a timely message from developers about their keyboard's specific needs for Full Access. For now, we have Apple's accurate and all-encompassing warning to keep users installing keyboards with a healthy sense of caution.

Smile Preps for Yosemite

Posted 09/12/2014 by Maia

Fall is the season for new Apple operating systems, and we've been busy prepping for OS X 10.10 Yosemite. If you're worried about how your favorite Smile app will do with the update you can check on its status here. 

If you are running the Yosemite beta and notice any new issues, please drop us a line. If you can identify that it is new to Yosemite, and is not in Mavericks, we'll love to know even more.


  • Version 6.3.2 (plus any later releases) is currently functioning in the Yosemite beta, and we anticipate full functionality upon the Yosemite release.

If you have both the Mac and iPhone or iPad versions of PDFpen, for the most seamless experience, we recommend not updating to the new iCloud Drive until you have updated all of your devices to both Yosemite and iOS 8.


  • Version 4.3.3 (plus any later releases) is currently functioning in the Yosemite beta, and we anticipate full functionality upon the Yosemite release.
  • Version 3 is not fully supported in the current OS X, 10.9 Mavericks. We recommend version 4 instead. For Yosemite, we strongly recommend version 4. If you purchased from the Mac App Store then you have version 3. See this article for free and paid upgrade details.


  • Version 6.4.1 is currently functioning in the Yosemite beta, and we anticipate full functionality upon the Yosemite release.

TextExpander Snippet Expansion Comes to Every App in iOS 8

Posted 08/25/2014 by Maia

We've been hard at work since Apple announced the new and exciting extensions and custom keyboards available in iOS 8.

TextExpander touch 3, coming on the heels of iOS 8 this fall, includes a TextExpander keyboard which can expand snippets in any app on the iPhone or iPad, including built-in apps such as Mail and Safari.

Here’s a sample of the TextExpander keyboard in action:

Prior to iOS 8, only apps which implemented the TextExpander touch SDK could expand snippets directly.

Under iOS 8, the TextExpander keyboard will work system-wide and reliably share snippets with the TextExpander app. The keyboard will also include full VoiceOver accessibility support. 

Join Our Public Beta

This week, we will begin a public beta of TextExpander with the custom keyboard. If you are interested in helping us beta test, please follow our @SmileTEBeta twitter account. We may not be able to accommodate everyone who wants to beta test, and we may accept requests on a rolling basis. Either way you can look forward to TextExpander touch 3 shipping this fall. 

For more about TextExpander touch, see the TextExpander touch home page.

Remove Sensitive Info from PDFs with Redaction

Posted 08/07/2014 by Greg

One side effect of the Affordable Care Act is an increase in dependent eligibility audits for employer-sponsored health care. These audits often require you to produce the first page of your tax filing for review. The only thing an auditor may need to see is your filing status and dependent count, but there's an awful lot more on the first page of your tax return. This is where PDFpen's redaction capability can come to the rescue.

Redaction removes sensitive information from a PDF file and replaces it with a blank area or a black box. 

Some folks try to achieve redaction by using the rectangle tool to draw a filled black box over sensitive text. When this is done, a reader of your PDF can remove the rectangle and see the text underneath. Also, when someone searches the PDF, the sensitive information will be available in the search.

There are two ways you can redact with PDFpen:

1. Redacting selected text:

  • Choose Tools -> Select Text Tool from the menu
  • Select the text you wish to redact: for example, your social security number
  • Choose Format -> Redact Text – Block

2. Redacting a whole area of a document:

  • Choose Tools -> Select Rectangle Tool from the menu
  • Select the text you wish to redact: for example, all of the numbers and tax calculations beneath the exemptions section
  • Choose Format -> Redact Text – Block

Here's what a sample redacted tax return looks like:


  • PDFpen cannot remove line drawing elements, for example the lines that make up a table or border. If you use option #2 with Redact Text – Erase, you'll still see lines. Rest assured, any text and graphics have been removed.
  • The File -> Revert To command, available only if you use version saving, can be used to get back to a non-redacted version of a PDF on your computer. If you have a shared computer and would like to prevent this, when you're done redacting: choose File -> Duplicate to save the redacted version, then delete the original. This is not a necessary step to protect yourself when emailing the PDF, as file versioning is entirely local and accessible only on your computer.

Comprehensive Video Guide to TextExpander from Asian Efficiency

Posted 08/04/2014 by Greg

Check out this Comprehensive Video Guide to TextExpander by Mike Schmitz on Asian Efficiency.

Currency Conversion with TextExpander

Posted 08/01/2014 by Greg

Adrian Boioglu asked on Twitter:

We’ll need four things to make a currency conversion snippet:

1. Exchange Rate Data Service offers several paid levels of service and a free service limited to 1,000 queries per month. Sign up for one of those, and make note of your API key. You’ll need that later.

2. An app to process the service results

Download the free JSON Helper for AppleScript from the Mac App Store.

3. An AppleScript snippet for TextExpander

  1. Choose File -> New Snippet
  2. Set the Content: popup above the snippet editor to: AppleScript
  3. Copy and paste the AppleScript, which appears with a light gray background below, into the snippet editor
  4. Change the XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX to your API key from step #1
  5. Set your abbreviation to: convert_to_euros


set baseCurrency to "USD"

set baseAmount to (the clipboard as string)


-- Test the input

if (first character of baseAmount is not number) then

set baseAmount to (characters 2 thru ((length of baseAmount) - 1) of baseAmount) as string

end if


set baseAmount to baseAmount as number

on error

set baseAmount to 0

end try

if baseAmount is 0 then

return "Problem with clipboard content. Use a number or a number preceded by a currency symbol."

end if


-- Get the exchange rate; change |EUR| to another currency for different exchange rates

tell application "JSON Helper"

set theURL to "" & openExchnageRatesAppID & "&base=" & baseCurrency

set jsonResult to fetch JSON from theURL

set exchangeRates to rates of jsonResult

set convertedAmount to (|EUR| of exchangeRates) * baseAmount

return roundToDecimal(convertedAmount, 2) of me

end tell


on roundToDecimal(numberToRound, precision)

set multiplier to 10 ^ precision

numberToRound * multiplier

round result

return result / multiplier

end roundToDecimal


4. A plain text snippet to format the result

  1. Choose File -> New Snippet
  2. Copy and paste the following into the snippet editor:
  3. Set your abbreviation to “ineuros”

Test it out

Copy this dollar amount to the clipboard, then type a space followed by: ineuros


Your result will depend on the current exchange rate but should be approximately:

$34.95 (€26.07)


To change the base currency, change “USD” in the second line of the AppleScript snippet from step 3 to another currency, such as “JPY” for Japanese Yen.

To change the target currency, change “|EUR|” about 2/3 down the script to another currency, such as “|MXN|” for the Mexican Peso.

AppleScript’s localized number handling is somewhat limited, so you may need to customize the script if you use a decimal separator other than ‘.’ or place your currency symbol at the end instead of the beginning.

Here is the list of currencies supported by

Tips on Shared Snippet Groups

Posted 07/17/2014 by Maia

Do you share a snippet group with a few other folks, a team, or an office?

If you don’t but would like to, you can set that up by hosting the group on your server, or even in a public Dropbox folder. You can find the exact steps here.

Here are a few tips on what makes a good shared group.

The Rules for Good Abbreviations Still Apply

Make abbreviations:

  • short
  • easy to remember
  • unique
  • unlikely to be typed by accident

But, you have the added difficulty of not knowing what abbreviations the team already has in their other groups, so making them extra unique is a plus. One way to avoid snippet conflicts is to use a naming strategy, for example, putting the same prefix onto each snippet in the group.






Alternate Abbreviations

If a team member doesn’t want to use the given abbreviation, there is the option of setting up a new snippet to expand the content of the old one but use its own unique abbreviation.

Create a nested snippet:

  1. Make a new snippet and set the abbreviation to whatever you like.
  2. For the snippet content, from the Insert menu (cursor button), located just above the Abbreviation menu, click on Snippet and then locate the old snippet.
    Alternately, if you know the snippet’s abbreviation you can just type the nested snippet syntax:

%snippet:{snippet name}%

Where {snippet name} is the abbreviation of the original referenced snippet.

You now have a snippet with a unique abbreviation, who’s content is pulled directly from another snippet.

Snippet 1

abbreviation: ,,email

Snippet 2

abbreviation: em1
content: %snippet:,,email%

Non-expanding Snippets

If the shared group’s snippets do interfere with personal snippets, try making alternate abbreviations for them as explained above and then prevent the original group from expanding with the original abbreviations.

Prevent a Group from Expanding:

  1. Click on the snippet group, the Group Settings will appear to the right.
  2. Set the “Expand in:” menu to “No applications (disabled).”

Good “Label” -ing

Each snippet consists of an abbreviation, the content it expands into, and a label, which is optional. If the abbreviation is not self-explanatory, and the content is too long to read at a glance, it will be hard to remember what the snippet does. Having a clear and brief label will help with that. The label is searchable, just like the abbreviation and content, so this is a good place for a search term that is not already in the snippet.

Use labels

More Snippet Explanation

If the label isn’t quite enough to explain the snippet, or all the parts of a multi-part snippet, you can use optional sections.

An optional section is a type of fill-in where you you have text in the snippet content, but you choose whether it expands with the snippet on a case by case basis.

In this specific case you would turn off “Include by default.”

When a user expands the snippet, they will see the extra text in the temporary expansion window, but it won’t expand with the rest of the snippet.

Use optional fields

Have any tips or tricks of your own? Let us know!