Last active
June 28, 2025 16:28
-
-
Save szhu/254b634be6a57473e20f048b3849acf8 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| -- ~/.hammerspoon/init.lua | |
| ---@diagnostic disable-next-line: undefined-global | |
| local hs = hs | |
| hs.window.animationDuration = 0 | |
| -- https://github.com/Hammerspoon/hammerspoon/issues/3224#issuecomment-1294971600 | |
| local function axHotfix(win, fn) | |
| local axApp = hs.axuielement.applicationElement(win:application()) | |
| local wasEnhanced = axApp.AXEnhancedUserInterface | |
| if wasEnhanced then | |
| axApp.AXEnhancedUserInterface = false | |
| end | |
| fn() | |
| if wasEnhanced then | |
| axApp.AXEnhancedUserInterface = true | |
| end | |
| end | |
| -- CenterOnScreen: Center new standard windows on the screen. | |
| -- https://chatgpt.com/share/679c6282-322c-8007-9421-d7a0513d1a5f | |
| hs.window.filter.default:subscribe(hs.window.filter.windowCreated, function(win) | |
| print("[CenterOnScreen] Window created. App: " .. (win:application():bundleID() or "unknown")) | |
| -- if win:application():bundleID() == "com.microsoft.VSCode" then return end | |
| if win:application():bundleID() == "org.hammerspoon.Hammerspoon" then return end | |
| if not win:isStandard() then return end | |
| if not win:isMaximizable() then return end | |
| if win:tabCount() ~= nil and win:tabCount() > 1 then return end | |
| if not win:application():isFrontmost() then return end | |
| axHotfix(win, function() | |
| win:centerOnScreen() | |
| end) | |
| end) | |
| -- QuitFinder: Quit Finder when it's backgrounded with no standard windows. | |
| QuitFinderTimer = hs.timer.new(5, function() | |
| local Finder = (hs.application.applicationsForBundleID("com.apple.finder"))[1] | |
| if not Finder then return end | |
| -- Count only standard windows, ignoring the Desktop window. | |
| local windowCount = 0 | |
| for _, window in ipairs(Finder:allWindows()) do | |
| if window:isStandard() then | |
| windowCount = windowCount + 1 | |
| end | |
| end | |
| print("[QuitFinder] Finder has " .. windowCount .. " standard windows and is " .. | |
| (Finder:isFrontmost() and "frontmost" or "backgrounded") .. ".") | |
| if windowCount == 0 and not Finder:isFrontmost() then | |
| print("[QuitFinder] Finder is backgrounded with no windows, quitting.") | |
| Finder:kill() | |
| end | |
| end) | |
| QuitFinderTimer:start() -- https://github.com/Hammerspoon/hammerspoon/issues/1942#issuecomment-430450705 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment