Skip to content

Releases: selimacerbas/FocusMode.spoon

v0.3.1

16 Feb 08:26

Choose a tag to compare

Fix: mouseDim performance

hs.window.orderedWindows() was being called on every mouse move (~12x/sec when mouseDim = true), hammering the macOS accessibility framework and causing system-wide slowdown.

Now caches the window frame under the cursor and only re-queries when the mouse actually crosses to a different window — eliminates 90%+ of expensive AX calls.

v0.3.0

12 Feb 14:08

Choose a tag to compare

What's New

Per-Window Focus (Fixes #2)

New setting perWindowFocus. When true, only the single focused window is undimmed — not all windows of the same app. Useful when you have multiple Ghostty, Firefox, or terminal windows and want to dim the unfocused ones. Toggleable from the FM menubar menu.

spoon.FocusMode.perWindowFocus = true

Fade Transitions (Fixes #1)

New setting fadeOutDuration. Departing windows smoothly fade back into the dim instead of disappearing instantly. Uses destinationOut alpha animation at 30fps.

spoon.FocusMode.fadeOutDuration = 0.3  -- seconds (default)
spoon.FocusMode.fadeOutDuration = 0    -- instant, like v0.2

Delayed Dim (Fixes #3)

New setting dimDelay. A grace period before fading starts — switching back to a window within this time gives instant undim. Great for shuffling windows without visual noise.

spoon.FocusMode.dimDelay = 1.0  -- 1 second grace before dimming

Other Improvements

  • Window deduplication guard prevents duplicate holes when mouse hovers focused app
  • Space switch and screenshot suspend cleanly clear fade state (no ghost holes)
  • New menubar toggle for per-window focus mode

v0.2.0

12 Feb 14:08

Choose a tag to compare

What's New

  • Space-aware redraw: Immediate redraw when switching Spaces — no more stale overlay holes from the previous space
  • Optimized redraw: Canvas elements reused in-place instead of remove-all/reinsert-all on every frame
  • Dynamic menubar tooltip: Shows "paused (screenshot)" during screenshot suspend
  • Screenshot awareness: Overlays automatically hide during ⌘⇧3/4/5/6 screenshots
  • Backward-compat fix: mouseUndim config key now correctly overrides mouseDim default

PaperWM Integration

  • _suspendFor(seconds) method documented for use in PaperWM wrappers
  • eventSettleDelay debounce handles rapid tiling events smoothly