While I wrote these MacOS Quick Actions to scratch my own proverbial itch, I think they could be of use to others, so I’m releasing them as open source.

The actions allow you to calculate the word count, line count, and character count of selected text, to convert a text selection to upper case, lower case, or title case, to do the same to the contents of the clipboard, and to convert the clipboard from rich text to plain text and to trim the contents of the clipboard.

You can download the actions and read the docs on GitHub.

As well as describing what each of the Quick Actions do, the GitHub docs also describe how to install the actions, how to use them, and how to assign keyboard shortcuts to them if desired.

If you’re curious to learn how these Quick Actions work, read on.

Read more

Tagged with:

How often does someone email you a file who’s content you need to copy-and-paste into a web form of some kind? Maybe it’s just me, but I find I need to do it a lot!

What I wanted was the ability to right-click any file with plain-text content (text, markdown, XML, JSON, Certificate Signing Requests, …) and send its content to the clipboard.

By combing Automator, the cat and pbcopy terminal commands, and a little JavaScript, I was able to build a nice service that can be accessed by right-clicking any file in any app that reports its outcome using a standard OS notification.

Download the Quick Action here, extract it, and copy it to your ~/Library/Services folder.

Read more

Tagged with:

Note: This is an improved version of my original solution to this problem.

As a reminder, the problem to be solved is to have screenshots automatically appear in Yoink as they are taken. Again, as a reminder, on macOS, screenshots are saved to the desktop as files with names of the form Screen Shot YYYY-MM-DD at HH.MM.SS.png, e.g. Screen Shot 2017-11-22 at 22.30.10.png. And one final reminder — Hazel is an app that watches the filesystem for events, and executes actions in response. Hazel rules are added to folders.

My original solution was to add a Hazel rule to the desktop folder with the condition Name starts with Screen Shot and a single Shell script action which used the open terminal command to send the screenshot to Yoink. The good people at Hazel replied to my tweet about the original post with a suggestion: I think you can do the same thing without a script. Try using the “Open” action.

Unsurprisingly, the Hazel suggestion proved to be spot on.

Read more

Tagged with:

Note: based on feedback from Hazel via Twitter I’ve improved on this original Hazel rule, described separately here.

One of my favourite app discoveries of 2017 has been Yoink — a Mac an iOS app that revolutionaries drag-and-drop by simply providing a shelf where you can temporarily store anything drag-and-dropable as you switch between windows, apps, and even spaces. I reviewed Yoink on episode 496 of the Chit Chat Across the Pond podcast.

Anyway, I use the Yoink all the time, but, it’s missing what I believe would be a fantastic feature — the automatic addition of screenshots to the Yoink bar as you take them.

I contacted the developer to suggest/request this as a feature, and he didn’t seem all that interested in adding it, but, he did make two suggestions for how I could go about getting the functionality I wanted indirectly. He made two suggestions — buy a different app of his, ScreenFloat, which is specifically for managing screen shots, or, build an automator script to take screenshots and send them to Yoink.

This week I finally found a simple solution I’m happy with — Hazel combined with a simple terminal command.

Read more

Tagged with:

I’ve just published a release of backup.pl, my simple perl-based generic backup script. You can download the release, and get full documentation on the project’s GitHub page.

Tagged with:

What’s the problem to be solved? When doing show notes for the various podcasts I contribute to, I generally have to include a lot of links. Particularly for Let’s Talk Apple and the Security Stuff segment on the Nosillacast, I want to clearly show where the news story came from. I also want to keep the link text short. To balance those two requirements, I decided to use the domain part of the URL with /... appended to it as the link text. Doing this manually would be a really big pain in the backside because there are often more than 50 links in the notes for a single episode! Clearly, this needed automation.

I do my show notes in Markdown, so my initial solution produced links in Markdown format. Allison asked me how I did my links, because she thought they looked good, and she assumed I would have automated the process in some way. I explained my solution, and she asked if I could build a variant for her that generates the same style of links in HTML format.

My solution is built using a number of building blocks, but the glue that holds it all together is TextExpander. TextExpander is a paid-for Mac-only app, but one I would argue is well worth the price of admission. TextExpander is one of the first things I install on every new Mac.

TextExpander’s raison d’être is to monitor everything you type, looking for abbreviations you have defined, and replacing them with expansions you have defined as you type. Each of these abbreviations/expansion pairs are referred to as snippets within TextExpander.

Snippets can be very simple replacements like expanding *bb into Bart Busschots, but they can also be much more complex. The next level up would be to include special codes to inject data into the replacements, for example, I have a snippet that replaces *di with the current date and my initials, the content of that snippet is %d-%m-%Y BB%d gets replaced with the day part of the current date, %m the month part of the current date etc.. The next level of complexity is that you can include special codes to make TextExpander popup a little form when ever you type the abbreviation into which you then fill in information that gets included in the replacement text.

However, the thing that really makes TextExpander powerful in my mind is it’s ability to execute a script to generate the replacement text. The scripts can be written in AppleScript, JavaScript, and any scripting language supported in the OS X terminal. This allows TextExpander to utilise the full power of the Terminal, as well as the full power of scripting languages like Perl, Python and Ruby.

Unsurprisingly, I like to use Perl in my snippets, and in this case, I use Perl to reach out to the pbpaste terminal command, and to harness the power of the URI perl module.

I use my solution as follows:

  1. Copy the link to be included in the show notes to the clipboard
  2. Cmd+tab to the show notes I am working on and type the abbreviation *mdlc into the place in the notes where I want the URL to be inserted (all my Markdown expansions start with *md, and lc stands for linkify clipboard).
  3. The TextExpander snippet then executes – it fetches the URL from the clipboard, parses it with the URI perl module, and assuming that succeeds, generates the Markdown code for the link, and inserts it into the show notes in place of the *mdlc abbreviation.

Read more

Tagged with: