Welcome to the lab.

Bunch’s latest abilities…

[Tweet : nvALT]

I got up a bit too early this morning. I finished a sprint on a freelance project but wasn’t ready to dig into my other big stuff yet. That stuff’s for after 5am. Before 5am is Bunch time. As promised, I haven’t written a blog post for every update, but you can find the full list of recent changes in the changelog.

If you don’t know what Bunch is, it’s an app I wrote for batch launching apps, opening files, toggling Do Not Disturb and a dozen other things. Start with the docs.

There are a few apps that I launch in Bunches that don’t respond to the XX command that would normally close all open windows for the app. Bunch uses an AppleScript “close every window” command to do this, and some apps by their nature just don’t like that. In Tower, for example, that command won’t work, but typing ⌥⌘W will. So, clearly, that’s what Bunch needed to be able to do.

In the file parameters for an app, you can now specify shortcuts to send to the app, or full strings to type out. The latter being less useful, but I already had the code for it. So it happened.

To specify a shortcut, you just surround it in curly brackets. So for the previous example:

- {~@w}
- ~/Code/Bunch

That will send the Close All Windows shortcut and then open the Bunch repository. You’ll note that the shortcut is specified with some odd characters. These map to the same characters used by key bindings in macOS:

symbol key
$ Shift
~ Option
@ Command
^ Control

You can send multiple shortcuts in sequence just by adding a space between them within the curly brackets:

Sublime Text
- {@a @c @v @v}

Which would, for whatever reason, perform a select-all, copy, paste, paste in the frontmost window of Sublime Text. Obviously not a good example: in addition to being pointless it presupposes that a window is already open, which isn’t a safe assumption in a Bunch. But anyway, you can send sequences.

You can also type text. Like I said, this is less useful than sending shorcuts, but if you need to send a series of regular keystrokes to an app, you can do so using square brackets. Within these strings there are a few “escape” codes you can use, specified using a double backslash.

escape key mnemonic
\\n Return newline
\\t Tab tab
\\b Left Arrow back
\\f Right Arrow forward
\\p Up Arrow previous
\\n Down Arrow next

In your Bunch file:

- TextEdit
- {@n}
- [- First item\\n\\t- Second item\\n]

This would create a new file and insert (note the newlines and tab):

- First item
	- Second item

If you actually find a clever use for that second one, do tell.

The latest version is available for automatic update (Bunch->Check For Updates) or download from the project page. As always, it’s donationware and I sincerely thank everyone who’s found it useful enough to pitch in.

Your August nvUltra update

[Tweet : nvALT]

The nvUltra private beta now has about 500 users putting it through its paces, and is rapidly nearing readiness for shipping. There are still a few major hurdles to jump through, and we’re sifting through user feedback — deciding what’s a valid feature request and what needs further clarification in our driving philosophy. I can’t put a solid date on release yet, but I have fond hopes of a late August release. Much to do before then, though, and you probably know how my release dates can slip (but I 100% guarantee this is not going to be BitWriter all over again)!

Latest stuff nvUltra does

Here’s the latest, with the caveat that there’s always the possibility that certain features change or don’t make it to final release. (A lot of other behavior changes have happened, but most people not currently testing wouldn’t have known the original behavior to begin with, so on that you’ll have to trust me when I say that it’s getting better and better.)

First, nvUltra can now run without a Dock icon (menu bar). When bringing it back up, either by hitting the user-defined hotkey or clicking the menu bar, the Dock icon appears temporarily. This makes all of the menu items available, allowing full control over the application in menu bar mode. I believe this to be a good solution considering that in nvALT — when running in the menu bar — you couldn’t even get to Preferences without knowing the keyboard shortcut for the menu item. Now you can get to everything, and as soon as you switch away it’s out of your Dock again.

Rather than going with a 3-pane layout to include folders, we’ve added a “Folder Navigator.” While most modern note-taking apps provide a left pane where you can build whole folder collections and hierarchies, this runs contrary to the way we use Ultra. Coming from the “one big bucket” philosophy of Notational Velocity, we focus first on tagging and fast and accurate full-text search, avoiding the need to file everything in specific folders. We also keep everything in plain text on your drive, so files have to actually exist in a subfolder to be “foldered” in Ultra, i.e. not a database that can just represent files in whatever folder(s) you assign them to.

That said, Ultra can open any folder as a new “bucket,” and can have multiple folders open at once. Subfolders are recognized within any folder as well. So if your organization system includes, for example, a subfolder for each project with deeper subfolders for drafts, assets, etc., you can just open that project as its own window, perhaps keeping your main bucket open for reference and copying. That’s where the Folder Navigator comes in: once you’ve opened a folder, it’s stored in a list and you can type a keyboard shortcut to bring up a “quick open” style window with fuzzy search and keyboard selection. You don’t have to search a sidebar to get to regularly used folders, they’re available in a few keystrokes any time.

Drag and drop is a big deal in Ultra. Assets (images, PDFs, movies) show up in the file list just like notes, with Quick Look previews when they’re not editable text. You can drag an image into a note from the sidebar and have Markdown syntax generated automatically, or drag another note in to either [[wiki link]] it, or generate MultiMarkdown transclusion syntax to actually embed one note in another. And you can copy files into the notebook from outside, or notes from one notebook window to another by drag and drop.

Stuff nvUltra does not do

As we’ve worked on this, we’ve solidified our roadmap and there are a couple points that could use early clarification.

