Initial commit of Hammerspoon config
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
--- AppBorders.lua
|
||||
|
||||
local logger = hs.logger.new("AppBorders")
|
||||
logger.i("Init")
|
||||
|
||||
-- 1. Variables must be global (no 'local') so they don't get garbage collected
|
||||
global_border = nil
|
||||
isBorderEnabled = false -- This tracks if the mode is ON or OFF
|
||||
|
||||
function initBorder()
|
||||
local win = hs.window.focusedWindow()
|
||||
local frame
|
||||
if win ~= nil then
|
||||
frame = win:frame()
|
||||
else
|
||||
frame = hs.geometry.new(0, 0, 0, 0)
|
||||
end
|
||||
|
||||
global_border = hs.drawing.rectangle(frame)
|
||||
global_border:setStrokeColor({ ["red"] = 1, ["blue"] = 0, ["green"] = 0, ["alpha"] = 0.8 })
|
||||
global_border:setFill(false)
|
||||
global_border:setStrokeWidth(8)
|
||||
|
||||
-- Only show if enabled
|
||||
if isBorderEnabled then
|
||||
global_border:show()
|
||||
end
|
||||
end
|
||||
|
||||
function redrawBorder(window, name, event)
|
||||
-- If the toggle is OFF, make sure border is hidden and stop
|
||||
if not isBorderEnabled then
|
||||
if global_border then global_border:hide() end
|
||||
return
|
||||
end
|
||||
|
||||
-- Skip specific apps
|
||||
if name == 'Kontrollzentrum' then return end
|
||||
|
||||
local win = hs.window.focusedWindow()
|
||||
if win ~= nil then
|
||||
-- Create the border object if it doesn't exist yet
|
||||
if not global_border then initBorder() end
|
||||
|
||||
local newFrame = win:frame()
|
||||
local currentFrame = global_border:frame()
|
||||
|
||||
if not newFrame:equals(currentFrame) then
|
||||
global_border:setFrame(newFrame)
|
||||
end
|
||||
global_border:show()
|
||||
else
|
||||
if global_border then global_border:hide() end
|
||||
end
|
||||
end
|
||||
|
||||
-- 2. Setup the window filter (but it won't do anything until isBorderEnabled is true)
|
||||
allwindows = hs.window.filter.new(nil)
|
||||
allwindows:subscribe(hs.window.filter.windowCreated, redrawBorder)
|
||||
allwindows:subscribe(hs.window.filter.windowDestroyed, redrawBorder)
|
||||
allwindows:subscribe(hs.window.filter.windowFocused, redrawBorder)
|
||||
allwindows:subscribe(hs.window.filter.windowMoved, redrawBorder)
|
||||
allwindows:subscribe(hs.window.filter.windowUnfocused, redrawBorder)
|
||||
|
||||
-- 3. THE TOGGLE FUNCTION
|
||||
function toggleAppBorders()
|
||||
isBorderEnabled = not isBorderEnabled
|
||||
|
||||
if isBorderEnabled then
|
||||
hs.alert.show("Window Borders: ON")
|
||||
if not global_border then initBorder() end
|
||||
redrawBorder() -- Trigger immediate draw
|
||||
else
|
||||
hs.alert.show("Window Borders: OFF")
|
||||
if global_border then global_border:hide() end
|
||||
end
|
||||
end
|
||||
|
||||
-- 4. THE HOTKEY (Change "B" or the modifiers to your liking)
|
||||
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "B", function()
|
||||
toggleAppBorders()
|
||||
end)
|
||||
Reference in New Issue
Block a user