Welcome to the lab.

Remove the proxy icon hover delay in Big Sur

I’m usually a good sport about macOS updates. I find stuff to like, and deal with the bugs as they get worked out. I’m not feeling as generous about Big Sur. Among many annoyances I have is a relatively (well, very) small one: Apple hid the proxy icon behind a rollover with a delay in Finder.

If you’re unfamiliar with them, proxy icons are the little icon to the left of a document title in the title bar. They act as a proxy for the document/file, allowing you to drag from the title bar to any application that accepts that type of document.

Like I said, this change is tiny, but it’s the kind of thing where I can’t really understand the motivation for doing it. It seems like a regression to me, no matter how I look at it. I haven’t found a way to sneakily bring them back, but I did find a way to at least remove the ~1s delay between hovering and the icon being exposed.

Thanks to Herman van Boeijen for this one:

defaults write com.apple.Finder NSToolbarTitleViewRolloverDelay -float 0

Running that in Terminal and then restarting Finder (killall Finder) will make the proxy icon display immediately when your cursor rolls over it. It’s a start., but I’m still uncharacteristically grumpy about this whole OS.

Marked 2, Big Sur, and blurry PDFs

Ok, so here’s the deal. Marked works on Big Sur. If you’re using it for previewing your Markdown or exporting HTML, it should continue to work perfectly for you. But if you, like a majority of my customers, use Marked to output great-looking PDFs, you’re going to run into some trouble that will take me a while to sort out.

The short story is this: on Big Sur, for whatever reason, generating PDFs using WebKit outputs a raster image rather than a vector PDF as it has always done in the past. This means it can’t be zoomed, text isn’t selectable, and it’s basically a useless PDF. The workaround is simply to export to HTML, load it in Safari, and then print to PDF. You can get even better results using Firefox, but I’ll be posting a knowledge base article on that. You’ll lose some of Marked’s more advanced export features, but you’ll get a nice vector PDF out of it.

Allow me to explain a little further why this isn’t working, and why I’m not prepared for the release of Big Sur today.

When I first tested on Big Sur months ago, this problem became apparent. I filed bug reports and posted to forums but apparently I was the only person seeing this. This is mostly because the version of WebKit that Marked uses was deprecated a while ago, and most people had moved on to using the newer WKWebView. This wasn’t an option for Marked at the time, though, as WKWebView completely lacked printing and PDF capabilities until recently.

Switching to WKWebView meant major changes to Marked. I mean a complete rewrite of thousands of lines of code. And because the process meant losing major export functionality (among other losses), there was no justification for doing it. Zero. So I hoped that this PDF bug would be fixed and I wouldn’t have to make the switch until WKWebView was actually suitable for use.

WKWebView has finally added some of the features I need, though implemented in such a way that I still can’t fully replicate the functionality Marked had with the older WebView. And if I implement the latest features, it risks becoming incompatible with older macOS versions, meaning I’d have to have two entirely different apps available if I wanted to maintain customers who, for various reasons, haven’t chosen to update their OS. Which isn’t a trivial number these days.

After spending days and weeks on workarounds, I’ve come down to completely bypassing WebKit for the PDF export functionality. It’s still a major rewrite, and the available functionality, especially around customizable headers and footers, will change, but it should allow me to continue offering solid PDF export across OS versions. It will also significantly improve DOCX export. There will be a loss of ability to use custom themes for exported documents, but I’ll be working to allow PDF and DOCX custom themes once I get the basic functionality (re)implemented.

To summarize: if you update to Big Sur right now, your PDF exports from Marked 2 will be ruined. I’m working on the issue, but there are major changes coming that may take me months to implement. The HTML-to-web-browser solution should get you through, though, so it shouldn’t be a showstopper on updating your system.

Hook 2.0 and updated CLI

Version 2.0 of Hook is out, and there’s a lot to talk about. Creator Luc Beaudoin was on Mac Power Users recently, discussing Hook among other things. You can see everything that’s new in the Hook 2.0 Release Notes.

If you’ve checked out Hook in the past but weren’t sold, take a fresh look at it. There’s an updated UI, including a full browser with previews for hooked items, pinned hooks, and an expansion of the way hooks can act as bookmarks. As part of this, the API was significantly changed (all for the better), thus the command line interface I wrote for it (which relies on Hook’s AppleScript library) required an overhaul.

