Welcome to the lab.

The fickle macOS Accessibility Permissions

[Tweet : nvALT]

I’ve had this happen with several apps — some apps more than once — and maybe you’ve seen it: the app has been manually granted permissions under System Preferences->Security & Privacy->Accessibility, but still fails to access features, especially the clipboard. This kills functionality in apps like LaunchBar and PopClip. Checking the permissions always shows they’re enabled, and the apps don’t seem to detect any issue; most of them notify you if they don’t have permissions, linking you to the System Preferences pane, so it seems as though, for all intents and purposes, the system registers that permissions are set. Yet somehow, they’re not.

The solution that works every time is to remove the app from the list in System Preferences by hitting the minus symbol at the bottom, then re-add the app either by dragging it in from Finder or using the plus symbol and manually selecting it. So if you’re seeing functions of macOS utilities inexplicably stop working, especially after an OS update, do that.

It’s an icky and impermanent solution. I find the shortcomings of the new security measures irritating. I’m all for security. I also know what I’m doing — and what apps I install and run — and having to give every app permission to open a folder in Finder with Apple Events is annoying. I’d like an override that just states “I get it, I take full responsibility.” If nothing else, Apple, please at least fix the bugs that require users to provide permission more than once. Please and thank you1.

  1. No, I’m not delusional enough to think that writing that on my blog would be more effective than filing a radar. And yes, I’ll be filing a radar.

Bunches LaunchBar Action quick fix

[Tweet : nvALT]

I found a bug in Bunches, the LaunchBar Action for Bunch that I posted on Monday, and have uploaded a fix for it. The cache time is reduced to one day, and it uses LaunchBar preferences to locate your preference file rather than depending on the script environment. It should work now, but let me know if you have any problems!

Oh, by the way, the latest version of Bunch can now run scripts when quitting a Bunch, too. I mean, since I’m posting about Bunch news anyway…

Bunches LaunchBar Action v2.0.1

A LaunchBar action for Bunch

Published 05/22/19.

Updated 06/08/19. Changelog

DonateMore info…

NiftyMenu, Mac menu madness

[Tweet : nvALT]

Ok, this one is a little embarrassing. You know how I often refer to myself as a mad scientist? This is what I’m talking about.

I made a crazy thing last weekend that has such limited practical value that even if I found anyone else who could truly benefit from it, our combined total of time savings would struggle to come close to the Saturday morning hours that went into it. That said, it’s too neat a trick and I put too much loving care into it to hide it.

It started while I was working on documentation for nvUltra and wanted some quick screenshots of various menus. I generally have reservations doing this because over time menus always change so it’s hard to automate, and you know you’re going to have to do this all over again next time you move a menu item or the OS updates with some fancy new look that makes all your current screenshots look outdated. Plus the process of taking menu screenshots itself has some annoyances for me (I detailed them in the docs). If only there was a way to create a playground that I could automate…

My solution is called NiftyMenu. With one script it automatically builds an HTML playground that exactly duplicates the menus of any Mac app. Click menus to lock them in place, double-click and option-click to add different callouts. Toggle background images and Dark Mode with keystrokes. Then use a JavaScript API to automate fuzzy search for clicking items, adding callouts, desktop images, and Dark Mode. See the demo to understand what I’m talking about. If you dare, visit the GitHub repository to see the full depth of the madness.

Yes, I’ll ask my doctor about a med change.

Bunch for the menu bar

[Tweet : nvALT]

Ok, Bunch news two days in a row, despite having said I wouldn’t keep doing this. But this one is special. I’ll keep it short.

One of the most frequent requests has been for Bunch to run as a menu bar utility. I get it. While I like having it in my Dock and it makes sense with my workflow, it’s never made sense to have it show up in the Application Switcher (⌘-Tab). And it frequently requires clicking once to wake it up before the right click menu will work. So a menu bar app made sense. So I did that.

The Bunch project page is updated with new info and downloads. If you’re already running Bunch, the update should show up automatically. To get the menu bar goodness after you update, just use Preferences->Run In Menu Bar. You can get back to Dock Mode at any time with Preferences->Run In Dock.

Better Bunch for LaunchBar

[Tweet : nvALT]

This post is specifically for people who use Bunch with LaunchBar. If you happen to be an Alfred user, Jay Miller is cool guy who also develops an Alfred action for Bunch. Thanks Jay!

