I'll give this one a try. BTW, if this works, can you please consider asking money for it? Keep it open source but perhaps add a friction-less support channel (read: not github issues) for paying customers. Just an idea.
In any case, thanks for the hard work and making it open-source.
AltTab and Maccy are the 2 apps I can’t live without on macOS. Rectangle used to be in that list too, but I managed to not need it anymore since Apple introduced native tiling a few versions ago. Now they just need to introduce native clipboard history and sane alt+tab, hopefully this decade.
1. Restores minimized apps when you tab to them (Apple leaves them minimized, defeating the whole purpose of the hotkey)
2. Creates a new window if the app you're tabbing to lacks one (primarily Finder; the developer added this at my request)
Any similar utility that doesn't do the above two things has pretty much missed the boat.
Alt-Tab is one of the first things I install on a new Mac OS installation. The other is Karabiner, so I can add a real Delete key to my keyboard (fixing another irritating Apple omission).
I use yabai and I've been wanting something similar to what you built. Instead of one desktop per workspace, I'd like to be able to have "sets of desktops" per workspace as it were, because not all work I do that involves multiple apps needs them on the same screen at all times (or even ever).
As an example: I might have IDE + browser on one desktop, Fork.app and local server on another, and Music.app on a third (as I like to listen to music while I work). So to me, those are all related, but don't make sense on one desktop.
The other consideration is that I also tend to use tiling more on bigger displays. Since I sometimes do work with just the builtin display, I have to reorganize windows and desktops every time I switch, which is a bit of a PITA. With a solution like yours, but for sets of desktops, I could just switch to a different set and be done in seconds.
Is something similar possible using HopTab?
FYI, the homwbrew checksum is broken: “Cask reports different checksum”.
Secondly, I would find it amazing if it could be notarized – I do understand however there is a cost associated with getting an apple dev account – and time/effort.
*What's new*
Global window tiling shortcuts — Ctrl+Opt+Arrow for halves, Ctrl+Opt+UIJK for quarters, Ctrl+Opt+DFG for thirds. Works anytime, no switcher needed. All 17 directions are configurable.
Cycle through sizes — press Ctrl+Opt+Left twice and the window goes from 1/2 to 1/3, press again for 2/3. Same for right. This is the Rectangle feature I missed most.
Undo snap — Ctrl+Opt+Z restores the previous window position. Every snap saves the old frame automatically.
Move between monitors — Ctrl+Opt+Cmd+Arrow throws the window to the next display with proportional placement.
Configurable gaps — 0–20pt gaps between snapped windows. Settings slider with live preview.
Profile switcher shows app icons — instead of generic person avatars, the Option+` overlay shows a grid of each profile's actual pinned app icons.
*What was already there*
Pin apps, Option+Tab to cycle through only those Profiles per workflow (Coding, Design, etc.) with per-profile hotkeys Layout templates (50/50, IDE 60/40, three columns, 2×2 grid) Session save/restore — saves every window's position, size, z-order per profile Assign profiles to macOS Spaces — auto-switches when you swipe desktops Window picker for multi-window apps Cmd+Q/H/M while switcher is open Sticky notes per profile What it replaces
I was using Rectangle + AltTab + some manual window dragging. HopTab combines the app switching, window tiling, and workspace management into one app. The main difference from AltTab is that you pin specific apps instead of seeing everything. The main difference from Rectangle is that tiling is integrated with profiles and layouts — snap your windows, save the session, restore it tomorrow.
Free, open source, no telemetry. ~3MB binary.
Website: https://www.royalbhati.com/hoptab
It is a constant pain when I cmd-tab in a space with safari, and it throws me out of the space to another one because the window that gets focus isn’t the “closest” one on the current space.
The way a user switches window sets with backtick and app windows within them with tab is inverted from the usual major and minor shortcuts. Normally you switch apps with tab and windows within them with backtick, or in the case of stage manager, you switch window sets with tab and windows within them with backtick. As a default I think the keys make less sense than they could.
https://knowyourmeme.com/memes/subcultures/suffering-from-su...
I needed custom icons, custom names for windows, obligatory custom and persistent order, 'always on' option and keyboard nav for showing/moving windows from the strip. Could not be happier.
I wish it performed as well as glazewm on windows. I can make a windows box be almost as responsive as a linux box, I simply cannot do that with a macbook.
I have a few hammerspoon customization for me to choose and open the applications I have. I put those on different desktop but use this to open applications. Whereas for the tiling itself use either aerospace or Loop.
Here is the hammerspoon code for opening the apps using keyboard more like vim jump options.
```
----show all windows of the clicked application
local function showAppWindows(window) local app = window:application() local appWindows = app:allWindows() if #appWindows > 1 then hs.hints.windowHints(appWindows, function(selectedWindow) selectedWindow:focus() local frame = selectedWindow:frame() hs.mouse.setAbsolutePosition({ x = frame.x + frame.w / 2, y = frame.y + frame.h / 2 }) end) else window:focus() local frame = window:frame() hs.mouse.setAbsolutePosition({ x = frame.x + frame.w / 2, y = frame.y + frame.h / 2 }) end end
hs.hotkey.bind({ "cmd", "ctrl", "alt", "shift" }, "p", function() hs.hints.windowHints(nil, showAppWindows) end)
----window search modal
local function createWindowSearchModal() local allWindows = hs.window.allWindows() local windowChoices = {}
for i, window in ipairs(allWindows) do
if window:title() and window:title() ~= "" then
local app = window:application()
local appName = app and app:name() or "Unknown"
table.insert(windowChoices, {
text = appName .. " - " .. window:title(),
subText = "Window " .. i,
window = window,
id = i
})
end
end
local chooser = hs.chooser.new(function(choice)
if choice and choice.window then
choice.window:focus()
local frame = choice.window:frame()
hs.mouse.absolutePosition({ x = frame.x + frame.w / 2, y = frame.y + frame.h / 2 })
end
end)
chooser:choices(windowChoices)
chooser:searchSubText(true)
chooser:show()
endhs.hotkey.bind({ "cmd", "ctrl", "alt", "shift" }, "o", function() createWindowSearchModal() end)
---- window search modal for active application only
local function createActiveAppWindowSearchModal()
local frontmostApp = hs.application.frontmostApplication() if not frontmostApp then hs.alert.show("No active application detected") return end local appWindows = frontmostApp:allWindows() local windowChoices = {} for i, window in ipairs(appWindows) do if window:title() and window:title() ~= "" then table.insert(windowChoices, { text = window:title(), subText = "Window " .. i, window = window, id = i }) end end if #windowChoices == 0 then hs.alert.show("No windows found for active application") return end local chooser = hs.chooser.new(function(choice) if choice and choice.window then choice.window:focus() local frame = choice.window:frame() hs.mouse.absolutePosition({ x = frame.x + frame.w / 2, y = frame.y + frame.h / 2 }) end end) chooser:choices(windowChoices) chooser:searchSubText(true) chooser:show() end
hs.hotkey.bind({ "cmd" }, "1", function() createActiveAppWindowSearchModal() end) ```
btw, this is crazy: “Divvy supports […] Microsoft Windows XP+”
And yes to switch between windows of the same application it's Cmd+Shift+´. Not the most intuitive, but I feel it should not be combined, because that would mess up the sequence massively. If I want to switch Terminal windows, I don't want to do Cmd+Tab and then manually look through all 15 window icons to select.
Like, IMO the status quo is perfect. Sure, you gotta get used to Cmd+Shift+´, but try to do it for a week, and then it's perfectly natural.
I still can't understand who ever thought this was a good idea...
1. command-tab to desired app, keep command held down
2. hit down-arrow to enter an app's windows, you can let go of command now
3. arrow keys + return, or mouse-click, to pick window; some apps may do weird things here - preview starts with no highlights and has a list of recent documents at the bottom, for instance
This is kind of poorly documented and not very discoverable, I couldn't find it in Help>MacOS Help or Help>Tips for Your Mac, I ended up learning it from the online version of the manual.
Alternatively, and what I mostly do:
1. hit the Mission Control key (three little rectangles, usually f3), or 3-fingered swipe up on the trackpad
2. click on the desired window, keyboard is ignored here
(command-Mission Control shows the desktop, control-Mission Control shows only the current app's windows)
Even more alternatively:
1. right/command-click on an app's Dock icon
2. there may be a text list of open windows and/or recent documents, there will always be a Show All Windows entry at the bottom, keyboard nav works here
Cmd+Tab to the app, then press ↓ to choose a window from the app. Arrange using the basic OS window manager or your favorite 3rd-party window manager.
Most of the time, people have 2-3 work windows that they just want to swap between quickly, regardless of what "app" they happen belong to. The Windows alt-tab behavior captures that beautifully.
https://support.apple.com/en-gb/guide/mac-help/mchl40d5b86b/...
Well… it used to be possible.
I was using an AZERTY keyboard in my youth, and was definitely able to switch windows using cmd-< and/or cmd->. (I just tried, it is indeed not possible anymore as per my limited testing, for some reason…)
> Separating cmd+tab and cmd+backtick is moronic
Not for my taste. I like the app-centric worldview. I can understand that not everybody does though.
On a US keyboard, the key directly above tab is the grave/tilde key: `~
I didn't know you could swap those shortcuts without a third-party app though, I'll have to try that.