The CLI has several new features, including a command for searching bookmarks by url or name, fzf for selecting files to operate on, and built-in shell completion scripts for bash, zsh, and fish. Check out the project page and see the GitHub README for full documentation.

If you already have the gem installed, you can update it to work with Hook 2.0 using gem update hookapp.

Dealing with leftover Zoom tabs in the browser

I wrote a quick script in response to a tweet from Brittany Smith in which she sought a solution for all the leftover Zoom tabs she had open in Safari after following a link that launched the Zoom app. I’m not in enough Zoom calls on a daily basis for this to be a real issue for me, but it was an easy enough script to whip up. I’m sharing it in case more people than just Brittany are in the same boat.

It should be noted that there’s a Safari extension called Zoom In that purports to provide a very elegant solution to this issue. I only hacked this together when Brittany said that the extension wasn’t working for her. Rather than bother trying to test it myself, I just wrote an AppleScript to handle it.

This will only work with Safari, but could easily be adapted to Chrome (and Brave, and probably Edge). It will never work with Firefox. Well, I shouldn’t say never, maybe someday Mozilla will get its AppleScript act together…

Here’s the script. You can trigger it from LaunchBar or Alfred, or use Automator to create a Workflow, Service, or App bundle. I’ll leave it at that. It’s working in my initial testing, but if you try it out and run into issues, please leave a comment or Tweet at me and I’ll update the gist with any fixes.

close zoom tabs.applescriptraw
use AppleScript version "2.4" -- Yosemite (10.10) or later
use scripting additions

set tabsToClose to {}

tell application "Safari"
	-- cycle through all open windows
	repeat with _window in windows
		-- cycle through all tabs of given window
		repeat with _tab in tabs of _window
			-- if the URL is a zoom.us URL, add it to the list to close
			if URL of _tab contains "zoom.us" then
				-- we want the tabs in reverse order
				-- otherwise closing one throws the index off
				set beginning of tabsToClose to _tab
			end if
		end repeat
		-- close matching tabs in current window
		repeat with _tab in tabsToClose
			close _tab
		end repeat
	end repeat
end tell

The Podcasts: Week of November 2nd

Hey, welcome to another week of podcasts!

On Systematic this week I was joined by Kelly Guimont. Since her last visit, she’s become an Operations Manager for Technolutionary. We talked a bit about her work, tech support, and before long we got into some of her true loves: Star Wars and fiber arts. The lighthearted conversation we all need right now (at least in the US), and Kelly is always a delight.

Overtired 212 was recorded on election day, prior to knowing any results at all. We predicted exactly what’s happened, though it didn’t take a pair of geniuses to guess how things were going to turn out. So we don’t take too much credit for stating the obvious. Among the spread of other toppics, we also get into the mental health concerns that so many people have surrounding election season. Worth a listen to even if it’s not technically “Live Election Coverage.”

Be sure to join us on Discord!

Find all the episodes at systematicpod.com and overtiredpod.com, and be sure to subscribe! My ability to keep the shows going is dependent on my ability to secure advertisers, which is in turn dependent on subscriber numbers. Getting yourself counted in my download stats (and maybe checking out the sponsors now and then) is all you have to do to support either or both shows!

The Podcasts: Week of October 26th

So I took this week off on Systematic. I was working (really hard!) to bring on a guest who could speak well to the mood of the US right before an historic election, but it turns out that most people that I consider “credentialed” for this discussion also have a lot of other stuff to do right before an historic election. So scheduling fell through a few times, and I’ll try to connect with some of my hopefuls in a few weeks and see how things are going. In the meantime, I’m very much looking forward to chatting with Kelly Guimont this coming week!

Overtired #211 was a blast. We’ve decided to record in the mornings for the foreseeable future. We’re just better that way. This episode was heavy on the TV discussions, but also dug in hard to command line note taking and custom keyboards. So if you fit some overlap of that Venn diagram, we have you covered.

Find all the episodes at systematicpod.com and overtiredpod.com, and be sure to subscribe! My ability to keep the shows going is dependent on my ability to secure advertisers, which is in turn dependent on subscriber numbers. Getting yourself counted in my download stats (and maybe checking out the sponsors now and then) is all you have to do to support either or both shows!

Progressive builds for Deckset