I made such a huge improvement to the “Bunches” LaunchBar action that I had to bump it straight up to version 2.0. Bunch has been improving, so this little one has to keep up. It’s the way of the world.

The action previously just read your Bunches folder and launched them with the URL handler. The URL handler has expanded, though, and there was a bunch1 of stuff I wanted to be able to do from LaunchBar. I actually use Bunch as much from my launcher as my Dock now, so it was worthwhile to put some time into it. Here’s what’s new:

  • Caching preferences retrieved from defaults read to speed things up

    Using defaults to determine the Bunches folder and the Toggle Bunches preference every time the action was selected was adding 2-4 seconds of delay. I changed it to read the preference plist directly, which cut down the domain search time, but it was still consistently slow. Those preferences aren’t likely to change all that often, so now it just caches them in the actions’ own preferences and only has a short delay once every few days when it refreshes.

    The cache is set to last for 3 days at a time, and you can force a refresh from the settings submenu.

  • Allow setting a default action (Toggle, Open) that overrides your Bunch preferences

    When Toggle Bunches is enabled in Bunch, the Dock shows checkmarks next to open Bunches and it makes sense to have the preference there. From LaunchBar, though, I don’t have access to the list of what’s currently launched, so it makes more sense to set the Action to default to “Open”. If you open the settings menu (the last item when you arrow into the Bunches action), you’ll see the item that overrides that preference.

    Bonus: once you’ve set that, you’ll never suffer from that particular defaults read delay again.

  • Every Bunch listed now has a child menu that offers whichever actions aren’t default If the default action is Open or Close, hitting the right arrow (or Ctrl-L) will offer you the opposite option. If it’s on Toggle, the options will include both Open and Close.
  • Holding modifier keys when opening the action changes the default methods for that run
    • Ctrl: close bunches
    • Command: toggle bunches
    • Shift: open bunches

    After you type bunch to select the Bunches action, hold down the Ctrl key as you arrow into it. Everything will default to Close. It’s handy once you memorize the keys. Or maybe I’m just too keyboard-nerdy.

  • Bunches can now accept strings

    If you press Spacebar when the action is selected, Bunches will accept a string and execute it using the raw?txt= method of the URL handler.

    You could just run (dnd off) to toggle Do Not Disturb. You can pass a longer string with more commands, but note that you need newlines between each command, so typing them in LaunchBar is not feasible. But…

  • Bunches can now accept files, too

    You can select a Bunch file (with or without .bunch extension) from anywhere on your system and hit tab to execute it in Bunch. Using this method will always run them with the raw?file= method, which means they’re always going to open, even if you hand it a Bunch that’s in your main Bunch folder and already running. It treats all received files as “outsiders,” which is what the method was intended for.

  • I made some new icons. I’ll hate them by tomorrow, I always do

If you’re wondering about the CLI, the only thing I’d really like to fix there is the same defaults read delay. I updated the gist with the read-directly-from-plist modification, but it could still stand some caching. I’d also like it to accept text from STDIN for raw?txt= handling, and files as arguments for raw?file= handling. I rewrote the LaunchBar action in JavaScript, so it’s completely diverged from the Ruby script and will be a separate project.

In the meantime, the LaunchBar action is packed, codesigned, and ready to go. Download below!

Bunches LaunchBar Action v2.0.1

A LaunchBar action for Bunch

Published 05/22/19.

Updated 06/08/19. Changelog

DonateMore info…

  1. Sorry.

nvUltra is nvUltra

[Tweet : nvALT]

I just wanted to post a quick progress report on the upcoming nvALT successor, nvUltra. It’s been a big week of bug fixes and planning!

First, we decided on an official name of “nvUltra.” We’re sticking with the working title. Here’s the story: when Fletcher first started working on this, before we even teamed up, he started calling it nvUltra as a play on nvALT. When he mentioned it during our first Skype chat, I thought “whoa, that’s perfect.” And it was… as a name for an nvALT successor. I’d like to think that there are potential customers outside of current nvALT users, though, and I think that “nvUltra” is just a weirdly spelled non-word to the uninitiated. So we started trying to find something we liked better.

