https://blog.gingerbeardman.com/2024/08/10/stapler-i-remade-a-32-year-old-classic-macintosh-app/ [?]I Get Info * by Matt Sephton * Search blog: [ ] * About * RSS * Tags * Support Stapler: I remade a 32 year old classic Macintosh app 2024-08-11 * edited * 4 mins read #finder #macos #software #swift #swiftui #tasks #workflow A couple of days ago I was reading on Hacker News about a feature in some Linux window managers where they allow collections of tabs from different apps. This reminded me of BeOS, but at the same time it reminded me of an app from 1992 for classic Macintosh called Stapler, and how I'd talked about that and it's one-time spiritual successor, LaunchList, in the past. These were both similar apps that allowed you to collect and launch all the apps, files, folders, documents, related to a specific task, thus saving time. Or as Ali Rantakari so succinctly put it in 2009: "Opening a Bunch of Stuff at Once on Your Mac". So over the past day or so I built my own take on this concept for modern macOS! Whilst my app is inspired by both Stapler (right down to the name) and LaunchList, my app adds improvements and features of its own and is more of a hybrid of both. For example, Stapler didn't have drag and drop and LaunchList didn't have zero-click auto-launch. My goal was to keep it as simple as possible, but no simpler. To that end, there are no preferences or settings in the app. Full details, download, and usage are at the GitHub repo: github.com/ gingerbeardman/stapler --------------------------------------------------------------------- PNG --------------------------------------------------------------------- Tell me more The idea is you set up a Stapler Document per project containing related apps, files, folders, etc. Then you can open them all at once by launching the single document. Each document contains a list of aliases that can be managed, inspected, launched using the app. The key time-saver is that if you launch a Stapler Document directly, all the items in its list will automatically be launched. Cool! * Work: text editor, run current game, pixel art editor, bitmap font app, todo list * Play: Music app, Hacker News app, Twitter app, script to position windows * Movie: run Caffeine to keep your computer on, shortcut to put displays to sleep It's an odd way of thinking about working on a computer--it's task-based rather than app-based or document-based. Indeed, some might say it's an outdated way of approaching things. But I'm always banging the drum about there being so much good stuff that was prematurely left behind along with the memories of System 7 (though I still use that), BeOS, OS/2, Amiga Workbench, GEM and the many alternative desktops of Atari ST, etc. So I thought I'd see if I could walk the walk as well as talk the talk. Details It's written in Swift and SwiftUI and weighs in at 640KB, about one third of which is a multitude of icon files at many different sizes and resolutions. By creating a Document-Based App you get a ton of functionality for free, such as document/tab/window management, undo/ redo (though I still needed to watch for it and refresh the app window), and much more. The editor is a native macOS window that's kind of like list view in a file manager, or a spreadsheet, or a little folder...depending on your point of view. Plus some menu commands and keyboard equivalents. The items in each list are macOS bookmarks (sometimes: security scoped bookmarks) which are a type of authorised/verified/secure alias (in fact, they're still called aliases in the code) that have been around for about 10-15 years. They contain the path plus a bunch more info. As macOS becomes more locked-down the recommended way of accessing files is to retrieve these bookmarks through the normal layers of system permissions and security. Without the bookmarks, for example just using plain text paths, I would not be able to show the full images in Quick Look or easily launch the list items. A key benefit is that the bookmark will still resolve if the file is moved somewhere else on the same disk, or even to a different volume! I store the items as JSON in the saved file, simply because I prefer it to XML (which is the main/default option). I wanted the files to still be human readable and editable to a degree. The files are launched using the default app specified by that file, so it can be changed on a per-file basis. Individual images might open in an image editor, image viewer, app to run OCR, script to run OCR on it, etc. Dealing with files was both cool and annoying, cool that you can get the bookmarks to files so easily, but annoying that you have to jump through so many hoops to work around the security and sandbox protections and end up having to do file requests in a long-winded way, and then there's having to tweak plist entries to give the app just the right permissions. I'm using some features of SwiftUI that mean the app can't run on anything before macOS 14 Sonoma. All-in-all I'd say modern macOS development is a bit of a mixed bag. Take it or leave it. Icon Given that this was a quick weekend project, I kind of lost steam when it came to the icon. I'd love a better app icon, as well as a specific document icon, so any icon designers can step this way. Bonus tip Make sure to uncheck: System Settings > Desktop & Dock > Windows > Close windows when quitting an application Then leave the windows of an app open as you quit it. When you next launch the app its windows will restore to their previous size and position. If you close the windows first, then the app will restore to having no windows open. --------------------------------------------------------------------- Thanks My good friend Dave Roberts (Serendipity App Company) for brainstorming why it was so damned difficult to get the app to react differently when a document was opened from Finder. Rip it up and start again! To Dustin Mierau for kickstarting this trend of remaking forgotten old apps for modern macOS. And eternal thanks to Chris Patterson and Ali Rantakari for their apps. --------------------------------------------------------------------- Elsewhere * Hacker News -- Originally published: 2024-08-10 -- Enjoyed this blog post? Please show some support. -- Comments: @gingerbeardman Previous Post TETRIS for Sharp Electronic Notebook (1989) --------------------------------------------------------------------- tag cloud: 1bit 1bitwoodblocks 3ds 60fps amiga animation apple appletv appstore arcade archaeology art artist atarist audio automation bandkun barbaranessim basiliskii becker best birthday cars controllers credits critique dailydriver deneba design dreamcast dsiware electronics emoji emulation extension famicom faq finder fonts foretrack game gamedev gameplay gba golf google graphics guide hack hanafuda hardware history hypercard icarus internetarchive interview ios itchio japanese keyquencer koei koikoi maboshi macintosh macos magazine mahjong maps marchintosh markdown medium megadrive midjourney mmm mod modes msx music nes nintendo nintendo64 nintendods openscad palmos patreon pc pc98 physics piece pixelart playdate playstation polarium popular poweruser preservation proxy recap recommendations rendering reverseengineering review roundrobin rss save scans script sfx shell snes software solitaire sonyreader sparrowsolitaire summary system7 tetris thoruyamamoto translation tv twitter ultrapaint ux videogame videogames wii wiiware windows workflow wwdc x68000 year yoyozo