I’m a fan of Deckset for creating presentation decks using Markdown. Being able to write out an entire presentation in plain text is slick, and doing so cuts out time spent on transitions, animations, and other frivolities that come with building a deck in Keynote or PowerPoint. One thing that I’ve always missed, though, is progressive builds for lists, where each bullet item is revealed only when you advance.

The only way to replicate this in Deckset is to slowly build over multiple slides, adding one new list item with each. Which is a pain. A friend of mine had the same issue and asked me to automate it. So I present the “Spread Build Service.”

This Service just takes text containing multiple lines and expands it to a series of slides, starting with just the first line and progressively adding one line at a time until the full set is displayed. It can be used with bullet lists, numeric lists, or any text that has line breaks in it. Example input:

---

A list to build:

- Item 1
- Item 2
- Item 3

---

Selecting this text and running the Service on it generates:

---

A list to build:

---

A list to build:

- Item 1

---

A list to build:

- Item 1
- Item 2

---

A list to build:

- Item 1
- Item 2
- Item 3

---

A single blank line between elements will be preserved, but multiple newlines will be compressed to one empty line. You can select text with or without the slide dividers (---), they’ll be added to the output if they don’t exist in the input selection.

Hope you find it useful! Download, unzip, and double click the .workflow file to install the Service. It will show up as “Spread Build” when you have text selected and right click on it in any text editor.

Spread Build Service v1.0.1

A Service to convert a series of lines to a progressive build in Deckset (and other Markdown presentation apps)

Published 10/27/20.

Updated 10/27/20. Changelog

DonateMore info…

The Podcasts: Week of October 19th

This week on Systematic, I spoke with Jay Miller, a developer advocate for Elastic, and a guy who “builds stuff to help people who build stuff build stuff.” Which is a descriptive, albeit circumspect, way to say he makes cool stuff. He’s also one of the few Black developers I’ve had the pleasure of talking to on Systematic, a thing I’d like to make less rare.

This week’s Overtired has the topic list in the title: “A Disturbing B-12 Social Media Sex Cult Injection.” We navigate from dietary supplements to sex cults to radicalizing people via algorithms. It’s not necessarily a line, as I’m wont to switch topics very abruptly, but it does all relate in some manner, if you try hard enough. I have no intention of ever being good at sticking to a theme.

Find all the episodes at systematicpod.com and overtiredpod.com, and be sure to subscribe! My ability to keep the shows going is dependent on my ability to secure advertisers, which is in turn dependent on subscriber numbers. Getting yourself counted in my download stats (and maybe checking out the sponsors now and then) is all you have to do to support either or both shows!

The Podcasts: Week of October 12th

This is actually a double — well, quadruple — update. I missed the summary last week, so you get four at once. Four high quality, like-new podcasts, for the low, low price of $0.

Let’s start with Systematic. On episode 241 I had Tyler Hall on. He’s a Mac and iOS developer who has consistently created amazing software, always with the purpose of solving a problem he himself has, but crafted in a way that makes them accessible and useful to many others. In some ways I think of him as a kindred spirit, so it was great to chat with him.

On episode 242 I spoke with the delightful Alex Cox. They co-host Two Headed Girl and Do By Friday, and I’ve been a fan of theirs for a few years now. We caught up and dove into a discussion about gender, bipolar disorder, and virtual reality, among other topics. It was an excellent conversation.

Meanwhile, episode 208 of Overtired was titled “More Things to Not Talk About at Dinner” and basically serves as a guide to topics that should generally be avoided at family gatherings. Unless your family is just down for anything. Veganism, politics, religion, we hit ‘em all.

On Overtired 209 we stuck more to drugs, mechanical keyboards, and Microsoft Excel, though we did dip again into politics. How can you not right now? We recorded this one pretty early in the morning and that actually seemed to make it even more energetic. Guess us insomniacs are good morning people.

I’d also like to mention that I’ve started a Discord server for Systematic and Overtired listeners. There’s already a great community forming there, and I’d love it if you joined us!

Find all the episodes at systematicpod.com and overtiredpod.com, and be sure to subscribe! My ability to keep the shows going is dependent on my ability to secure advertisers, which is in turn dependent on subscriber numbers. Getting yourself counted in my download stats (and maybe checking out the sponsors now and then) is all you have to do to support either or both shows!