First off, I promise an nvUltra update this week. You deserve it. In the meantime…

I woke up at three this morning. As you may have come to expect, I’ve added stuff to Bunch, my batch app launcher and current too-awake-to-sleep-too-tired-to-do-real-work project. I think this new feature will save a few users (and myself) some time: I’m calling it “snippets,” which is an uncreative way of saying you can now use templated actions with variables in a Bunch.

One of my main uses of Bunch is to switch between projects I’m working on. They are, by and large, the same Bunch: start a Timing.app task, open Tower to the project repository, open iTerm to the project directory, open TaskPaper to the project’s todo file, etc. The only thing that really changes is the path and title of the project.

Now I can set up a “snippet” file with all of the tasks, using ${variables} to make it reusable. For example, a file called “project.snippet” in a “snippets” subfolder:

& workflows/Timing
- task = ${proj_name} Development
- project = Development
iTerm
- ${proj_dir}
Tower
- ${proj_dir}
TaskPaper
- ${proj_dir}/${proj_name}.taskpaper
# etc. etc.

Then, in my Bunch for the nvUltra project, I just call it with < snippet_name with any variable definitions following (with hyphens, same as application files, Automator workflow/shell variables, etc., because consistency):

< snippets/project.snippet
- proj_dir=~/Code/nvUltra
- proj_name=nvUltra

I haven’t added any features for variable mangling or anything, just straight up text replacements, but it should do the trick. It’s not meant to be overly complex (er, complicated) at this point. Who knows what happens next time I’m up before the sun.

There was also a crash when trying to change the folder location of your Bunches in recent versions. I agonized over this crash1 for an hour or two, I lost track, eventually giving up and just adding an alert that you need to restart Bunch after changing this setting. Now it doesn’t crash, and you’ll have to do that, what, like once? Ever? So that’s kind of a fix. At least it doesn’t crash now.

The other updates since my last post are stupid. I won’t even tell you about them. There’s a changelog, though, wherein I reveal some features that I added because I thought they might save me time and then realized it was pointless but for some reason just left them in. Again, and I can’t repeat this often enough, this project is mostly developed in the hours before 5am.

The latest version (1.2.0) is out for automatic update, or download from the project page. Please enjoy, compliments of the chef.

P.S. I already know that the header image on this post will never get the credit it deserves. I’ll just pat myself on the head.

  1. An illegal access exception when trying to bridge a reference to AppDelegate from within an fsevents callback. I came up with no explanation for this, but I kind of suck at debugging. Ask Daniel Jalkut, who’s been kind enough to walk me through lldb more than once.