First, we don’t do Simplenote. This isn’t out of any distaste for Simplenote itself, it’s because Simplenote requires a single bucket. We focused heavily on the ability to use as many “notebooks” (folders) as needed, switching freely, keeping everything in plain text on your disk (or in your cloud syncing service of choice). There’s no way to make that compatible with Simplenote. Using Dropbox or iCloud Drive is preferrable for this kind of sync, and apps like 1Writer on iOS are superior to the Simplenote app (in our opinion), especially for Markdown. And any text/Markdown editor on iOS is compatible with nvUltra (though there is a distinct possibility of nvUltra for iOS after the Mac app is solid).

Speaking of Markdown, we’ve doubled down on it (specifically MultiMarkdown). Thus, we don’t do RTF, nor do we plan to. Fletcher and I consider RTF to be a pretty awful format, and not conducive to portability and longevity. You can take your notes in plain text, but if you need emphasis, tables, images, footnotes, etc., Markdown is the way to go. I realize this limits our audience a bit, but I believe that by and large the target audience is already using Markdown or is receptive to learning it. Major apps like Bear and Ulysses already embrace it, so I know it won’t kill our audience.

Beyond those two things, nvUltra does everything nvALT ever did, and does it even better. I’m using the app daily for everything from storing code snippets to writing documentation. We won’t be further expanding the beta pool en masse immediately, but if you think you’d be an ideal tester for certain edge cases (disability/accessibility, multi-lingual use, bizarre uses that currently push nvALT to its limit, etc.) please do contact me and I’ll see if a special invite is warranted. Everyone else, sign up for the mailing list to get updates as we near release!

Macstock 2019 was awesome

[Tweet : nvALT]

Elle and I got back from Macstock 2019 (a.k.a. Macstock 5) on Monday. We stayed an extra day to spend some time in Woodstock, the wonderful little Illinois town that is host to Macstock (or close enough, it’s actually in nearby Crystal Lake).

It seemed scheduling conflicts and personal affairs abounded this year, but despite some notably missing faces the numbers grew again, as they do every year this goes on. And what a crowd, I met so many new people this year, and had some great times with friends new and old.

The talks were great. I loved presentations from David Sparks, Rosemary Orchard, Allison Sheridan, Mike Schmitz, and all the others. I especially enjoyed Chuck Joiner’s presentation on how to create a good presentation deck — presented the day before my own talk — that made me realize I don’t know how to make a good presentation deck. I felt like my own talks went well enough, though I always feel like I get more credit than I should. Imposter syndrome, I suppose.

There were live podcasts from Mac Power Users and others, as well as the Macstock Film Festival, game night, and plenty of entertainment to go around. And if you have/make the time, there’s Woodstock to visit and lots of local shops to enjoy. (I love Ethereal Confections and would be severely disappointed if — on any given trip to the area — I didn’t get to go.)

To everyone I met I want to say that it really was great to meet you. I wasn’t just saying that. There were enough people there that I felt it was important to talk to that I might have come off as uninterested on occasion, flitting from one conversation to the next. Please don’t think it was anything less than an honor to meet you. The number of times I was thanked for my work, my blog, or my podcasts was tremendous and meant the world to me.

I did not take as many pictures as I should have, but here are a few I did pull off…

Carbon Reintroduction

[Tweet : nvALT]

A while back I switched this site into high-privacy mode, switching to SSL and removing Google analytics and click-based advertising. I’ve been happy with the results, including using Fathom for analytics.

Since then, I’ve been talking to the folks at BuySellAds, owners of Carbon Ads, about their privacy policies and have decided to re-introduce the single Carbon ad that I run in the sidebar. This is after carefully reviewing their take on data collection and their privacy policy. They collect only necessary data and track zero personal identity bits. It’s enough to convince me that I’m not risking your privacy by running their ads on my site.

If you have any questions or concerns, I’m happy to listen. At this point, though, I think that Carbon and BuySellAds are doing a commendable job in a world where — more often than not — ad companies take the low road.

The Keyboard Maestro Field Guide Winners

[Tweet : nvALT]

Congratulations to the winners of the Keyboard Maestro Field Guide giveaway!

  • Watts Martin
  • Michael McDonnell
  • tomcat
  • Simon Holmen Reventlow Clemmensen
  • Martin Guddat

The revamped Killotron Giveaway Robot functioned flawlessly all the way up until actually sending out the emails; it made me do the final stretch by hand, so we’ll call that “mostly” successful with a bit to fix for next time.

Thanks again to David Sparks for providing the codes, and even if you didn’t win, you should go check out the Keyboard Maestro Field Guide (and all the other great Field Guides at learn.macsparky.com). I guarantee you’ll learn a lot from one of the most helpful guys in the Mac world.

Giveaway: The Keyboard Maestro Field Guide

[Tweet : nvALT]

I saw a great response to my post about MacSparky’s Keyboard Maestro Field Guide, and David was kind enough to provide some promo codes for a giveaway. If you haven’t checked it out, it contains everything you need to know to get started and dive deep with the Mac automation utility Keyboard Maestro.

I recently switched my hosting for this site, and as a result I had to rewrite the Killotron Giveaway Robot. I can’t easily run CouchDB on Dreamhost, so the whole thing is now backed by Firebase (no, I don’t want to work with mySQL, actually). So this is the first public run of the new setup, and if there are complications I’ll be immediately pulling this post and trying again after some fixes. But I think it’s working.

I have 5 copies of the Keyboard Maestro Field Guide to give away. Add your name and email below to enter the drawing. Winners will be randomly selected on July 15 at noon CST.

Sorry, this giveaway has ended.