Releases: stianhoiland/cmdtab
cmdtab v1.5.1
v1.5.1
Hotfix
- Fix bug causing cmdtab to stop remembering new window activations—oof! 😖
- Fix crash when invoked with 0 windows
- Change icon to vibrant blue to suit both light and dark themes
- Remove "show delay" and "ignore minimized" non-feature
v1.5
Highlights
- Apps and windows are now sorted by activation order
- Fix stuck modifier keys and Alt-key inconsistencies compared with Windows Alt-Tab
- New (placeholder) icon
- Prettier message dialog
- UWP handling (icons not yet)
- Dark mode and accent color awareness
- Massive memory usage reduction (mind you, cmdtab is already very tiny!)
- Fix text alignment bug
- Faster keyboard hook (very important!)
- Alt-Q to quit selected app
- Select first app when on bare desktop
- Fix crash caused by some apps' product name (fixes #2)
Story Time
After much deliberation and study, cmdtab has been rebuilt to support true activation order. What's that you say? Doesn't cmdtab—the best macOS-style app/window switcher for Windows—already support that? Well, cmdtab has been overpromising and underdelivering this whole time.
Previously cmdtab relied on the order that Windows gives its top-level windows in when the EnumWindows function is called, and that order is the Z-order. The Z-order and the activation order are in some circumstances different, and not so subtly at that. If you minimize a window it is sent to the bottom of the Z-order, and therefore, in versions of cmdtab prior to v1.5, that window would be displayed last in the cmdtab switcher, even though it was in the foreground just a moment ago.
Windows has no documented API for querying the activation order of desktop windows, only the Z-order. This has put me on the path to discover the best way to keep track of the activation order of windows. There are many possible solutions to this, each with merits, quirks, gotchas, both subtle and not. Especially minimizing any involvement with the going-ons of the Windows shell was a goal in my search. Although in hindsight the solution in cmdtab is at once obvious, it was nevertheless arrived at only after considering what felt like every other possible solution. This gives me confidence, and the results speak for themselves.
Coupled with fixes for seemingly inscrutable bugs regarding stuck keys and subtly mismatching behavior compared to Windows' stock Alt-Tab switcher, along with a near astronomical improvement in memory usage and window handling capacity (70% memory usage decrease and yet 3200% increase of window capacity!), as well as color theme awareness and rudimentary handling of pesky UWP windows, this is clearly the best version of cmdtab yet.
It has taken close scrutiny of subtleties of the Win32 API to arrive here; the minutia of which knowledge is required to eek out the minimal surface area for a dead simple window switcher is surprisingly vast.
But now the jank is gone. Go forth and enjoy finally knowing wtf is going on with your Windows desktop. 🌈
Previous patches
See below for previous patch notes: v1.5, v1.4, v1.3, v1.2 , v1.1 and v1.0.
cmdtab v1.5
v1.5
Highlights
- Apps and windows are now sorted by activation order
- Fix stuck modifier keys and Alt-key inconsistencies compared with Windows Alt-Tab
- New (placeholder) icon
- Prettier message dialog
- UWP handling (icons not yet)
- Dark mode and accent color awareness
- Massive memory usage reduction (mind you, cmdtab is already very tiny!)
- Fix text alignment bug
- Faster keyboard hook (very important!)
- Alt-Q to quit selected app
- Select first app when on bare desktop
- Fix crash caused by some apps' product name (fixes #2)
Story Time
After much deliberation and study, cmdtab has been rebuilt to support true activation order. What's that you say? Doesn't cmdtab—the best macOS-style app/window switcher for Windows—already support that? Well, cmdtab has been overpromising and underdelivering this whole time.
Previously cmdtab relied on the order that Windows gives its top-level windows in when the EnumWindows function is called, and that order is the Z-order. The Z-order and the activation order are in some circumstances different, and not so subtly at that. If you minimize a window it is sent to the bottom of the Z-order, and therefore, in versions of cmdtab prior to v1.5, that window would be displayed last in the cmdtab switcher, even though it was in the foreground just a moment ago.
Windows has no documented API for querying the activation order of desktop windows, only the Z-order. This has put me on the path to discover the best way to keep track of the activation order of windows. There are many possible solutions to this, each with merits, quirks, gotchas, both subtle and not. Especially minimizing any involvement with the going-ons of the Windows shell was a goal in my search. Although in hindsight the solution in cmdtab is at once obvious, it was nevertheless arrived at only after considering what felt like every other possible solution. This gives me confidence, and the results speak for themselves.
Coupled with fixes for seemingly inscrutable bugs regarding stuck keys and subtly mismatching behavior compared to Windows' stock Alt-Tab switcher, along with a near astronomical improvement in memory usage and window handling capacity (70% memory usage decrease and yet 3200% increase of window capacity!), as well as color theme awareness and rudimentary handling of pesky UWP windows, this is clearly the best version of cmdtab yet.
It has taken close scrutiny of subtleties of the Win32 API to arrive here; the minutia of which knowledge is required to eek out the minimal surface area for a dead simple window switcher is surprisingly vast.
But now the jank is gone. Go forth and enjoy finally knowing wtf is going on with your Windows desktop. 🌈
Previous patches
See below for previous patch notes: v1.4, v1.3, v1.2 , v1.1 and v1.0.
cmdtab v1.4
v1.4
Highlights
- Fix bug causing first app window to be skipped when switching sub-windows with Alt-` after first having Alt-Tab'ed
- Better code (always)
- Fix bug causing switcher GUI to be oversized on activation if configured to show switcher when switching sub-windows (yeah, these are tongue twisters... Imagine having to write them!)
- Oh, and autorun never worked because of a very dumb bug. Fixed! Now autoruns.
Previous patches
See below for previous patch notes: v1.3, v1.2 , v1.1 and v1.0.
cmdtab v1.3
v1.3
Highlights
- Fix hanging Alt key (woohoo!)
- Fix window restoring bug reported in issue #1
- Fix initial white flash when showing GUI
- Improvements to stability and snappiness: snappiness is happiness!
- No GUI delay by default:
After extended use, I have determined that the lesser visual impact of a
narrow strip of icons vs. a possibly full-screen montage of window previews
is enough to prevent the distraction for which GUI delay was introduced. Now
I much prefer the snappiness of no delay. Nevertheless, the functionality of
GUI delay will remain in cmdtab, but will be disabled by default. - Allow fast switching for both app- and window-switching (was only allowed for
subwindow-switching) - Allow showing GUI switcher for both app- and window-switching (was only
allowed for app-switching) - Dodge & weave between apps & windows by mixing & matching Alt-Tab & Alt-`
- Damn that's some pretty code!
- Long app names are now aligned to fit the switcher
- Use Alt-W and Alt-Delete to close selected window (requires some testing)
- Use Alt-M to minimize window (requires some testing)
- Cmdtab will now (re)ask if you want to enable autorun before refusing to
start if it's already running - Fixed a bug that caused cmdtab to no longer ask about autorun
Conclusion
This patch feels better. It feels good. It's stable now. Enjoy!
See below for previous patch notes: v1.2 , v1.1 and v1.0 .
cmdtab v1.2
v1.2
Highlights
- Filter more unwanted windows (especially a persistent explorer.exe window)
- Display pretty names for more apps (ex. Github Desktop)
- Fix autorun dialog spam on startup
- Much prettier code
Known issues
- There is sometimes a conspicuous white flash when the GUI appears
- See v1.0 release notes for full list of known issues
Conclusion
Another small patch. See below for v1.1 and v1.0 full release notes.
cmdtab v1.1
v1.1
Highlights
- Fixed drawing bug (white rectangle in switcher GUI)
- Cancel window switching by clicking outside switcher
- Confirmation dialog when quitting cmdtab
- Prettier code
Conclusion
Just a small release. See below for v1.0 full release notes.
cmdtab v1.0
First public release
Features
- Alt-Tab to show app switcher GUI
- Alt-` to instantly cycle windows of same app (no GUI, like macOS)
- Alt-Esc after Alt-Tab to cancel switcher
- Alt-Esc after Alt-` to revert to initial window
- Alt-Arrows as alternative for choosing app (repeating Alt-Tab also does this)
- Alt-Enter as alternative for confirming switch (releasing Alt also does this)
- Alt-F4 quits cmdtab
- Hold Shift to reverse direction
- Wrap bump on key repeat (yum!)
- Delayed show for flicker-free quick switching (not same as flicker-free drawing)
- Easy autorun (through registry)
- Input capture (prevent keystrokes from bleeding through to other apps)
- Double-buffered, flicker-free drawing
- Single instance protection
- Dark mode
Experimental
- Ctrl+Alt+Tab to toggle between cmdtab and default Windows switcher (buggy!)
Known issues
- Alt key gets stuck sometimes. Temporary workaround is to press Alt Ctrl Shift to release stuck Alt key
- Right-most icons sometimes not drawn correctly (white rectangle)
- Wrong icon sometimes: It's no joke trying to get nice icons of running applications
- Wrong title sometimes: It's surprisingly hard to just get the name of a running application
- Wrong apps sometimes: It's surprisingly hard to filter windows correctly (so many weird, invisible windows you'd never know)
- Wrong order sometimes: It's fundamentally flawed to rely on Z-order from EnumWindows() as window activation order (TIL!). Need a refactor for correct behavior.
- Relying on "Alt key workaround" for window activation. Doesn't cause any issues (except maybe stuck Alt key sometimes?), but will refactor for elegance.
- Leaky drawing
Roadmap/WIP
- Fix known issues
- User-facing configuration
- Custom app blacklist
- Setting for how to handle minimized apps (yeah, some people actually use window minimization for workflow management, not just visual management)
- Alt-Delete to close window (like Windows 10 and up)
- Alt-W to close window (like macOS)
- Alt-Q to close all windows of application (like macOS)
- Alt-M to minimize
- Mouse click on app icon to switch
- Mouse click outside switcher to cancel switcher
- C runtime free code
- Artisanal Win32 APIs
Conclusion
Finally, a great macOS-style window switcher for Window. Enjoy! (And check back for updates...)