Tag: code

A cocoa bridge to OmniFocus

Over the past week or so I’ve been working on unifying two projects: kanban-fetch and of-store. They have their similarites. both are command-line applications that interact with OmniFocus via ScriptingBridge and do something with the data. Both of them started off as small personal projects, closer to hacks than actual scripts, and have developed considerably due to the fact that since I wrote that article I’ve had people emailing me and asking all sorts of questions, which have forced me to add radical features like actual documentation and the like.

Both scripts kept on doing the same things: working out whether OmniFocus was running, working out which version of OF was running based on its application ID, working out if projects and tasks were completed, saving them to a SQLite database…the natural progression is to take all this common code and turn it into a reference library.

Oh look some writing

This morning Omni Group put out their newest edition of their desktop productivity/task-tracking app OmniFocus to great acclaim everywhere on the internet (or at least everywhere on the internet that cares about productivity applications for OS X, a small but very enthusiastic segment). To coincide with the launch they’ve also started a series called Inside Omnifocus, which explores how a number of people from different walks of life use OmniFocus in different ways to generally be better people. The very nice people at Omni Group decided to extend an invitation to me to write for the site, which I happily accepted.

The site went live this morning (my time), and resulted in the above uptick in visitor numbers. So, uh, hello new visitors!

One foot in front of the other

I’ve been slowly - slowly - plodding away at coding MailSend, my work-in-progress, learn-as-you-go email-sending application. With thesis-writing out of the way I’ve got a bit more time to devote to this project, and while every step is slow as treacle, I am getting somewhere.

Today marks the culmination of several days’ painstaking work getting NSOutlineView to play nice, which finally ended in an IMAP “sent mail” selector that I feel I can be proud of:

Customising NSAlert: accessory views

For a well-documented feature, NSAlert‘s accessoryView feature takes a little bit of fiddling to implement. NSAlert is behind the standard pop-up modal alert window that’s familiar to everyone, often popping into the foreground and grabbing your attention, refusing to go away until you acknowledge its existence:

NSAlert boxes can, by default, display any number of buttons (c.f. the classic “Save/Delete/Cancel” triumvirate), but advanced features require a little more jiggery-pokery. This mainly comes in the form of its accessoryView property, which allows you to add an NSView to the alert proper. At first you might be tempted to programatically create an NSView, adding the required elements in init methods and the like, but it turns out it’s actually a bit easier to use nib files to hold all of that. This is how to do so.

Migrating MacRuby scripts to Objective-C

First signs of decay

After upgrading to Mavericks, I found that a few of my MacRuby scripts had stopped working. Apparently it’s due to some part of the optparse package, which breaks upon upgrading, and I’m not the only one getting the error. The issue has been open for about a month now, and there doesn’t appear to be any response from the devs.

This isn’t to say that the project’s defunct, but this has happened before to promising ruby-cocoa bridging tools. It’s symptomatic (I believe) of a more general trend, in which people build a cool bridge, but Apple has no responsibility to keep it working. When Apple upgrades various portions of the OS, these bridges stop working, which then mean that the devs have to scramble to fix their own products.

Desktop background on OS X 10.9 Mavericks

I upgraded to OS X 10.9 a week or so ago, along with everyone else in the Mac nerd world. And like everyone else in the Mac nerd world, something of mine broke. In my case, it was a small script that would alter com.apple.desktop.plist to daily change my desktop.

Essentially, you have no way in OS X of syncing desktop backgrounds between spaces. You can set desktops so that all your spaces have the same desktop, but if you want to cycle them randomly, the first time the OS changes them, they’ll be all different once again. The problem is not a huge one, but it fell into a particular category of being big enough to annoy me, and small enough that I could write a script to fix it.

Assign 0.4.0 update

A minor update to Assign.app tonight: Version 0.4.0 brings the ability to “drill down” into a folder. It’s something I occasionally found myself doing, expecting it to work, and it wasn’t like the right-arrow key was doing anything anyway.

Catalogue search times are quite slow when you get beyond ten characters or so. This is mainly because I’m constructing a “fuzzy string” with which to search the catalogue:

Opening Sublime Text files in other applications

Here’s a simple plugin for Sublime Text that you can modify to suit your own needs.

I often find myself using different plain-text apps for different purposes. Sublime Text is my go-to app for coding and technical writing, mainly due to all the usual factors: syntax highlighting, snippets, plugins and so on. However, I often find myself switching to Byword for longer-form writing, or just when I want a more prose-friendly environment. Unfortunately, Sublime Text lacks an “Open in…” menu item like you see in, for example, Notational Velocity. What it does have is incredible support for plugins, so I figured it wouldn’t be too hard to make one for my purposes.

Tabbed windows, take 2

After my previous post on how to do tabbed windows in Cocoa, a friend pointed out that I’m going about this all wrong, and using NSTabView is inefficient and introduces unnecessary overhead.

Turns out you can do this much more simply by just adding another NSView alongisde your current window:

  • 1
  • 2
  • 3
  • ...
  • 5