Quick Tip: Flip Between Two Apps With the Hyper Key

Update: So many people told me that it didn’t work for them that I had to go digging for why I was different. I had forgotten where the whole discovery started: I mapped hyper-Tab to Command-Tab in BetterTouchTool. That’s why it functions this way. Get BetterTouchTool and add a keyboard mapping, then this will all make sense. keyboard, productivity, quicktip

→ Continue reading

Scripting Jekyll Image “Uploads”

As I start blogging more with Jekyll, I find that manually placing the images in my source folder and typing out the resulting urls is a bit cumbersome. I know a lot of people have come up with solutions for this, but it was simpler to roll my own in the end. I’ve created a few ways of doing this on OS X. All of these methods will copy the image to an appropriate, date-based subfolder in your static blog’s source, optimize it if the tools are available and immediately place Markdown… jekyll, ruby, service

→ Continue reading

Services vs Keybindings

I talk a lot about keyboard and text tools. Many of my projects are System Services, but I’ve also shared a pretty vast array of KeyBindings. If you’re like many of the people who contact me with questions, you’ve probably wondered what the difference is and why you would want to use both. After all, you can assign keyboard shortcuts to Services, so what’s the point of confusing keybindings? keybindings, productivity, service

→ Continue reading

Mass Creating TextExpander Snippets

I ran into a situation yesterday where I wanted to create over a thousand TextExpander snippets. I won’t go into detail about why, but I thought I’d share my solution. In my case, I was working with a huge CSV file where one field would be the abbreviation and another would be the expansion. The script I’m sharing below only works with CSV files containing two fields (abbreviation, expansion), but it can easily be extrapolated to work with much more complex sources of data. productivity, ruby, scripting, snippet, textexpander

→ Continue reading