We went through months of brainstorming, with an extensive mind map, detailed Slack discussions, input from friends (and some of you), and conversations with other outsiders. We found a bunch of “could be cool” names, but none that we both agreed had any “eureka!” to them. So we finally admitted that the only name we both loved was nvUltra. So we’re making it official. Now I just have to figure out the icon and branding for it.

Our first round of beta testing is going well, and we’ve slowly been adding one-off testers to the list. I would estimate another week before we officially expand the pool. Our current testers are really putting it through its paces and by the time the next invite goes out, it’s going to be a significantly better app. Things are moving quickly!

That’s the news for now. The mailing list is getting huge, so anyone joining now will likely only get a beta invite after it’s already public. If you want to get updates on beta and release progress, though, please do sign up!

The latest Bunch stuff

[Tweet : nvALT]

As promised, since I’ve added the auto-updates to Bunch I’ve laid off on posting with every release. But there’s enough cool new stuff now that I figured I’d share.

I’m still toying with the idea of making this a commercial application, but for now it remains donationware. So don’t be shy.

Since the last post, I’ve added a… bunch of new features. One feature of note that will definitely slip under the radar is that Bunch now watches your Bunches folder and automatically detects changes to your Bunches, refreshing them in memory every time they’re edited. No more “Refresh Bunches” command neccessary when experimenting.

New Commands

I added a few new commands to Bunch. These are lines in parenthesis which control a few macOS functions. Previously I only had commands for hiding and showing the dock set up.

Now there are commands for hiding and showing desktop icons: (hide desktop) and (show desktop).

And commands for toggling Do Not Disturb: (do not disturb) and (do not disturb off). These can be abbreviated as (dnd on) and (dnd off).

New Actions

I’ll describe these briefly, but see the documentation for more details.

You can now execute Automator Workflows by using & at the beginning of a line. If the workflow is in your Bunches folder (or a subfolder), you don’t even need a path or an extension for it (except for relative paths to subfolders), just a line like & MyWorkflow or & workflows/MyWorkflow. You can even pass variables to it, so you can re-use the same workflow in multiple Bunches with different inputs.

You can also execute shell scripts and shell commands directly by using $ at the beginning of a line. These are executed as the equivalent of /bin/sh -c [your command]. You can pass arguments on the same line, or use - filename lines below it to set environment variables. More details in the docs.

You can also now add a percent sign (%) before an app name to ignore it when quitting a Bunch. So if you have an app you want to make sure gets launched with a Bunch, but don’t want it to quit when toggling a Bunch off, just add % at the beginning of the line.

URL Handler Improvements

The URL handler has expanded to include close and toggle methods, as well as a raw method that lets you point to Bunches outside of the Bunch folder and even execute raw text as if it were a bunch. The open, close, and toggle URL handler methods will also now appropriately change the state of Bunches in the menu if you have Toggle Bunches or Single Bunch Mode enabled.

Better Feedback

I’ve added a few alert dialogs to let you know when and why a Bunch item might be failing. Because Bunch is potentially interacting with a dozen other apps and handlers, it’s a bit hard to know exactly where failure points are when executing them in batch. A little feedback where possible should help.

Integrations

You can now find LaunchBar, Alfred, and CLI scripts, as well as updated documentation and download on the project page. And I probably don’t need to say it again (because if you’re going to you will), but if you’re loving Bunch, please pitch in a few bucks!

A Macstock reminder

[Tweet : nvALT]

Just a reminder, Macstock 2019 is happening in just over a month. Which is soon, but there’s still time to plan your trip to the Chicago area for a weekend of hanging out with fellow Apple nerds and absorbing some Mac and iOS knowledge from the amazing speaker lineup (and me).

A final addition to the session lineup is especially exciting to me. My girlfriend, Elle Newman, will be teaching “Yoga for Nerds” in the mornings before the sessions. Starting with some wrist, neck, and back care you can do while sitting at a desk, it’s going to include the exercises that turned me from a wreck to a trooper. I used to have constant back pain, and my wrists were so painful I would be unable to work for entire days. If you spend time at a keyboard, I highly recommend fitting that session into your morning. The second session will be a bit more what you imagine when someone says “yoga,” but you can show up in your regular clothes and everything you need will be provided. This stuff has turned my health around, I’m excited that Elle will be able to share it with my friends and colleagues.

And remember, you can still get a discount on your tickets by using the code TERPSTRA when you buy. Make your plans now!