The new TextExpander Touch for iOS is pretty great. You know that problem where apps like Apple Mail and Pages didn't recognize TextExpander? Not anymore. Here's a little video I made showing off the new keyboard.
There are a lot of ways to paste text. The most common way I do it is with the Command-C and Command-V shortcuts. However, a lot of times you are working with text that is carrying a lot of formatting baggage and when you use the standard paste, the text shows up in your document unusable. Most apps that deal in text give you an option to paste and match formatting and the keyboard shortcut for that is usually Shift-Option-Command-V or some near-variation of that. The trouble is that the shortcut isn't universal and, even worse, some apps that involve text fields don't have any support for an option to paste as plain text.
TextExpander to the rescue. This is perhaps the easiest snippet I've ever posted. I just invoke the clipboard formatted as plaint text. My snippet is xpt (X-Plain-Text). This works everywhere on the Mac. (Even Microsoft Word.) I find typing x-p-t much faster than wrapping my fingers around more complicated combinations or mousing into menus.
I've also got one for pasting rich text from the clipboard, x-r-t, that I use much less frequently.
I know this is a bit obvious but I showed this to a friend recently and she thought it was pretty swell. You can download my clipboard snippets below. Also, I've got a lot more snippets for download over here.
Max Masnick is using Text Expander to quickly enter defer and due dates in OmniFocus. Max primarily uses this for events that have the same defer and due dates. For example if you want a task to disappear but show up as due on Monday at 9am. I don't have much cause for that style task because I so rarely use due dates but there is no reason you couldn't also use this to defer with later relative due dates, for example two weeks from Friday, which in OmniFocus speak would be 2w Fri. Moreover, Max figured out how to combine defer dates and TextExpander so of course he gets a link.
I had the pleasure of producing a video for Smile Software about the new features in TextExpander touch version 2.5. I’d like the think the video does a good job of getting you up to speed with TextExpander touch regardless of your experience with the app and demonstrates some of the new 2.5 features. The snippet group management is much improved. You can now watch, download, and otherwise consume it at Vimeo.
Yesterday Smile released TextExpander Touch version 2.5 for iOS. This free update includes a new iOS 7-style user interface and several tools to assist snippet management from within iOS. They spent a lot of time working on the little things and it shows. Some of my favorite new features are:
- Reordering Groups
- Sharing a completed snippet with the sharing menu
- The ability to disable specific snippets for iOS
Gestures: three finger tap to share and two finger left swipe to copy
iOS Keyboard Shortcuts:
⌘+ and ⌘- increase and decrease the font size of selected text
⌘N creates a new snippet, group, or note
⌘Return functions as Done, or shares snippet or note
Escape functions as Cancel
⌘T toggles between Notes and Groups
up and down arrows navigate through the list of snippets or notes on iPad
I use TextExpander often on both the Mac and iOS. The new URL callback method for sharing snippet groups to apps has been working fine and I'm happy to see Smile giving TextExpander even more love. Did you know I've got a bunch of snippet groups right here for download?
Dr. Drang posted this week about the value of throwaway macros and snippets. He’s a fan. So am I. I’ve referred to this before on the Mac Power Users but never posted on it here. Whenever I find myself doing anything remotely repetitive, my nerd-senses kick in and I look for automation. With text, that’s usually done in TextExpander. For example, a few weeks ago I had to ask a series of repeated questions that involved a rotating set of variables.
- Where’d you get the ACME dynamite on Contract #X?
- Did you leave the dynamite in Y’s expected path?
- Was it the same dynamite from Contract X?
- Did Y run over it?
- Did Y blow up?
My questions were actually a little different but I needed to ask them many times with various combinations of Xs and Ys.
In this case, the contract numbers were a 25 character string of gibberish and I already had a text file with all of the contract numbers in it. So I made the snippet with TextExpander’s clipboard function for the X. (Did you know TextExpander will insert the clipboard contents in a snippet? The syntax is %clipboard.) Before starting the snippet, I’d go to the text file and copy the contract number into my clipboard for my X.
For they Y variable I used a fill-in snippet. Don’t forget that you can have the same fill-in snippet repeat multiple times in a single TextExpander snippet. To do so, simply copy and paste the snippet syntax (e.g. %filltext:name=Sample Fill In%) in the snippet wherever you want it to appear. Then, when you trigger the fill-in snippet typing it once in the first instance fills it in at all of its other instances. Building the snippet took some time but once it was right, populating the questions (there ended up being hundreds of iterations) was fast and there were no mistakes. Overall, it took a fraction of the amount of time I’d have spent doing it manually and was much more accurate. Afterwards, the snippet was completely useless and went into the TextExpander dust heap but for a little while, it was my moon and my stars.
Speaking of TextExpander, did you know I have a whole page of downloadable snippets?
I've started writing up little mini-reviews for myself when I finish watching a movie or reading a book (or comic). I am currently saving these to a text file in nvALT but I also like the idea of saving them to Day One. I originally got the idea from Tulio Jarocki but when I finally got around to it, his site appears down under re-construction.
Anyway, the snippets all call up some fill-in fields and option fields letting me describe, rate, and review each media. Since I read quite a bit, I find these little notes helpful when recommending books to friends and to confirm whether or not I've read a book already, which, sadly, sometimes takes me 100 pages to realize.
On the subject of TextExpander, they just released version 4.1 with 100% more EMOJI.
At Macworld I sat on a panel with Jeff Taekman, my spirit brother from the medical profession. Jeff sits in on a lot of meetings and talked about how he uses TextExpander snippets and Drafts to speed up note taking. He even wrote it up for Macworld. I took notice and came up with my own meeting snippet, which you can download here.
Jeff uses a text description to make the note a header in Notesy (for searching elsewhere), like meetx-david and katie re show. I don’t store meeting notes that way. I keep a bigger note per project that contains a list of meeting notes throughout the project. Text is cheap and it is easier for me to access it all in one place so the meeting information portion of my meeting snippet is pretty simple: description, date, and time.
I use fill-in forms for attendees. Since I work in a small office, I actually do this with an Optional eSlection for my co-workers and a few additional fill-ins for additional attendees. The purpose of these fill-ins is to allow me to use the names again below. Don’t forget how lazy I am.
My meetings often revolve around issues. My notes are typically a few bullet points per issue. This structure has evolved and works for me. It may not for you. You’ll need to get creative here.
I love having checklists from meetings. I love even more when other people know I have checklists. I used to just make it my checklist but now I add checklists for everyone in the meeting. Note how I’ve repeated the fill-in forms here. With checklists—as well as issue lists—I populate the template with many entries. It is much easier to delete than add, particularly on the iPad.
I like keeping track of how long meetings go. Subconsciously, the fact that I’m going to write down the end time helps me keep things moving, to the extent I have any power over that.
If I’m really on the ball, at the end of the meeting we’ll agree upon the next meeting date (if necessary) and a preliminary agenda.
After the meeting…
I usually open this snippet in drafts. When the meeting is over, I can email it off to the attendees that have follow up items. I also copy the text and save it my nvALT file for the particular matter the meeting surrounds. On iOS, I can do it through WriteRoom, which is syncing to nvALT on my Mac.
Enjoy and let me know if you’ve got any improvements.
If this snippet is useful, you may also like my conference call snippet.
Organizing conference calls used to be a lot of trouble. It required a pay service, multiple telephone numbers and access codes (that were always changing), and the simple act of getting word out to everyone about the details always took more time than it should have. Times are changing. I recently started using freeconferencecalls.com for conference calls. It’s a great, free service that gives you a single call-in number and access code that never changes. You don’t have to schedule anything with the service. You just send out the number, access code, and time to your call participants and get back to work.
At first I just kept these numbers in my contacts list and used a bit of copy and paste when necessary. After doing this a few times, I realized TextExpander was a much better solution. I’ve now put together a clever little TextExpander snippet that sends out the conference number, access code, and date and time for the call.
I’ve also added a fill-in snippet for the conference call agenda and a pop-up menu for the estimated length of time. I find that if you give people an agenda and time estimate going into a conference call, you’re much more likely to stay on the agenda and complete it within the estimated time.
Now when I have a new conference call to setup, I just open up an email to all the participants, fire off the TextExpander snippet, and send it off. In addition to saving me a lot of time, I think it scares the other participants to the call just a little bit.
I’ve actually got two of these snippets because I have two freeconferencecall.com accounts. One is for the day job (which gets shared with other participants at my office) and the other is for MacSparky.
Here is the snippet in action:
Last week Smile released version 2.0 of TextExpander touch, which I really dig. Yesterday Smile gave me five free download codes to give away for the new app. I put the word out on Twitter to send in favorite snippets for codes and got some really great ones. In fact, I got too many and feel bad about leaving some people out but here comes the winners. Thanks everyone for playing along.
1. MultiMarkdown? Yes thank you.
Sayz Lim submitted a MultiMarkdown snippet to maintain a figure tag in MultiMarkdown. One of the things I like about this snippet is the way he uses the same fill-in snippet twice. I do this often too and I'm not sure everyone knows you can do that.
![ [%filltext:name=Figure Caption%] ](%clipboard)
[%filltext:name=Figure Caption%]: %clipboard
2. Let Me Know
Trent sent in this simple yet useful script.
ppp = Please let me know if you have any questions.
3. The Breakfast Club Special
Reader Oscar is an educator and needs to send out notices for students that get Saturday detention. He uses this in conjection with an AppleScript that pulls a list of names from a Dropbox text file and works its magic.
The following students have zeros in %fillpopup:name=Classname:Physics:Aquatic Science:default=Forensics% for the week of: %@-9D%m/%d/%y:
They need to be assigned to Saturday D-hall on %@+3D%m/%d/%y.
4. Testing, Testing
Michael has a snippet that looks very useful for testing stroke victims. It uses pop ups and several other features. This may not be useful to you but I'm betting there is something in your life that would get easier if you made your own snippet like this one.
NIH Stroke Scale %snippet:.date% %snippet:.time%
1a. Level of Consciousness:%fillpopup:name=1a.:default=0 (Keenly responsive.):1 (Arousable with minor stimulation):2 (Requires strong stimulation):3 (Comatose)%
1b. LOC Questions:%fillpopup:name=1b:default=0 (Answers both questions correctly):1 (Answers one question correctly):2 (Answers neither question correctly)%
1c. LOC Commands:%fillpopup:name=1c:default=0 (Performs both tasks correctly):1 (Performs one task correctly):2 (Performs neither task correctly)%
2. Best Gaze:%fillpopup:name=2:default=0 (Normal):1 (Partial gaze palsy):2 (Forced deviation)%
3. Visual:%fillpopup:name=3:default=0 (No visual loss.):1 (Partial hemianopia):2 (Complete hemianopia):3 (Bilateral hemianopia)%
4. Facial Palsy:%fillpopup:name=4:default=0 (Normal):1 (Minor paralysis):2 (Partial/Central paralysis):3 (Complete paralysis)%
5a. Motor Left Arm:%fillpopup:name=5a:default=0 (No drift for 10 seconds):1 (Drift without touching):2 (Some effort against gravity):3 (No effort against gravity):4 (No movement):0 (Amputation or fusion)%
5b. Motor Right Arm:%fillpopup:name=5b:default=0 (No drift for 10 seconds):1 (Drift without touching):2 (Some effort against gravity):3 (No effort against gravity):4 (No movement):0 (Amputation or fusion)%
6a. Motor Left Leg:%fillpopup:name=6a:default=0 (No drift for 10 seconds):1 (Drift without touching):2 (Some effort against gravity):3 (No effort against gravity):4 (No movement):0 (Amputation or fusion)%
6b. Motor Right Leg:%fillpopup:name=6b:default=0 (No drift for 10 seconds):1 (Drift without touching):2 (Some effort against gravity):3 (No effort against gravity):4 (No movement):0 (Amputation or fusion)%
7. Limb Ataxia:%fillpopup:name=7:default=0 (Absent):1 (Present in one limb):2 (Present in two limbs):0 (Amputation or fusion)%
8. Sensory:%fillpopup:name=8:default=0 (Normal):1 (Mild to moderate loss):2 (Severe loss)%
9. Best Language:%fillpopup:name=9:default=0 (No Aphasia):1 (Mild to moderate):2 (Severe aphasia):3 (Mute or global aphasia)%
10. Dysarthria:%fillpopup:name=10:default=0 (Normal):1 (Mild to moderate):2 (Severe dysarthria):0 (Intubated or other)%
11. Extinction and Inattention:%fillpopup:name=11:default=0 (Normal):1 (To one modality):2 (Profound loss)%
5. The Moxy Award…
… goes to Barry for this.
NTET = Need TextExpander Touch
Are you still waiting to check out TextExpander touch 2.0? Shame on you. You should be watching this clever video.
The new version of TextExpander touch is now available for download and it's fabulous. The big new features are rich text and fill in snippet support. Although this is a version 2.0, it is free for people who already purchased the prior version. The fill-in snippet support is huge for me. I use fill-in snippets every day. Federico did a nice extended review at MacStories and I made a short screencast showing off the new version. Enjoy.
Here is another group of my TextExpander snippets.
My date snippets fall in a few categories:
Why type August when "xm8" is faster?
I don't remember when TextExpander added this feature but I really like the relative date function. If I want yesterday's date for instance, I type "d--"
Because I date stamp notes from conversations in nvALT notes and they are always a heading two, I have two different versions of the date stamps, one with and one without markdown headings.
AppleScript Date Snippets
These are magic.
xdnm gets next Monday
xdnw gets the date range next week
xdns gets next Saturday
xdnf gets next Friday
I've written most of these and collected others from the Web. All of the AppleScript based date snippets are courtesy of Ben Waldie. Also honorable mention goes to Tim Stringer, who sent in his list. If you think you've got me licked with something better, send it in and I'll include it with the next update.
In my day job, we use an antiquated old Windows PC system for managing our billing. It takes multiple mouse clicks and butten presses to make a simple entry. It almost feels like I have to walk across the office and turn a wheel somewhere to make a billing entry. Several years ago I decided I was done with it.
Instead, I started making my billing entries in a Byword file called, unsuprisingingly, billings. I keep this file open as I go through my day and make entries with a series of cryptic TextExpander snippets.
## Roadrunner v. Coyote
Place telephone call to opposing counsel concerning
Using these snippets it is really easy to capture billing entries as I move through my day. The Billings file syncs through iCloud to my iPhone and and iPad and I use TextExpander touch on those devices too (syncing through Dropbox) so billing entries are no more difficult there.
Another snippet I use every morning is
Which renders the date and summary information.
At the end of the day, I email the text file off to one of the staff members so she can click buttons, turn dials, and feed coal into our billing system.
About the hundredth time after I copied the text, went and started a new email and then pasted it in, I realized that there must be an easier way to automate this. Of course there is. I use Automator to create and send an email to my assistant every day with my billing text. Here's the Automator service workflow.
The workflow takes the selected text and then prepares an email. It then copies the selected text in the body of the email and uses the recipient and subject line I specify. Then it automatically sends the email. Except for selecting the text and firing off the service, I have no interaction whatsoever. (I should probably attach a keyboard shortcut to make this feel even more magical.)
This is the first automation service I've created that sends off an email without me even looking at it and at first it was a little weird but now I've gotten over it and I love that my Mac does it all for me.
I'm starting a new series where I'm going to feature some of my favorite TextExpander snippets. If you don't know about TextExpander, shame on you. It is a fantastic application that lets you quickly type long (and short) snippets of text with just a few keystrokes. It works on both the Mac and iOS and can make you look both smart and fast. Also, if you've got an interesting TextExpander library you'd like to share, let me know. I'm hoping we can all build a nice library together.
This snippet group is a list of ways to say thanks in foreign languages. When I get nice emails from international readers and listeners, I like to say thanks in their native language instead of mine. So I've been slowly building this snippet library with the name of the country (or language) followed by "thanks". For instance, "filipinothanks" gets me "Salamat". I'm always adding to the library but you can download the current iteration of this library below.
For more TextExpander snippets, clicky here.
The newest version of TextExpander for Mac is out with some nice improvements:
- Supports Cut, Copy and Paste for items in the snippet list
- Adds popover to resolve snippet abbreviation conflicts
- Duplicate snippets are drawn with blue abbreviation (vs. orange for conflicts)
- Adds “expand abbreviation '<abbreviation>'” syntax to AppleScript expand command
- Restores support for %j day-of-year macro
There was, however a bug with the updater that requires you to manually download. You can get it here.
Today's iOS OmniFocus update is a doozy. The headline feature is the addition of iOS TextExpander support. As I've explained before, I aggressively use TextExpander snippets when creating tasks in OmniFocus. I even made a screencast about it. Now they work on the iPhone and iPad as well. I love that.
You can download a few of my OmniFocus related TextExpander snippets right here. In order to get them on your iOS device, install them in TextExpander on your Mac and use the Dropbox sync to transfer them over. If you don't own a Mac, just create them manually in TextExpander Touch on your iOS device. These are really just a sampling. Once you get the idea, customize for whatever works for you.
While Apple added Keyboard Shortcuts with iOS 5, they are inferior to TextExpander shortcuts in several ways. First, they don't synchronize. You have to add them manually to every single iOS device you own. (UPDATE: I'm told iOS 6 remedies this and Keyboard Shortcuts will sync between iOS devices.) TextExpander syncs to Dropbox and takes that tedium away. I find I create very few TextExpander snippets on my iOS devices and instead create them on the Mac and let Dropbox take care of the rest.
Also, there are some strange behaviors using the iOS Keyboard Shortcuts. Specifically, they need to be typed with no trailing characters. If you copy and paste text into a new OmniFocus entry and then move the cursor to the beginning of the pasted text to add a Keyboard Shortcut, it won't work unless you add an additional space and then, using your finger, move the cursor back yet again another space before typing the Keyboard Shortcut. I found this vexing. With TextExpaner snippets in OmniFocus, the snippet fires whether or not there is an additional space. This makes a difference.
Another part of today's iOS OmniFocus update is an improved synchronization with the native iOS Reminders database. This makes it much easier to synchronize these lists. The power tip here is that it gives you the ability to dictate with Siri to Reminders and have that automatically move over into OmniFocus. I use this feature every day and quite often. Again I made videos about this. However, the setup is simpler now than shown in the video. The Siri command I use when adding items to my OmniFocus list is as follows:
"Add [task] to my reminders list."
i.e., "Add fumigate DeathStar garbage room to my reminders list."
OmniFocus watches the Reminders list titled "Reminders" (I appreciate that is confusing) and, once you open OmniFocus on your iPhone, incorporates any items found in the "Reminders" list to your OmniFocus inbox. This does not prevent you from having separate Reminders lists for other things. I, for instance, have Reminders list for Target, Groceries, and other running list type matters.
Overall, the addition of TextExpander support in OmniFocus is huge for me. I've been running the beta for a few weeks and couldn't imagine going back. I'm guessing I'm not alone.